技术干货SAP收藏文章技术文

给ALV字段添加搜索帮助

2018-11-07  本文已影响9人  Mmm_余安

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字段中,可能时候因为没有写回写的代码

上一篇下一篇

猜你喜欢

热点阅读