ALV IT_EVENT_EXIT-事件出口

目录

前言

实战

案例


前言

        在ABAP编程中,IT_EVENT_EXIT与ALV控件的事件处理有关,特别是涉及到自定义或高级交互场景。IT_EVENT_EXIT通常是一个内表(SLIS_T_EVENT_EXIT类型),用于存储和处理与ALV操作相关的特定事件信息,尤其是那些在用户执行操作后、ALV事件循环退出前需要处理的事件。该事件是处理用户退出ALV界面时相关逻辑的重要机制,开发者应该根据具体业务需求来编写适当的事件处理程序。

实战

        点击ALV标准的工具栏按钮时,不会回调相关的I_CALLBACK_USER_COMMAND = 'USER_COMMAND'参数中指定的Form ,因为那些按钮所对应的功能代码已被设为保留Funcode了,如果要想在点击这些标准的按钮时也回调指定的Form,可通过IT_EVENT_EXIT 参数实现。向IT_EVENT_EXIT参数内表填充需要被拦截的保留Funcode,是在执行对应功能代码之前还是之后调用。

示例代码:

 DATA: gt_event_exit TYPE slis_t_event_exit WITH HEADER LINE.
*  实现当点击全选按钮后触发user_command
    gt_event_exit-ucomm = '&ALL'."全选按钮
  gt_event_exit-after = 'X'."在执行完预置功能之后调用
  "gt_event_exit-before = 'X'."在执行完预置功能之前调用
  APPEND gt_event_exit.
  
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_user_command  = 'F_USER_COMMAND'
      it_event_exit            = gt_event_exit[]
…
FORM f_user_command  USING p_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield.
  CASE p_ucomm.
    WHEN '&IC1'. "双击
  ENDCASE.
ENDFORM.

案例

        此代码片段展示了如何通过事件出口机制在ALV中实现自定义的交互逻辑,特别是围绕布局调整的事件处理。通过预先定义的事件出口(如改变布局的按钮),可以插入自定义逻辑,增强ALV的功能性和用户体验。需要注意的是,示例中的消息输出是一种简化的处理方式,实际应用中应根据具体需求设计事件处理逻辑。

展示效果:

 完整代码:

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_event_exit TYPE slis_t_event_exit WITH HEADER LINE.

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.
  gt_event_exit-ucomm = '&OL0'."布局按钮
  "gt_event_exit-after = 'X'.  "在执行完预置功能之后调用
  gt_event_exit-before = 'X'."在执行完预置功能之前调用
  APPEND gt_event_exit.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program      = gv_repid
      i_grid_title            = 'ALV REPORT TEST' "ALV显示标题
      is_layout               = gs_layout
      it_fieldcat             = gt_fieldcat
      i_callback_user_command = 'F_USER_COMMAND'
      it_event_exit           = gt_event_exit[]
    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_user_command  USING p_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield.
  MESSAGE i001(00) WITH '事件触发时当前行:' rs_selfield-tabindex.
ENDFORM.

  • 17
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SAP_亮亮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值