‎2007 Jan 24 8:47 AM
Hi All,
I am using FM DYNP_VALUES_READ to read the screen field values and then modifying those values and passing the modified table to DYNP_VALUES_UPDATE. But the problem is screen fields are not populated with these values . The values I wish to populate are footer values . I am using OO ALV for this wherein I am handling an event for filter of records and accordingly I need to modify my footer. Any Suggestions??
&----
*& Form footer
&----
Caslculate Total items, number of hits/Miss and percent MSP
----
--> p1 text
<-- p2 text
----
FORM footer .
CLEAR : io_totitems,
io_tothit,
io_totmiss,
io_permiss.
IF NOT l_flag EQ 1.
Get total items
DESCRIBE TABLE i_outdata LINES io_totitems.
LOOP AT i_outdata INTO wa_outdata.
calculate number of hits
IF wa_outdata-hit_miss = 'HIT'.
io_tothit = io_tothit + 1.
ENDIF.
calculate number of Miss
IF wa_outdata-hit_miss = 'MISS'.
io_totmiss = io_totmiss + 1.
ENDIF.
CLEAR wa_outdata.
ENDLOOP.
calculate percent MSP
io_permiss = ( ( io_totitems - io_totmiss ) / io_totitems ) * 100 .
IF l_flag EQ 1.
wa_dynpread-fieldname = 'IO_TOTITEMS'.
APPEND wa_dynpread TO t_dynpread.
wa_dynpread-fieldname = 'IO_TOTHIT'.
APPEND wa_dynpread TO t_dynpread.
wa_dynpread-fieldname = 'IO_TOTMISS'.
APPEND wa_dynpread TO t_dynpread.
wa_dynpread-fieldname = 'IO_PERMISS'.
APPEND wa_dynpread TO t_dynpread.
CLEAR wa_dynpread.
d020s-prog = sy-repid.
d020s-dnum = sy-dynnr.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = d020s-prog
dynumb = d020s-dnum
translate_to_upper = 'X'
REQUEST = ' '
TABLES
dynpfields = t_dynpread.
MOVE io_totitems TO io_totitem.
CONDENSE io_totitem NO-GAPS.
MOVE io_tothit TO io_tothits.
CONDENSE io_tothits NO-GAPS.
MOVE io_totmiss TO io_totmis.
CONDENSE io_totmis NO-GAPS.
MOVE io_permiss TO io_permis.
CONDENSE io_permis NO-GAPS.
LOOP AT t_dynpread INTO wa_dynpread.
CASE: wa_dynpread-fieldname.
WHEN 'IO_TOTITEMS'.
wa_dynpread-fieldvalue = io_totitem .
MODIFY t_dynpread FROM wa_dynpread.
WHEN 'IO_TOTHIT'.
wa_dynpread-fieldvalue = io_tothits.
MODIFY t_dynpread FROM wa_dynpread.
WHEN 'IO_TOTMISS'.
wa_dynpread-fieldvalue = io_totmis.
MODIFY t_dynpread FROM wa_dynpread.
WHEN 'IO_PERMISS'.
wa_dynpread-fieldvalue = io_permis .
MODIFY t_dynpread FROM wa_dynpread.
ENDCASE.
CLEAR wa_dynpread.
ENDLOOP.
CALL FUNCTION 'DYNP_VALUES_UPDATE'
EXPORTING
dyname = d020s-prog
dynumb = d020s-dnum
TABLES
dynpfields = t_dynpread
EXCEPTIONS
invalid_abapworkarea = 1
invalid_dynprofield = 2
invalid_dynproname = 3
invalid_dynpronummer = 4
invalid_request = 5
no_fielddescription = 6
undefind_error = 7
OTHERS = 8.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDIF.
*
Get all fotter details in a internal table
this is used to download footer in Excel
wa_footer-fldname = 'Total Items '.
wa_footer-value = io_totitems.
APPEND wa_footer TO i_footer.
wa_footer-fldname = 'Number of HIT'.
wa_footer-value = io_tothit.
APPEND wa_footer TO i_footer.
wa_footer-fldname = 'Number of MISS'.
wa_footer-value = io_totmiss.
APPEND wa_footer TO i_footer.
wa_footer-fldname = 'Percentage MISS '.
wa_footer-value = io_permiss.
APPEND wa_footer TO i_footer.
CLEAR wa_footer.
ENDFORM. " footer
‎2007 Jan 24 9:20 AM
1.check one
LOOP AT t_dynpread INTO wa_dynpread.
CASE: wa_dynpread-fieldname.
WHEN 'IO_TOTITEMS'.
wa_dynpread-fieldvalue = '12'."io_totitem .
MODIFY t_dynpread FROM wa_dynpread.
WHEN 'IO_TOTHIT'.
wa_dynpread-fieldvalue = '13'."io_tothits.
MODIFY t_dynpread FROM wa_dynpread.
WHEN 'IO_TOTMISS'.
wa_dynpread-fieldvalue = '20' . "io_totmis.
MODIFY t_dynpread FROM wa_dynpread.
WHEN 'IO_PERMISS'.
wa_dynpread-fieldvalue = '32'."io_permis .
MODIFY t_dynpread FROM wa_dynpread.
ENDCASE.
CLEAR wa_dynpread.
ENDLOOP.Pass some hard quoted values for check here and see in debugging all the fields are present in t_dynpread.
2.
CALL FUNCTION 'DYNP_VALUES_UPDATE'
EXPORTING
dyname = sy-cprog
dynumb = sy-dynnr
TABLES
dynpfields = t_dynpread
check these .
regards,
vijay
‎2007 Jan 24 9:22 AM
Hi Vijay,
I have debugged the program and the values are getting stored in the table.
‎2007 Jan 24 9:29 AM
Did you perform check 2 .
please use sy-cprog instead of sy-repid for this fm.
Cause i see no problem with the code .
regards,
vijay
‎2007 Jan 24 9:33 AM
‎2007 Jan 24 9:39 AM
Refer this code sample
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path.
DATA : i_scrfields LIKE dynpread OCCURS 1 WITH HEADER LINE.
DATA : v_prog LIKE sy-repid.
i_scrfields-fieldname = 'P_DLOAD'.
APPEND i_scrfields.
v_prog = sy-repid.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = v_prog
dynumb = sy-dynnr
TABLES
dynpfields = i_scrfields
EXCEPTIONS
invalid_abapworkarea = 1
invalid_dynprofield = 2
invalid_dynproname = 3
invalid_dynpronummer = 4
invalid_request = 5
no_fielddescription = 6
invalid_parameter = 7
undefind_error = 8
double_conversion = 9
stepl_not_found = 10
OTHERS = 11.
CASE sy-subrc.
WHEN OTHERS.
ENDCASE.
READ TABLE i_scrfields INDEX 1.
‎2007 Jan 24 10:02 AM
data: t_dynfields1 type table of dynpread with header line.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = d020s-prog
dynumb = d020s-dnum
translate_to_upper = 'X'
REQUEST = ' '
TABLES
dynpfields = t_dynfields1.
<b>read table t_dynfields1 index 1</b> I hope this is missing
I will be selecting from a list .
Because once the value is read we need to update the screen field with that value .
Here the selected value will be in the first place
Now
Your operation is to populate the fields with some variables .
In the same when I do this there is only one value then
Im expecting only one entry here
/*
LOOP AT t_dynpread INTO wa_dynpread.
CASE: wa_dynpread-fieldname.
WHEN 'IO_TOTITEMS'.
wa_dynpread-fieldvalue = io_totitem .
MODIFY t_dynpread FROM wa_dynpread.
WHEN 'IO_TOTHIT'.
wa_dynpread-fieldvalue = io_tothits.
MODIFY t_dynpread FROM wa_dynpread.
WHEN 'IO_TOTMISS'.
wa_dynpread-fieldvalue = io_totmis.
MODIFY t_dynpread FROM wa_dynpread.
WHEN 'IO_PERMISS'.
wa_dynpread-fieldvalue = io_permis .
MODIFY t_dynpread FROM wa_dynpread.
ENDCASE.
CLEAR wa_dynpread.
ENDLOOP. */
Comment this for a while and
Change the code as
t_dynfields1-fieldname = ' '. "<--- header name
t_dynfields1-fieldvalue = ' '."<----val
append t_dynfields1.
t_dynfields1-fieldname = ' '.
t_dynfields1-fieldvalue = ' '.
append t_dynfields1.
t_dynfields1-fieldname = ' '.
t_dynfields1-fieldvalue = ' '.
append t_dynfields1.
And check .
CALL FUNCTION 'DYNP_VALUES_UPDATE'
EXPORTING
dyname = d020s-prog
dynumb = d020s-dnum
TABLES
dynpfields = t_dynfields1.
regards,
vijay
‎2007 Jan 24 10:16 AM
Hi Vijay,
I changed the code according to your code but still the value is not getting updated
‎2007 Oct 29 6:18 AM
Hi,
Try using 'DYNP_UPDATE_FIELDS' function module instead of 'DYNP_VALUES_UPDATE' function module to update the screen fields.. Its working
Regards,
Dhana