目录
前言
USER_COMMAND事件是一个重要的事件,它允许开发者处理用户在ALV或其他交互式界面上执行的操作。当用户点击一个按钮或执行一个特定的命令时,USER_COMMAND事件会被触发。下面是对USER_COMMAND事件的详细解释:
事件触发
USER_COMMAND事件通常在以下情况下被触发:
自定义按钮点击:当用户在ALV界面上点击一个自定义按钮时。
用户命令执行:用户执行了某些特定的命令或操作。
事件处理
在USER_COMMAND事件的处理程序中,你可以编写代码来响应这些用户操作。例如,你可以根据用户点击的按钮或执行的命令来执行特定的逻辑。
事件参数
USER_COMMAND事件通常会传递一些参数,这些参数包含了关于用户操作的信息。例如,你可能会收到一个表示用户点击的按钮或执行的命令的标识符。
核心代码
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_user_command = 'F_USER_COMMAND'
…
FORM f_user_command USING p_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield.
* MESSAGE i001(00) WITH '事件触发时当前行:' rs_selfield-tabindex.
CASE p_ucomm.
WHEN '&IC1'. "双击
ENDCASE.
ENDFORM.
参数说明:
1、 P_UCOMM 为触发的function code
2、 RS_SELFIELD 为数据结构,常用字段有:
Tabname-输出内表名
Tabinde-数据行索引
Fieldname-光标所在单元格所对应的的字段名
Value-光标所在单元格的值
Refresh-为X时,当用户在显式界面上对数据进行修改时,同时内表中的数据也随之刷新
注意:只有自已新增的按钮(或双击数据行时、热点点击)才会调用,ALV 标准默认的Function Code是不会调用的(除非使用使用IT_EVENT_EXIT)
实战开发
展示效果:
完整代码:
TYPE-POOLS:slis.
DATA:gt_fieldcat TYPE slis_t_fieldcat_alv,
gs_fieldcat TYPE slis_fieldcat_alv,
gs_layout TYPE slis_layout_alv,
gv_repid TYPE sy-repid.
DATA:gt_spfli LIKE STANDARD TABLE OF spfli WITH HEADER LINE.
INITIALIZATION.
gv_repid = sy-repid.
*屏幕开始事件
START-OF-SELECTION.
PERFORM f_getdata.
PERFORM f_catalog.
PERFORM f_alvshow.
FORM f_getdata.
SELECT * FROM spfli INTO CORRESPONDING FIELDS OF TABLE gt_spfli.
ENDFORM.
FORM f_catalog.
*fieldcat属性
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = gv_repid
i_structure_name = 'SPFLI'
CHANGING
ct_fieldcat = gt_fieldcat "导出gt_fieldcat内表数据
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CLEAR gs_fieldcat.
*"对gt_fieldcat属性的修改
READ TABLE gt_fieldcat INTO gs_fieldcat INDEX 2. "将第二列设为热点显示
gs_fieldcat-hotspot = 'X'.
MODIFY gt_fieldcat FROM gs_fieldcat INDEX 2.
*layout属性
gs_layout-zebra = 'X'."斑马线显示
gs_layout-colwidth_optimize = 'X'."列宽度最优化显示
ENDFORM.
FORM f_alvshow.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = gv_repid
i_grid_title = 'ALV REPORT TEST' "ALV显示标题
i_callback_pf_status_set = 'F_SET_STATUS'
is_layout = gs_layout
it_fieldcat = gt_fieldcat
i_callback_user_command = 'F_USER_COMMAND'
TABLES
t_outtab = gt_spfli
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM.
FORM f_set_status USING p_extab TYPE slis_t_extab.
SET PF-STATUS 'ZALV_STATUS'.
ENDFORM.
FORM f_user_command USING p_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield.
MESSAGE i001(00) WITH '事件触发时当前行:' rs_selfield-tabindex.
ENDFORM.