需求:在AL中自定义添加一个按钮功能
1.拷贝一个原有的ALV的GUI ,并添加自己的按钮
se37
去到REUSE_ALV_GRID_DISPLAY_LVC
函数模块中找到贵状态复制下面这个程序,到自己的程序中去
然后在再复制过去的gui状态上更改相应需求的按钮功能呢
2~3指定参数
2.使用REUSE_ALV_GRID_DISPLAY_LVC
函数模块中的两个参数i_callback_pf_status_set
和 i_callback_user_command
3.然后定义两个子程序分别给到这两个参数,一个是刚才设置的GUI状态名称,另一个是按钮的名称
4.实现这个两个子程序.
gui状态
按钮功能
5.具体代码
*&---------------------------------------------------------------------*
*& Report Z_ALVTMP_DEMO_005_HAOCHAOFEI
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT z_alvtmp_demo_005_haochaofei.
INCLUDE z_alvtmp_demo_005_top_cf. "定义结构
INCLUDE z_alvtmp_demo_005_sel_cf. "选择屏幕
INCLUDE z_alvtmp_demo_005_frm_cf. "获取数据
*INITIALIZATION.
** 初始化程序
* PERFORM frm_initialization_cf.
*
*START-OF-SELECTION.
**获取数据
* PERFORM frm_get_data.
**数据处理
* PERFORM frm_data_process.
* IF gt_alv IS INITIAL.
* MESSAGE '系统数据,请重新选择查询条件'
* TYPE 'S' DISPLAY LIKE 'E'.
* STOP.
* ENDIF.
*END-OF-SELECTION.
**显示数据
*PERFORM frm_show_data.
START-OF-SELECTION.
* 获取数据
PERFORM frm_get_data.
* 数据处理
PERFORM frm_data_process.
* 显示数据
PERFORM frm_show_data.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form FRM_SHOW_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_show_data .
* DATA: lv_datum_txt(10) TYPE c,
* lv_uzeit_txt(10) TYPE c.
* WRITE sy-datum TO lv_datum_txt.
* WRITE sy-uzeit TO lv_uzeit_txt.
* alv_clear_data.
* status = 'X'. "保存按钮
*
* "IF r_rpt3 NE space or r_rpt4 NE space.
* l_fm_button = 'X'. "回车事件
"ENDIF.
REFRESH : gt_fieldcat .
CLEAR gs_layout .
CLEAR gs_fieldcat .
CLEAR gs_layout.
gs_layout-zebra = 'X'.
gs_layout-cwidth_opt = 'X'.
* gs_layout-box_fname = 'SEL'.
gs_layout-sel_mode = 'A'.
* gs_layout-edit = 'X'.
* gs_layout-stylefname = 'CELLSTAB'."设置可编辑信息
PERFORM frm_fieldcat.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'SET_PF_STATUS' " GUI状态
i_callback_user_command = 'FRM_USERCOMMAND' "按钮
is_layout_lvc = gs_layout
it_fieldcat_lvc = gt_fieldcat
* IT_EVENTS = GT_EVENTS
i_save = 'A'
TABLES
t_outtab = gt_alv
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.
FORM frm_fieldcat.
PERFORM frm_build_fcat USING :
'ZAGSDM ' '' '' '' '' '公司代码',
'ZXSRQ ' '' '' '' '' '销售日期',
'ZXSRY ' '' '' '' '' '销售人员',
'ZXSWL ' '' '' '' '' '销售物料',
'ZXSSL ' '' '' '' '' '销售数量',
'ZXSDJ ' '' '' '' '' '物料单价',
'ZXSJE ' '' '' '' '' '销售金额'.
ENDFORM.
FORM frm_build_fcat USING p_fieldname
p_outlen p_nozero
p_ref_table p_ref_field p_reptext.
gs_fieldcat-fieldname = p_fieldname . "字段名
gs_fieldcat-dd_outlen = p_outlen.
gs_fieldcat-no_zero = p_nozero.
gs_fieldcat-ref_table = p_ref_table.
gs_fieldcat-ref_field = p_ref_field.
* gs_fieldcat-edit = p_edit.
gs_fieldcat-scrtext_l = p_reptext . "描述
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR:gs_fieldcat.
ENDFORM. "FRM_BUILD_FCAT
FORM set_pf_status USING i_extab TYPE slis_t_extab.
DATA:lt_exfcode TYPE TABLE OF sy-ucomm.
SET PF-STATUS 'STAT_ALV' EXCLUDING lt_exfcode. " gui状态栏名称
ENDFORM. "SET_PF_STATUS
FORM frm_usercommand USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
DATA:lv_vbeln TYPE vbeln_vl,
lv_message(255).
DATA stbl TYPE lvc_s_stbl.
DATA:lv_tabix TYPE sy-tabix.
stbl-row = 'X'." 基于行的稳定刷新
stbl-col = 'X'." 基于列稳定刷新
IF gv_grid IS INITIAL.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' "获取ALV对象的函数
IMPORTING
e_grid = gv_grid.
ENDIF.
cl_gui_cfw=>set_new_ok_code( new_code = '/00' )."回车时事件
CALL METHOD gv_grid->check_changed_data.
*在此处可以自定义按钮的具体功能呢
CASE r_ucomm.
WHEN 'DIS'.
MESSAGE '自定的按钮功能呢' TYPE 'S'.
WHEN ''.
.........
ENDCASE.
CALL METHOD gv_grid->set_frontend_layout
EXPORTING
is_layout = gs_layout.
CALL METHOD gv_grid->refresh_table_display
EXPORTING
is_stable = stbl.
ENDFORM. "FRM_USERCOMMAND
6.效果
本文含有隐藏内容,请 开通VIP 后查看