ABAP SALV-选择模式、触发事件

01 功能说明

上篇:ABAP SALV-页眉、页脚

本系列将通过模拟用户与开发者之间的对话场景,来逐步演示SALV的使用。在本篇中,我们将延续前文内容,解决用户最新提出的需求,并同时介绍 SALV部分事件的触发时机 ,为后续新增功能的实现提供必要的知识储备。让我们一起来探索吧。

赶紧动手试一试,以便更好地掌握这些新的知识点。

02 功能效果

第12天 用户说:选择模式

现在每次只能复制单行数据,我想选择多行进行复制。

IF p_day12 EQ 'X'.
  DATA lo_selections TYPE REF TO cl_salv_selections.

  lo_selections = go_salv->get_selections( ).
  lo_selections->set_selection_mode( if_salv_c_selection_mode=>cell ).
  ...
ENDIF.

在这里插入图片描述

第13天 用户说:触发事件

用户今天啥也没说,你来研究下SALV的触发事件吧!

IF p_day13 EQ 'X'.
  DATA lo_events_table TYPE REF TO cl_salv_events_table.
  lo_events_table = go_salv->get_event( ).

  DATA lo_evt_handler TYPE REF TO lcl_evt_handler.
  CREATE OBJECT lo_evt_handler.
  SET HANDLER lo_evt_handler->on_link_click FOR lo_events_table.
  SET HANDLER lo_evt_handler->on_double_click FOR lo_events_table.
  SET HANDLER lo_evt_handler->on_added_function FOR lo_events_table.
  SET HANDLER lo_evt_handler->before_salv_function FOR lo_events_table.
  SET HANDLER lo_evt_handler->after_salv_function FOR lo_events_table.
  ...
ENDIF.

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

03 源码分享

CLASS lcl_evt_handler DEFINITION.
  PUBLIC SECTION.
    METHODS on_link_click         "单击(热点)
                  FOR EVENT link_click OF cl_salv_events_table
      IMPORTING row column.

    METHODS on_double_click       "双击
                  FOR EVENT double_click OF cl_salv_events_table
      IMPORTING row column.

    METHODS on_added_function     "新增按钮点击
                  FOR EVENT added_function OF cl_salv_events_table
      IMPORTING e_salv_function.

    METHODS before_salv_function  "标准按钮点击前
                  FOR EVENT before_salv_function OF cl_salv_events_table
      IMPORTING e_salv_function.

    METHODS after_salv_function   "标准按钮点击后
                  FOR EVENT after_salv_function OF cl_salv_events_table
      IMPORTING e_salv_function.
ENDCLASS.

CLASS lcl_evt_handler IMPLEMENTATION.
  METHOD on_link_click.
    MESSAGE i001(00) WITH 'on_link_click:' row ' - ' column.
  ENDMETHOD.
  METHOD on_double_click.
    MESSAGE i001(00) WITH 'on_double_click:' row ' - ' column.
  ENDMETHOD.
  METHOD on_added_function.
    MESSAGE i001(00) WITH 'on_added_function:' e_salv_function.
  ENDMETHOD.
  METHOD before_salv_function.
    MESSAGE i001(00) WITH 'before_salv_function:' e_salv_function.
  ENDMETHOD.
  METHOD after_salv_function.
    MESSAGE i001(00) WITH 'after_salv_function:' e_salv_function.
  ENDMETHOD.
ENDCLASS.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE t1.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(79) day01 .
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(79) day02 .
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(79) day03 .
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(79) day04 .
SELECTION-SCREEN END OF LINE.
...
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(79) day12 .
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(79) day13 .
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE t2.
PARAMETERS p_day01 AS CHECKBOX DEFAULT 'X' . "01、基本展示
PARAMETERS p_day02 AS CHECKBOX DEFAULT 'X' . "02、外观设置
PARAMETERS p_day03 AS CHECKBOX DEFAULT 'X' . "03、列设置
PARAMETERS p_day04 AS CHECKBOX DEFAULT 'X' . "04、按钮设置
...
PARAMETERS p_day12 AS CHECKBOX DEFAULT 'X' . "12、选择模式
PARAMETERS p_day13 AS CHECKBOX DEFAULT 'X' . "13、触发事件
SELECTION-SCREEN END OF BLOCK b2.

INITIALIZATION.
  sy-title = 'ABAP SALV演示程序-公众号(ABAP猿)'.
  t1 = '用户说'.
  t2 = '你来做'.
  day01 = '01、从表SPFLI获取数据,并进行基本展示。'.
  day02 = '02、能否修改下抬头标题文本,并斑马纹展示?'.
  day03 = '03、能否优化下列宽?'.
  day04 = '04、怎么没有应用工具栏按钮,能加上吗?'.
  ...
  day12 = '12、现在每次只能复制单行数据,我想选择多行进行复制。'.
  day13 = '13、用户今天啥也没说,你来研究下SALV的触发事件吧!'.

  %_p_day01_%_app_%-text = '01、基本展示'.
  %_p_day02_%_app_%-text = '02、外观设置'.
  %_p_day03_%_app_%-text = '03、列设置'.
  %_p_day04_%_app_%-text = '04、按钮设置'.
  ...
  %_p_day12_%_app_%-text = '12、选择模式'.
  %_p_day13_%_app_%-text = '13、触发事件'.

