ABAP 中的搜索帮助

一.简单介绍:在abap中。用到的搜索帮助个人遇到的情况例如以下,进行简要总结进行记录:
1.选中屏幕中的搜索帮助
(1).选择屏幕中的搜索帮助个人理解是指选择屏幕中的字段能够提供用户选择功能。

有些字段,比如公司。日期等能够自己主动带出搜索帮助,这些都是基于数据元素或者数据域等的搜索帮助。如图:

(2).有些字段我们就须要自己实现搜索帮助了,经常使用的如:在我们上传excel等数据的时候得到文件路径的选择帮助,主要使用的代码例如以下:

"选择屏幕字段
 PARAMETERS :
   P_FILE LIKE RLGRAP-FILENAME MODIF ID M1.     "文件文件夹

*&--------------------------------------------------------*
*&    触发选择屏幕中自己定义事件                                 
*&--------------------------------------------------------*
AT SELECTION-SCREEN.
    *&---文件路径搜索帮助
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
      CALL FUNCTION 'F4_FILENAME'
      EXPORTING
        PROGRAM_NAME = ''            " 输入的路劲
      IMPORTING
        FILE_NAME    = P_FILE.       " 输出路径

(3).非上传路径字段的选择帮助。主要用到的代码片段例如以下:

"屏幕事件中
*&--------------------------------------------------------*
*&    实现搜索帮助                                           
*&--------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_SAKNR.
  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
  EXPORTING
    RETFIELD    = 'SAKNR'  "搜索帮助内表要输出的帮助字段名
    DYNPPROG    = SY-REPID
    DYNPNR      = SY-DYNNR
    DYNPROFIELD = 'P_SAKNR'
    VALUE_ORG   = 'S'
  TABLES
    VALUE_TAB   = IT_SKAT. "存储搜索帮助内容的内表
  IF SY-SUBRC <> 0.
    MESSAGE '没有相关搜索帮助' TYPE 'I'.
  ENDIF.

2.ALV中的选择帮助(样例使用OOALV)
(1).假设ALV中的须要搜索帮助的字段所在的表有提供搜索帮助,比如:MKAL-MATNR,当中的搜索帮助是參考MARA表的MATNR,并且还带有自己主动检查编码是否合法的功能,那么我们就能够在设置fieldecat的时候针对字段设置:

   WA_FIELDCAT-REF_FIELD = 'MKAL'.
   WA_FIELDCAT-REF_TABLE = 'MATNR'.

这样就自己主动实现了搜索帮助功能。
(2).假设标准的搜索帮助满足不了需求,并且有自己的自建表用到了这个字段,那么我们能够自己创建一个搜索帮助提供给自己定义的数据元素,过程例如以下:
1).SE11-创建搜索帮助。如图:

点击创建之后,简单的我们就创建‘基本索引搜索帮助’。‘集合搜索帮助’是用多个基本或者集合搜索帮助创建的。这里不做介绍:

接下来,在例如以下图中输入:描写叙述(自己定义),选择方法(字段參考的表名假设有文本表会自己主动带出。就能够在选择帮助中使用描写叙述等),对话类型、快捷键依据自己的须要选择,搜索帮助出口是自己创建的一个function。实现搜索帮助的增强(必须參考F4IF_SHLP_EXIT_EXAMPLEH函数接口。能够复制出来然后改动)。最后填入你要在搜索帮助中出现的字段(參数输入输出,输出坐标等)

输入好以上内容后,保存激活,就能够在自建表中使用此搜索帮助了,例如以下图:在相应的数据元素上加入搜索帮助:

然后在须要实现搜索帮助的alv字段的fieldcat中依旧要加入例如以下代码:

   WA_FIELDCAT-REF_FIELD = '自建表名'.
   WA_FIELDCAT-REF_TABLE = '參考字段'.

(3).有的时候,SE11创建的搜索帮助也不能全然适用全部情况,比方上面的样例中CRHD表并没有相应的文本表,所以带不出工作中心的描写叙述。假设业务要求搜索帮助的时候一定要有描写叙述出来,那么我们能够使用以下的方法实现:为alv创建搜索帮助事件,然后注冊事件。最后实现事件,过程例如以下:

"1.定义搜索帮助展示的内表

TYPES : BEGIN OF T_CRHD,
  WERKS   LIKE CRHD-WERKS,
  VERWE   LIKE CRHD-VERWE,
  ARBPL   LIKE CRHD-ARBPL,
  KTEXT   LIKE CRTX-KTEXT,
END OF T_CRHD.

DATA : IT_CRHD    TYPE TABLE OF T_CRHD,
       WA_CRHD    LIKE LINE OF  IT_CRHD.

