给ALV字段添加搜索帮助

1.引用标准的搜索帮助

在 宏中定义,F4标示,参考表参考字段
GS_FIELDCAT-F4AVAILABL = &5.
GS_FIELDCAT-REF_TABLE = &6.
GS_FIELDCAT-REF_FIELD = &7.

FIELDCAT中引用


image.png

为了搜索帮助的值能带入ALV字段中请设置GS_FIELDCAT-EDIT = ‘X’.

效果


效果

2.自建搜索帮助

当所搜帮助需要做筛选的时候,标准的不能满足,手动建F4帮助,给ALV写event事件
首先定义

DATA:GT_EVENT TYPE SLIS_T_EVENT WITH HEADER LINE.
DATA STBL TYPE LVC_S_STBL.
DATA: REF_GRID TYPE REF TO CL_GUI_ALV_GRID.

在选择屏幕之前

CLASS LCL_EVENT_RECEIVER DEFINITION.
  PUBLIC SECTION.
    "F4
    METHODS:
      HANDLE_F4
                    FOR EVENT ONF4 OF CL_GUI_ALV_GRID
        IMPORTING E_FIELDNAME
                    ES_ROW_NO
                    ER_EVENT_DATA
                    ET_BAD_CELLS.
ENDCLASS.

DATA GT_EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER .
CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.
  METHOD  HANDLE_F4.

*     窗口时间参数的自定义f4检索帮助
    CASE E_FIELDNAME.
      WHEN 'ZEQUNR'.   "内表字段名称
        PERFORM F4_HELP_ZSJCS USING E_FIELDNAME
                                    ES_ROW_NO.
    ENDCASE.
*     设置后,alv稳定刷新

    STBL-ROW = 'X'." 基于行的稳定刷新
    STBL-COL = 'X'." 基于列稳定刷新
    CALL METHOD REF_GRID->REFRESH_TABLE_DISPLAY
      EXPORTING
        IS_STABLE = STBL.

  ENDMETHOD.                    "HANDLE_F4

ENDCLASS.                    "LCL_EVENT_RECEIVER IMPLEMENTATION

在展示ALV之前加入如下代码

DATA: I_GRID_SETTINGS TYPE LVC_S_GLAY.
  GT_EVENT-NAME = 'CALLER_EXIT'.
  GT_EVENT-FORM = 'FM_BUTTON'.
  APPEND GT_EVENT.
  DATA:  RS_SELFIELD TYPE SLIS_SELFIELD.
FORM FM_BUTTON USING E_GRID TYPE SLIS_DATA_CALLER_EXIT.

  DATA: LV_EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER,
        LT_F4             TYPE LVC_T_F4,
        LS_F4             TYPE LVC_S_F4.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID = REF_GRID.
* 设置enter事件
  CALL METHOD REF_GRID->REGISTER_EDIT_EVENT
    EXPORTING
      I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_ENTER
    EXCEPTIONS
      ERROR      = 1
      OTHERS     = 2.


  CREATE OBJECT GT_EVENT_RECEIVER.
  SET HANDLER   GT_EVENT_RECEIVER->HANDLE_MODIFY FOR REF_GRID.

  " CHECK gv_flg IS INITIAL.

  "gv_flg = 'X'.

  LS_F4-FIELDNAME  = 'ZEQUNR'.   "窗口时间参数(需要定义F4帮助按钮的字段)
  LS_F4-REGISTER   = 'X'.
  LS_F4-GETBEFORE  = 'X'.
  LS_F4-CHNGEAFTER = 'X'.
  INSERT LS_F4 INTO TABLE LT_F4.

  CREATE OBJECT LV_EVENT_RECEIVER.
  SET HANDLER LV_EVENT_RECEIVER->HANDLE_F4 FOR REF_GRID.

  CALL METHOD REF_GRID->REGISTER_F4_FOR_FIELDS
    EXPORTING
      IT_F4 = LT_F4[].

ENDFORM.

手动建搜索帮助

*&---------------------------------------------------------------------*
*&      Form  F4_HELP_ZSJCS
*&---------------------------------------------------------------------*
*       窗口时间参数的自定义f4检索帮助
*----------------------------------------------------------------------*
FORM F4_HELP_ZSJCS USING P_FIELDNAME  TYPE LVC_FNAME
                         P_ROW_NO     TYPE LVC_S_ROID.
  DATA: LT_RETURN TYPE STANDARD TABLE OF DDSHRETVAL,
        LS_RETURN TYPE DDSHRETVAL.
  DATA :LV_EQART TYPE EQART.

  CLEAR GS_TAB.
  READ TABLE GT_TAB INTO GS_TAB INDEX P_ROW_NO-ROW_ID.

  IF P_FIELDNAME = 'ZEQUNR'.  "展示内表字段

    SELECT SINGLE EQART
      INTO LV_EQART
      FROM EQUI
    WHERE EQUNR = GS_TAB-EQUNR. "筛选条件

    SELECT EQUNR
    INTO CORRESPONDING FIELDS OF TABLE GT_EQUI
    FROM EQUI
   WHERE EQART = LV_EQART
    AND EQTYP = 'T'.  "筛选条件

    SORT GT_EQUI BY EQUNR.
  ENDIF.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      RETFIELD        = 'EQUNR'            "筛选内表里面的字段
      DYNPPROG        = SY-REPID
      DYNPNR          = SY-DYNNR
      DYNPROFIELD     = 'GS_TAB-ZEQUNR'            "ALV内表字段
      VALUE_ORG       = 'S'
"     CALLBACK_PROGRAM = SY-REPID
    TABLES
      VALUE_TAB       = GT_EQUI        "需要显示帮助的值内表
      RETURN_TAB      = LT_RETURN          "返回值
    EXCEPTIONS
      PARAMETER_ERROR = 1
      NO_VALUES_FOUND = 2
      OTHERS          = 3.
  IF SY-SUBRC = 0.
****将选的值填入ALV字段中
        READ TABLE gt_tab INTO gs_tab INDEX p_row_no-row_id.
        IF sy-subrc = 0.
          READ TABLE lt_return INTO ls_return INDEX 1.
          IF ls_return-fieldval IS NOT INITIAL.
            GS_TAB-ZEQUNR = ls_return-fieldval.
          ENDIF.
          MODIFY gt_tab FROM gs_tab INDEX p_row_no-row_id
          TRANSPORTING ZEQUNR.
        ENDIF.
  ENDIF.
ENDFORM.                    " F4_HELP_ZSJCS

注意:F4搜索帮助框没有出现可能是因为FIELDCAT中未给F4标示打上X(GS_FIELDCAT-F4AVAILABL = 'X')
F4搜索帮助的值没有回写进ALV字段中,可能时候因为没有写回写的代码

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容