Home > ABAP, UI > Dynpro programming – seach help

Dynpro programming – seach help

January 21st, 2010 Leave a comment Go to comments

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
  1. No comments yet.
  1. No trackbacks yet.