Functional ALV系列 (07) - 事件处理

在处理 ALV 事件的时候,可以使用 reuse_alv_grid_display 的 it_events 参数。it_events 参数是一个内表,数据类型是 slis_t_event,每一行的数据类型为 slis_alv_event。仍然以上一篇将 ALV 导出到 Excel 为例,如果用 it_events 参数,方法如下:

在 ALV 显示之前,将相关事件加入到 event 内表中:

然后在 reuse_alv_grid_display 参数中设置 it_events 参数:


完整代码:

report  z_falv_012.

type-pools: slis.

data: gt_fieldcat type slis_t_fieldcat_alv,
      gs_fieldcat type slis_fieldcat_alv,
      gt_events   type slis_t_event,
      gs_event    type slis_alv_event.

data: gt_spfli type standard table of spfli.

start-of-selection.
  perform frm_get_data.
  perform frm_disp_data.

*&---------------------------------------------------------------------*
*&      Form  frm_get_data
*&---------------------------------------------------------------------*
form frm_get_data.
  select * from spfli into table gt_spfli.
endform.                    "frm_get_data


*&---------------------------------------------------------------------*
*&      Form  frm_disp_data
*&---------------------------------------------------------------------*
form frm_disp_data.
  call function 'Z_FALV_FIELD_CATALOG'
    exporting
      it_output     = gt_spfli[]
    tables
      field_catalog = gt_fieldcat[].

  " add events
  gs_event-name = 'PF_STATUS_SET'.
  gs_event-form = 'FRM_GUI_STATUS'.
  append gs_event to gt_events.
  clear gs_event.

  gs_event-name = 'USER_COMMAND'.
  gs_event-form = 'FRM_USER_COMMAND'.
  append gs_event to gt_events.

  call function 'REUSE_ALV_GRID_DISPLAY'
    exporting
      i_callback_program = sy-repid
      it_events          = gt_events
      it_fieldcat        = gt_fieldcat[]
    tables
      t_outtab           = gt_spfli[].

endform.                    "frm_disp_data


*&---------------------------------------------------------------------*
*&      Form  frm_status_set
*&---------------------------------------------------------------------*
form frm_gui_status using ex_tab type slis_t_extab.
  set pf-status 'ZSTANDARD' excluding ex_tab immediately.
endform.                    "frm_status_set


*&---------------------------------------------------------------------*
*&      Form  user_command
*&---------------------------------------------------------------------*
form frm_user_command using p_ucomm    type sy-ucomm        " user command
                            p_selfield type slis_selfield.  " select field
  case p_ucomm.
    when 'EXCEL'.
      call function 'ZITAB_TO_EXCEL'
        exporting
          internal_tab = gt_spfli[].
  endcase.
endform. 

运行 REUSE_ALV_EVENTS_GET 函数可以知道 ALV 支持哪些事件:

下面讲解 top_of_page 事件的用法:

将 top_of_page 事件加到 gt_events 内表中:

  gs_event-name = 'TOP_OF_PAGE'.
  gs_event-form = 'FRM_TOP_OF_PAGE'.
  append gs_event to gt_events.

编写 frm_top_of_page 子例程。这个子例程没有参数。

form frm_top_of_page.
  data: ls_header type slis_listheader,
        lt_header type slis_t_listheader.

  ls_header-typ = 'H'.
  ls_header-info = '航班一览表'.
  append ls_header to lt_header.

  ls_header-typ = 'S'.
  concatenate '查询日期: ' sy-datum into ls_header-info.
  append ls_header to lt_header.

  call function 'REUSE_ALV_COMMENTARY_WRITE'
    exporting
      it_list_commentary = lt_header.
endform.  

效果图:

源码

08-ALV events

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值