SAP dialog 客制化容器事件处理
在使用客制化容器的时候,有时候需要在alv上新增按钮,而不是在dialog中 客制化容器外 做按钮事件
我这边就用一下之前的程序来做测试了,程序的构建看这个blog即可 https://www.cnblogs.com/pnj-owowa/p/17984569
结果展示
类构建
一般来说我回放入一个包含文件中去,包含文件(Y_PNJ_DEMO015_CLA)中是 类的定义和实施
CLASS lcl_event_receiverundo DEFINITION.
PUBLIC SECTION.
METHODS:
handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object e_interactive,
handle_ucomm FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm.
ENDCLASS. "LCL_EVENT_RECEIVER
DATA: event_receiverundo TYPE REF TO lcl_event_receiverundo.
CLASS lcl_event_receiverundo IMPLEMENTATION.
METHOD handle_toolbar.
DATA: utoolbar TYPE stb_button.
CLEAR: utoolbar.
utoolbar-function = 'TEST'.
utoolbar-icon = icon_transport.
utoolbar-text = '测试'.
utoolbar-quickinfo = '测试'.
APPEND utoolbar TO e_object->mt_toolbar.
ENDMETHOD. "HANDLE_TOOLBAR
METHOD handle_ucomm.
DATA rowid_t TYPE lvc_t_row.
DATA temp TYPE lvc_s_row.
CASE e_ucomm.
WHEN 'TEST'.
PERFORM frm_test.
ENDCASE.
ENDMETHOD. "HANDLE_UCOMM
ENDCLASS.
屏幕构建
在构建屏幕的时候,新增实例化方法 并且 新增按钮和按钮事件
FORM frm_screen .
PERFORM frm_set_layout. "设置ALV输出格式
PERFORM frm_set_fieldcat. "设置ALV输出字段
PERFORM frm_set_toolbar. "设置alv状态栏
IF wa_custom_container IS INITIAL .
CREATE OBJECT wa_custom_container
EXPORTING
container_name = wa_container.
CREATE OBJECT alv_grid
EXPORTING
i_parent = wa_custom_container.
"实例化方法
CREATE OBJECT event_receiverundo.
"新增按钮
SET HANDLER event_receiverundo->handle_toolbar FOR alv_grid.
SET HANDLER event_receiverundo->handle_ucomm FOR alv_grid.
CALL METHOD alv_grid->set_table_for_first_display
EXPORTING
i_structure_name = 'GS_MARA'
is_layout = gs_layout
it_toolbar_excluding = gt_ui_func
CHANGING
it_outtab = gt_mara
it_fieldcatalog = gt_fieldcat.
ENDIF.
PERFORM frm_refresh_alv USING alv_grid.
ENDFORM.
frm_test
类包含文件中的按钮例程,这里做一个简单的弹出提示好了
FORM frm_test .
DATA: lv_answer TYPE num4.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
* TITLEBAR = ' '
* DIAGNOSE_OBJECT = ' '
text_question = '按钮测试!'
text_button_1 = '是'(001)
icon_button_1 = 'ICON_CHECKED'
text_button_2 = '否'(002)
icon_button_2 = 'ICON_INCOMPLETE'
IMPORTING
answer = lv_answer
EXCEPTIONS
text_not_found = 1
OTHERS = 2.
IF sy-subrc = 0.
IF lv_answer <> '1'.
RETURN.
ENDIF.
ENDIF.
ENDFORM.