目录
前言
在ABAP ALV中,"热点"(Hotspot)是指ALV表格中的特定单元格或列,它们被赋予了额外的交互性,比如点击后触发特定的操作或事件。通过设置热点,开发人员可以让用户直接在ALV列表上进行更多操作,而不仅仅局限于查看数据。
实战
热点链接即 Fieldcat-hotspot 属性,设置之后当用户点击带有热点的字段时,就会触发Form(USER_COMMAND)中的动作。
对于热点链接,所对应的FCode为 “&IC1“。(注意:双击行项目时也会触发FCode“&IC1“);
核心代码
gs_fieldcat-hotspot = 'X'.
…
FORM f_user_command USING p_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield.
CASE p_ucomm.
WHEN '&IC1' . "判断用户的动作
IF rs_selfield-fieldname EQ 'CARRID'. "点击该字段时触发
MESSAGE i001(00) WITH '事件触发时当前行:' rs_selfield-tabindex.
ENDIF.
ENDCASE.
ENDFORM.
实战开发
展示效果:
完整代码:
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.
CASE p_ucomm.
WHEN '&IC1' . "判断用户的动作
MESSAGE i001(00) WITH '事件触发时当前行:' rs_selfield-tabindex.
ENDCASE.
ENDFORM.