ALV 自定义搜索帮助 F4 详解

阅读: 评论:0

ALV 自定义搜索帮助 F4 详解

ALV 自定义搜索帮助 F4 详解

为什么需要自定义F4?

实际业务场景经常要使用到,限制权限,可选值啥的,类似地图选项

ALV中怎么实现自定义F4?

1.选择对应的事件的代码,通常使用CALLER EXIT  然后指定对应调用的FORM,代码如下

  GS_EVENTS-NAME = 'CALLER_EXIT'.GS_EVENTS-FORM = 'FRM_CALLER_EXIT'. "指定FORM调用APPEND GS_EVENTS TO GT_EVENTS."附可选的事件
CALLER_EXIT
USER_COMMAND
TOP_OF_PAGE
TOP_OF_COVERPAGE
END_OF_COVERPAGE
FOREIGN_TOP_OF_PAGE
FOREIGN_END_OF_PAGE
PF_STATUS_SET
LIST_MODIFY
TOP_OF_LIST
END_OF_PAGE
END_OF_LIST
AFTER_LINE_OUTPUT
BEFORE_LINE_OUTPUT
REPREP_SEL_MODIFY
SUBTOTAL_TEXT
GROUPLEVEL_CHANGE

2.定义类和实现类,用于事件的处理和拦截

"定义类
CLASS LCL_EVENT_RECEIVER DEFINITION."类名PUBLIC SECTION.METHODS HANDLE_F4  FOR EVENT ONF4 OF CL_GUI_ALV_GRIDIMPORTING E_FIELDNAMEE_FIELDVALUEES_ROW_NOER_EVENT_DATAET_BAD_CELLSE_DISPLAY.
ENDCLASS.                    "LCL_EVENT_RECEIVER DEFINITIONCLASS LCL_EVENT_RECEIVER IMPLEMENTATION.METHOD  HANDLE_F4.CASE E_FIELDNAME.WHEN 'YOURFIELD'.   "自定义的字段PERFORM F4_HELP_DIY USING ET_BAD_CELLSES_ROW_NOER_EVENT_DATAE_DISPLAYE_FIELDNAME   .ENDCASE.ENDMETHOD.                    "HANDLE_F4
ENDCLASS.                    "LCL_EVENT_RECEIVER IMPLEMENTATION

3.注册事件和需要拦截的自定义F4

*FORM FRM_CALLER_EXIT USING LS_DATA TYPE SLIS_DATA_CALLER_EXIT.CHECK SY-BATCH = ''. "后台执行获取对象失败DATA : LT_F4 TYPE LVC_T_F4,LS_F4 TYPE LVC_S_F4.DATA GT_EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER.*获取的全局ALV对象CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'IMPORTINGE_GRID = GCL_ALV_GRID.LS_F4-FIELDNAME  = 'YOUFIELD'.   "(需要定义F4帮助按钮的字段)LS_F4-REGISTER   = 'X'.LS_F4-GETBEFORE  = 'X'.LS_F4-CHNGEAFTER = 'X'.INSERT LS_F4 INTO TABLE LT_F4.*注册拦截的F4CALL METHOD GCL_ALV_GRID->REGISTER_F4_FOR_FIELDSEXPORTINGIT_F4 = LT_F4[].IF SY-SUBRC <> 0.
*   Implement suGT_OUTle error handling hereENDIF.
*创建类 类似 new OBJCREATE OBJECT GT_EVENT_RECEIVER.*设置拦截SET HANDLER GT_EVENT_RECEIVER->HANDLE_F4 FOR GCL_ALV_GRID.ENDFORM.                   "F_CALLER_EXIT

54.F4时需要执行的逻辑过程

FORM F4_HELP_AGRBU USING ET_BAD_CELLS  TYPE LVC_T_MODIES_ROW_NO     TYPE LVC_S_ROIDER_EVENT_DATA TYPE REF TO CL_ALV_EVENT_DATAE_DISPLAY     TYPE CE_FIELDNAME   TYPE LVC_FNAME.DATA: LT_RETURN TYPE STANDARD TABLE OF DDSHRETVAL,LS_RETURN TYPE DDSHRETVAL.DATA :LV_EQART TYPE EQART.FIELD-SYMBOLS: <ITAB> TYPE LVC_T_MODI.DATA: LS_MODI TYPE LVC_S_MODI.ASSIGN ER_EVENT_DATA->M_DATA->* TO <ITAB>.IF E_FIELDNAME = 'YOURFIELD'.  "展示内表字段CLEAR GS_OUT.READ TABLE GT_OUT INTO GS_OUT INDEX ES_ROW_NO-ROW_ID.SELECT *FROM YOURFIELDTABINTO LT_ZBGRU.ENDIF.CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'EXPORTINGRETFIELD        = 'EQUNR'            "筛选内表里面的字段DYNPPROG        = SY-REPIDDYNPNR          = SY-DYNNRDYNPROFIELD     = 'GS_OUT-YOURFIELD'            "ALV内表字段VALUE_ORG       = 'S'
"     CALLBACK_PROGRAM = SY-REPIDTABLESVALUE_TAB       = LT_ZBGRU        "需要显示帮助的值内表RETURN_TAB      = LT_RETURN          "返回值EXCEPTIONSPARAMETER_ERROR = 1NO_VALUES_FOUND = 2OTHERS          = 3.IF SY-SUBRC = 0.
****将选的值填入ALV字段中READ TABLE GT_OUT INTO GS_OUT INDEX ES_ROW_NO-ROW_ID.IF SY-SUBRC = 0.READ TABLE LT_RETURN INTO LS_RETURN INDEX 1.IF LS_RETURN-FIELDVAL IS NOT INITIAL.LS_MODI-ROW_ID = ES_ROW_NO-ROW_ID.LS_MODI-FIELDNAME = 'ABGRU'.LS_MODI-VALUE = LS_RETURN-FIELDVAL.APPEND LS_MODI TO <ITAB>.CLEAR LS_MODI.ENDIF.*设置事件处理标记,这样就不会走进常规的F4事件ER_EVENT_DATA->M_EVENT_HANDLED = 'X'.ENDIF.ENDIF.
ENDFORM.

5.最后一步啦,将事件放到ALV中、

 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'EXPORTINGIT_EVENTS                = GT_EVENTS"增加这个字段

本文发布于:2024-01-31 17:23:22,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170669300330164.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:自定义   详解   ALV
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23