"2.获得数据用于搜索帮助
"得到工作中心搜索帮助所需内表
     SELECT
       A~WERKS
       A~VERWE
       A~ARBPL
       B~KTEXT
     INTO CORRESPONDING FIELDS OF TABLE IT_CRHD
     FROM CRHD AS A
     JOIN CRTX AS B ON B~OBJTY = A~OBJTY AND B~OBJID = A~OBJID
     WHERE A~ARBPL LIKE 'ZRP%' AND B~SPRAS = SY-LANGU.

"3.定义响应事件
*&--------------------------------------------------------*
*&      CLASS LCL_EVENT_HANDLER DEFINITION
*&--------------------------------------------------------*
*       TEXT alv事件定义
*---------------------------------------------------------*
CLASS LCL_EVENT_HANDLER DEFINITION.
  PUBLIC SECTION.
  METHODS:

*--工作中心搜索帮助
  HANDLE_ON_F4_HELP_9000
  FOR EVENT ONF4 OF CL_GUI_ALV_GRID
  IMPORTING E_FIELDNAME ES_ROW_NO ER_EVENT_DATA.
ENDCLASS.

*&--------------------------------------------------------*
*&      CLASS LCL_EVENT_HANDLER IMPLEMENTATION
*&--------------------------------------------------------*
*       TEXT ALV事件实现
*---------------------------------------------------------*
CLASS LCL_EVENT_HANDLER IMPLEMENTATION.
*--工作中心搜索帮助
  METHOD HANDLE_ON_F4_HELP_9000.
    PERFORM HANDLE_ON_F4_HELP_9000 USING E_FIELDNAME ES_ROW_NO
                                    ER_EVENT_DATA .
  ENDMETHOD.
ENDCLASS.

"4.实现详细form
*&--------------------------------------------------------*
*&      Form  HANDLE_ON_F4_HELP
*&--------------------------------------------------------*
*       text 工作中心搜索帮助
*---------------------------------------------------------*
FORM HANDLE_ON_F4_HELP_9000  USING E_FIELDNAME
                                   ES_ROW_NO TYPE LVC_S_ROID
                                   ER_EVENT_DATA.
  DATA : E_INDEX TYPE I,
         E_MDV01 LIKE ZTPP_CONF_ITEM07-MDV01,
         LT_RET_TAB TYPE TABLE OF DDSHRETVAL WITH HEADER LINE.

  IF E_FIELDNAME = 'MDV01'. "我们自己定义搜索的字段名
    E_INDEX = ES_ROW_NO-ROW_ID.
    READ TABLE IT_SHOW INTO WA_SHOW INDEX E_INDEX.

    CHECK SY-SUBRC = 0.
    "调用function
    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      RETFIELD        = 'ARBPL' "返回字段
      VALUE_ORG       = 'S'
    TABLES
      VALUE_TAB       = IT_CRHD
      RETURN_TAB      = LT_RET_TAB
    EXCEPTIONS
      PARAMETER_ERROR = 1
      NO_VALUES_FOUND = 2
      OTHERS          = 3.
    IF SY-SUBRC = 0.
       "更新内表
       READ TABLE LT_RET_TAB INDEX 1.
       IF LT_RET_TAB-FIELDVAL <> ''.
         "添加前导零
         CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
         EXPORTING
           INPUT  = LT_RET_TAB-FIELDVAL
         IMPORTING
           OUTPUT = E_MDV01 .

         WA_SHOW-MDV01 = E_MDV01.
       ENDIF.
       MODIFY IT_SHOW FROM WA_SHOW INDEX E_INDEX.
    ENDIF.
    "刷新ALV
    PERFORM REFRESH_TABLE_DISPLAY USING PP_ALV_GRID.
  ENDIF.
ENDFORM.                    " HANDLE_ON_F4_HELP

"5.设置fieldcat
  WA_FIELDCAT-F4AVAILABL = 'X'.

"6.注冊事件
  "工作中心F4帮助
  DATA: LT_F4 TYPE LVC_T_F4 WITH HEADER LINE.
  CLEAR LT_F4.
  LT_F4-FIELDNAME  = 'MDV01'.
  LT_F4-REGISTER   = 'X'.
  LT_F4-CHNGEAFTER = 'X'.
*  LT_F4-GETBEFORE = 'X'.
*  LT_F4-INTERNAL   = 'X'.
  APPEND LT_F4.
  CALL METHOD PP_ALV_GRID->REGISTER_F4_FOR_FIELDS
  EXPORTING
    IT_F4 = LT_F4[].

  SET HANDLER GR_EVENT_HANDLER->HANDLE_ON_F4_HELP_9000
  FOR PP_ALV_GRID.
原文地址:https://www.cnblogs.com/wzzkaifa/p/7159800.html