为了更加方便的使用 cl_gui_alv_grid 的事件功能,将一些基本事件的定义和实现放到一个 inclue 中,Report 程序中包含就可以使用。
事件的方法实际功能需要定义对应的 FORM,并在其中添加业务代码。
Include:ZBC_INCL_ALVEVT
*&---------------------------------------------------------------------*
*& Include ZBC_INCL_ALVEVT
*&---------------------------------------------------------------------*
CLASS lcl_event_handler DEFINITION.
PUBLIC SECTION.
METHODS:
*-- To add new functional buttons to the ALV toolbar
toolbar
FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object
e_interactive,
*-- To implement user commands
user_command
FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm,
*-- Hotspot click control
hotspot_click
FOR EVENT hotspot_click OF cl_gui_alv_grid
IMPORTING e_row_id
e_column_id
es_row_no,
*-- Handle double click
double_click
FOR EVENT double_click OF cl_gui_alv_grid
IMPORTING e_row
e_column
es_row_no,
*-- To be triggered before user commands
before_user_command
FOR EVENT before_user_command OF cl_gui_alv_grid
IMPORTING e_ucomm,
*-- To be triggered after user commands
after_user_command
FOR EVENT after_user_command OF cl_gui_alv_grid
IMPORTING e_ucomm
e_saved
e_not_processed,
*-- Controling data changes where ALV grid is changeable
data_changed
FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING er_data_changed
e_onf4
e_onf4_before
e_onf4_after
e_ucomm,
*-- To be triggered after data change has been finished
data_changed_finished
FOR EVENT data_changed_finished OF cl_gui_alv_grid
IMPORTING e_modified
et_good_cells,
*-- To control menu buttons
menu_button
FOR EVENT menu_button OF cl_gui_alv_grid
IMPORTING e_object
e_ucomm,
*-- To control button clicks
button_click
FOR EVENT button_click OF cl_gui_alv_grid
IMPORTING es_col_id
es_row_no,
*-- To control AFTER_REFRESH
after_refresh
FOR EVENT after_refresh OF cl_gui_alv_grid,
*-- To control HANDLE_F4
onf4
FOR EVENT onf4 OF cl_gui_alv_grid
IMPORTING e_fieldname
es_row_no
er_event_data
et_bad_cells,
*-- To control ONDROPCOMPLETE
ondropcomplete
FOR EVENT ondropcomplete OF cl_gui_alv_grid
IMPORTING e_row
e_column
es_row_no
e_dragdropobj,
*-- To control Context Menu
context_menu_request
FOR EVENT context_menu_request OF cl_gui_alv_grid
IMPORTING e_object.
PRIVATE SECTION.
ENDCLASS. "LCL_EVENT_HANDLER DEFINITION"
*----------------------------------------------------------------------*
* CLASS lcl_event_handler IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_event_handler IMPLEMENTATION.
*-- Handle toolbar
METHOD toolbar.
PERFORM frm_alv_toolbar IN PROGRAM (sy-repid) USING e_object e_interactive IF FOUND.
ENDMETHOD. "handle_toolbar"
*-- Handle user command
METHOD user_command.
PERFORM frm_alv_user_command IN PROGRAM (sy-repid) USING e_ucomm IF FOUND.
ENDMETHOD. "handle_user_command"
*-- Handle hotspot click
METHOD hotspot_click.
PERFORM frm_alv_hotspot_click IN PROGRAM (sy-repid)
USING e_row_id e_column_id es_row_no IF FOUND.
ENDMETHOD. "handle_hotspot_click"
*-- Handle double click
METHOD double_click.
PERFORM frm_alv_double_click IN PROGRAM (sy-repid) USING e_row e_column es_row_no IF FOUND.
ENDMETHOD. "handle_double_click"
*-- Handle before user command
METHOD before_user_command.
PERFORM frm_alv_before_user_command IN PROGRAM (sy-repid) USING e_ucomm IF FOUND.
ENDMETHOD. "handle_before_user_command"
*-- Handle after user command
METHOD after_user_command.
PERFORM frm_alv_after_user_command IN PROGRAM (sy-repid) USING e_ucomm e_saved e_not_processed IF FOUND.
ENDMETHOD. "handle_after_user_command"
*-- Handle data changed
METHOD data_changed.
PERFORM frm_alv_data_changed IN PROGRAM (sy-repid) USING er_data_changed e_onf4 e_onf4_before e_onf4_after e_ucomm IF FOUND.
ENDMETHOD. "handle data_changed"
*-- Handle data changed finished
METHOD data_changed_finished.
PERFORM frm_alv_data_changed_finished IN PROGRAM (sy-repid) USING e_modified et_good_cells IF FOUND.
ENDMETHOD. "handle_data_changed_finished"
*-- Handle menu button
METHOD menu_button.
PERFORM frm_alv_menu_button IN PROGRAM (sy-repid) USING e_object e_ucomm IF FOUND.
ENDMETHOD. "handle_menu_button"
*-- Handle button click
METHOD button_click.
PERFORM frm_alv_button_click IN PROGRAM (sy-repid) USING es_col_id es_row_no IF FOUND.
ENDMETHOD. "handle_button_click"
*-- Handle after refresh
METHOD after_refresh.
PERFORM frm_alv_after_refresh IN PROGRAM (sy-repid) IF FOUND.
ENDMETHOD. "handle_after_refresh"
*-- Handle f4
METHOD onf4.
PERFORM frm_alv_onf4 IN PROGRAM (sy-repid) USING e_fieldname es_row_no er_event_data et_bad_cells IF FOUND.
ENDMETHOD. "handle_f4"
*-- Handle ondropcomplete
METHOD ondropcomplete.
PERFORM frm_alv_ondropcomplete IN PROGRAM (sy-repid) USING e_row e_column es_row_no e_dragdropobj IF FOUND.
ENDMETHOD. "handle_ondropcomplete"
*-- Handle Context Menu
METHOD context_menu_request.
PERFORM frm_alv_context_menu IN PROGRAM (sy-repid) USING e_object IF FOUND.
ENDMETHOD. "handle_ondropcomplete"
ENDCLASS. "LCL_EVENT_HANDLER IMPLEMENTATION"