Dynpro programming – seach help
If you develop the custom screen, you always need to deal with the search help. Some search help comes from the DDIC definition. In some case the search help value comes from program dynamically. Below code example shows how you can populate search help.
In the screen flow logic:
process on value-request. field: viqmel-znp_lob module get_lob.
In the program:
MODULE get_lob INPUT. DATA: BEGIN OF lt_lob OCCURS 0, lob LIKE qmel-znp_lob, vtext LIKE t179t-vtext, END OF lt_lob. DATA: BEGIN OF lt_prodh2 OCCURS 0, prodh LIKE t179t-prodh, vtext LIKE t179t-vtext, END OF lt_prodh2. DATA: lv_sbu LIKE qmel-znp_sbu, lv_dynfieldvalue TYPE dynfieldvalue. * Get SBU from screen CLEAR lv_dynfieldvalue. CALL FUNCTION 'FM_FYC_DYNPRO_VALUE_READ' EXPORTING i_repid = sy-repid i_dynnr = sy-dynnr i_fieldname = 'VIQMEL-ZNP_SBU' IMPORTING e_fieldvalue = lv_dynfieldvalue. IF lv_dynfieldvalue IS NOT INITIAL. lv_sbu = lv_dynfieldvalue. ENDIF. * Initialize local data CLEAR: lt_fields, lv_dyname, lv_dynumb, lt_returnval. REFRESH: lt_fields, lt_returnval, lt_lob. lv_dyname = sy-repid. lv_dynumb = sy-dynnr. GET CURSOR FIELD lv_cursorfield. lt_fields-fieldname = lv_cursorfield. APPEND lt_fields. CLEAR lt_fields-stepl. * Get table value IF lv_sbu IS INITIAL. SELECT b~prodh b~vtext INTO TABLE lt_prodh2 FROM t179 AS a INNER JOIN t179t AS b ON b~prodh = a~prodh WHERE a~stufe = 2 AND b~spras = sy-langu. ELSE. SELECT b~prodh b~vtext INTO TABLE lt_prodh2 FROM t179 AS a INNER JOIN t179t AS b ON b~prodh = a~prodh WHERE a~stufe = 2 AND b~spras = sy-langu. DELETE lt_prodh2 WHERE prodh(1) <;>; lv_sbu. ENDIF. SORT lt_prodh2 BY prodh. DELETE ADJACENT DUPLICATES FROM lt_prodh2. LOOP AT lt_prodh2. CONDENSE lt_prodh2-prodh. CLEAR lt_lob. lt_lob-lob = lt_prodh2-prodh. lt_lob-vtext = lt_prodh2-vtext. APPEND lt_lob. ENDLOOP. IF lt_lob[] IS INITIAL. MESSAGE s000(zenh) WITH 'No value exists'. EXIT. ENDIF. CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = 'LOB' dynpprog = lv_dyname dynpnr = lv_dynumb dynprofield = 'VIQMEL-ZNP_LOB' value_org = 'S' TABLES value_tab = lt_lob * field_tab = lt_fields return_tab = lt_returnval EXCEPTIONS parameter_error = 1 no_values_found = 2 OTHERS = 3. IF sy-subrc <;>; 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. * Return value READ TABLE lt_fields WITH KEY fieldname = lv_cursorfield. CHECK sy-subrc EQ 0. lv_save_tabix = sy-tabix. CHECK NOT lt_returnval-fieldval IS INITIAL. lt_fields-fieldvalue = lt_returnval-fieldval. MODIFY lt_fields INDEX lv_save_tabix. CALL FUNCTION 'DYNP_VALUES_UPDATE' EXPORTING dyname = lv_dyname dynumb = lv_dynumb TABLES dynpfields = lt_fields EXCEPTIONS OTHERS = 1. ENDMODULE. " get_lob INPUT