ABAP学习(33):Selection Screen的Search Help

14search help

示例1:

"************************************************
"search help
"************************************************
DATA:gv_date TYPE datum.
DATA:gv_carrid TYPE spfli-carrid.
"自定义search help
DATA:gv_field TYPE char10.
DATA:gv_str TYPE string.
TYPES:BEGIN OF s_carrname,
        carrname TYPE char20,
      END OF s_carrname.
DATA:lt_carrname TYPE TABLE OF s_carrname.
DATA:ls_carrname LIKE LINE OF lt_carrname.

SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME.
"1日期类型,只要定义datum类型,触发search help
PARAMETERS:p_date TYPE datum.
SELECT-OPTIONS:s_date FOR gv_date.

"2表类型,字段spfli-carrid,使用table定义search help:H_SCARR
PARAMETERS:p_carr LIKE gv_carrid.
SELECT-OPTIONS:s_carr FOR gv_carrid.

"3自定义search help值,使用f4 help
PARAMETERS:p_field LIKE gv_field.
SELECT-OPTIONS:s_field FOR gv_field.

"4使用f1,帮助文档
PARAMETERS:p_field1 LIKE gv_field.

"5已有search help,f4 help
PARAMETERS:p_field2 LIKE gv_field.
SELECT-OPTIONS:s_field2 FOR gv_field.

"6文件选择search help
PARAMETERS:p_field3 LIKE gv_str.

SELECTION-SCREEN END OF BLOCK blk1.


"使用f4帮助
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_field.
  PERFORM f_search_hlp_field USING 'CARRNAME' CHANGING p_field.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_field-low.
  PERFORM f_search_hlp_field USING 'CARRNAME' CHANGING s_field-low.

"使用f1帮助
AT SELECTION-SCREEN ON HELP-REQUEST FOR p_field1.
  PERFORM f_search_hlp_field1.

"使用f4帮助
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_field2.
  PERFORM f_search_hlp_field2 CHANGING p_field2.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_field2-low.
  PERFORM f_search_hlp_field2 CHANGING s_field2-low.

"使用f4帮助
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_field3.
  PERFORM f_search_hlp_field3 CHANGING p_field3.

START-OF-SELECTION.

"使用f4,返回table
FORM f_search_hlp_field
  USING iv_retfield
  CHANGING ev_field.
  DATA:lv_retfield TYPE dfies-fieldname VALUE 'CARRNAME'.
  DATA:lv_dynprofield TYPE help_info-dynprofld.
  DATA:lt_return TYPE TABLE OF ddshretval.
  DATA:ls_return LIKE LINE OF lt_return.
  "获取search help,carrname值表
  SELECT carrname INTO TABLE lt_carrname FROM scarr.
  SORT lt_carrname.
  DELETE ADJACENT DUPLICATES FROM lt_carrname.
  "调用search help
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield = iv_retfield  "返回字段
      dynpprog = sy-repid
      dynpnr = sy-dynnr
      value_org   = 'S'
    TABLES
      value_tab = lt_carrname  "search help显示值list
      return_tab = lt_return  "返回选择值table
      .
  IF sy-subrc <> 0.
    MESSAGE 'Search help failed!' TYPE 'E'.
  ELSE.
    READ TABLE lt_return INTO ls_return INDEX 1.
    ev_field = ls_return-fieldval.
  ENDIF.

ENDFORM.

"f1 help,说明文档
FORM f_search_hlp_field1.
  DATA:lt_links TYPE TABLE OF tline.
  DATA:ls_links LIKE LINE OF lt_links.

  "方式1:
  CALL FUNCTION 'HELP_OBJECT_SHOW'
    EXPORTING
      dokclass = 'DE'
      dokname = 'SYDATUM'
    TABLES
      links = lt_links.

*  "方式2:
*  CALL FUNCTION 'HELP_OBJECT_SHOW_FOR_FIELD'
*    EXPORTING
*      called_for_tab  = 'SCARR'
*      called_for_field = 'CARRNAME'.
ENDFORM.

"使用f4帮助
FORM f_search_hlp_field2
  CHANGING iv_field.
  DATA:lv_reset TYPE char1.
  DATA:lt_return TYPE TABLE OF ddshretval.
  DATA:ls_return LIKE LINE OF lt_return.
  "通过使用已有table字段的search help
  CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
    EXPORTING
      tabname = 'SCARR'
      fieldname = 'CARRID'
    IMPORTING
      user_reset = lv_reset
    TABLES
      return_tab = lt_return.
  IF sy-subrc = 0.
    READ TABLE lt_return INTO ls_return INDEX 1.
    iv_field = ls_return-fieldval.
  ENDIF.
ENDFORM.

"使用f4帮助,文件选择框
FORM f_search_hlp_field3
  CHANGING iv_field.
  DATA:lv_file TYPE ibipparms-path.
  "调用F4_FILENAME,点击输入框后小方块弹出文件选择框
  CALL FUNCTION 'F4_FILENAME'
    IMPORTING
      file_name = lv_file."返回文件名
  IF sy-subrc = 0.
    iv_field = lv_file.
  ENDIF.
ENDFORM.

 

posted @ 2022-04-18 08:36  渔歌晚唱  阅读(164)  评论(0编辑  收藏  举报