1.到标准程序SAPLKKBL 拷出SCREEN STATUS STANDARD_FULLSCREEN至自己的程序中。
2.在拷过来的STATUS 中新增自己想要的按钮
3.在调用ALV显示时增加有如下两个重要参数。
i_callback_pf_status_set = 'SET_PF_STATUS' "PBO事件
i_callback_user_command = 'ALV_USER_COMMAND'"PAI事件
具体调用如下:
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_pf_status_set = 'SET_PF_STATUS'
i_callback_user_command = 'ALV_USER_COMMAND'
i_callback_program = g_repid
is_layout = gs_layout
it_fieldcat = gt_fieldcat[]
i_save = 'X'
is_variant = v_stru_disvar
it_events = git_events[]
it_sort = it_sort[]
is_print = gs_print
TABLES
t_outtab = gt_data
EXCEPTIONS
program_error = 1
OTHERS = 2.
编写FORM SET_PF_STATUS和ALV_USER_COMMAND 。
FORM alv_user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
DATA:ref_grid TYPE REF TO cl_gui_alv_grid.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = ref_grid.
BREAK-POINT.
CASE r_ucomm.
"自定义事件处理
ENDCASE.
CALL METHOD ref_grid->check_changed_data.
rs_selfield-refresh = 'X'. "刷新内表
ENDFORM.
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'STANDARD'."从标准拷出来并修改的STATUS
ENDFORM.