START-OF-SELECTION.
*------------------------------------*
  CHECK p_day01 EQ 'X'.
  DATA gt_spfli TYPE TABLE OF spfli.
  SELECT * FROM spfli INTO TABLE gt_spfli UP TO 30 ROWS.

  DATA go_salv TYPE REF TO cl_salv_table.
  cl_salv_table=>factory(
   IMPORTING
     r_salv_table = go_salv
   CHANGING
     t_table      = gt_spfli ).
  ...
*------------------------------------*
  IF p_day02 EQ 'X'.
    DATA lo_display TYPE REF TO cl_salv_display_settings.

    lo_display = go_salv->get_display_settings( ).
    lo_display->set_list_header( 'ABAP SALV演示程序-公众号(ABAP猿)' ).
    lo_display->set_striped_pattern( 'X' ).
    ...
  ENDIF.
*------------------------------------*
  IF p_day03 EQ 'X'.
    DATA lo_columns TYPE REF TO cl_salv_columns_table .

    lo_columns = go_salv->get_columns( ).
    lo_columns->set_optimize( 'X' ).
    ...
    IF p_day13 = 'X'.
      DATA lo_column TYPE REF TO cl_salv_column_table .

      lo_column ?= lo_columns->get_column( columnname = 'CARRID' ).
      lo_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
    ENDIF.
  ENDIF.
*------------------------------------*
  IF p_day04 EQ 'X'.
    DATA lo_functions TYPE REF TO cl_salv_functions.

    lo_functions = go_salv->get_functions( ).
    lo_functions->set_all( 'X' ).
    ...
  ENDIF.
*------------------------------------*
  ...
*------------------------------------*
  IF p_day12 EQ 'X'.
    DATA lo_selections TYPE REF TO cl_salv_selections.

    lo_selections = go_salv->get_selections( ).
    lo_selections->set_selection_mode( if_salv_c_selection_mode=>cell ).
    ...
  ENDIF.
*------------------------------------*
  IF p_day13 EQ 'X'.
    DATA lo_events_table TYPE REF TO cl_salv_events_table.
    lo_events_table = go_salv->get_event( ).

    DATA lo_evt_handler TYPE REF TO lcl_evt_handler.
    CREATE OBJECT lo_evt_handler.
    SET HANDLER lo_evt_handler->on_link_click FOR lo_events_table.
    SET HANDLER lo_evt_handler->on_double_click FOR lo_events_table.
    SET HANDLER lo_evt_handler->on_added_function FOR lo_events_table.
    SET HANDLER lo_evt_handler->before_salv_function FOR lo_events_table.
    SET HANDLER lo_evt_handler->after_salv_function FOR lo_events_table.
    ...
  ENDIF.
*------------------------------------*
  go_salv->display( ).

小贴士:

  • 可使用BC_DATA_GEN生成数据,以便查看演示效果;
  • 以上纯属个人总结,如有纰漏请联系我;

以上是今日分享,希望对你有所帮助~~

04 关注我

更多干货请扫码关注微信公众号:ABAP猿
在这里插入图片描述

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ABAP SALV(SAP List Viewer)是一个用于在SAP系统中创建和显示报表的工具。要在ABAP SALV报表中添加复选框(checkbox),你可以按照以下步骤进行操作: 1. 定义内表(table):首先,你需要定义一个内表来存储数据和复选框的状态。可以使用`TYPES`关键字定义一个包含所需字段的结构。 2. 填充内表数据:将需要显示的数据填充到内表中。可以使用`APPEND`语句将数据行添加到内表中。 3. 创建SALV对象:使用`CL_SALV_TABLE`类创建一个SALV对象,并将内表作为参数传递给构造方法。 4. 添加复选框列:通过调用`ADD_CHECKBOX_COLUMN`方法,为SALV对象添加一个复选框列。可以指定该列的标题和字段名。 5. 显示报表:使用`DISPLAY`方法显示SALV报表。 下面是一个简单的示例代码: ```abap DATA: lt_data TYPE TABLE OF (your_structure), lo_salv TYPE REF TO cl_salv_table. * 定义内表类型 TYPES: BEGIN OF ty_data, field1 TYPE data_type, field2 TYPE data_type, checkbox TYPE abap_bool, END OF ty_data. * 填充内表数据 APPEND VALUE #( field1 = value1 field2 = value2 ) TO lt_data. * 创建SALV对象 lo_salv = cl_salv_table=>factory( ). * 添加复选框列 lo_salv->add_checkbox_column( title = 'CheckBox' fieldname = 'CHECKBOX' ). * 设置内表数据 lo_salv->set_table_for_first_display( exporting i_structure_name = 'TY_DATA' changing it_outtab = lt_data ). * 显示报表 lo_salv->display( ). ``` 这段代码将在SALV报表中显示一个复选框列,用户可以选择或取消选择复选框。请根据你的实际需求修改字段名称、数据类型和内表数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值