ABAP - SALV教程10 添加可编辑checkbox列

本文介绍了如何在SAPALV报表中,通过修改列样式将SEL列转换为checkbox_hotspot样式,并注册单击事件进行勾选操作,以及处理on_link_click事件以更新数据的状态。
摘要由CSDN通过智能技术生成
  • 几乎所有的功能报表都会有那么一个选择列,问了业务顾问,业务顾问说是用户不习惯使用报表原生的选择模式。
  • 效果图
  • SALV的选择列是通过将列设置成checkbox_hotspot样式,注册单击事件完成勾选功能的。
  • 完成步骤
  1. 将SEL列设置成checkbox_hotspot样式
      METHOD set_columns.
    *   取得全部列的对象
        DATA(lo_cols) = co_alv->get_columns( ).
    
        TRY.
    
            "修改列SEL的标签名字和输出长度
            lo_cols->get_column( 'SEL' )->set_long_text( '选择' ).  "长描述
            lo_cols->get_column( 'SEL' )->set_medium_text( '选择' )."中描述
            lo_cols->get_column( 'SEL' )->set_short_text( '选择' ). "短描述
            lo_cols->get_column( 'SEL' )->set_output_length( 4 ).
            
            "修改列成为checkbox_hotspot样式
            DATA lo_col TYPE REF TO cl_salv_column_list.
            lo_col ?= lo_cols->get_column( 'SEL' ).
            lo_col->set_cell_type( if_salv_c_cell_type=>checkbox_hotspot ).
          CATCH cx_salv_not_found.
        ENDTRY.
    
      ENDMETHOD.    

  2. 获取SALV事件对象,并对单击事件作处理
      METHOD set_columns.
        "获取事件对象
        DATA: lo_events TYPE REF TO cl_salv_events_table.
        lo_events = co_alv->get_event( ).
        "注册单击事件
        SET HANDLER me->on_link_click FOR lo_events.
      ENDMETHOD.    
      
      "单击事件的处理  
      METHOD on_link_click.
        READ TABLE me->mt_data ASSIGNING FIELD-SYMBOL(<fs_data>) INDEX row.
        CHECK sy-subrc IS INITIAL.
        IF <fs_data>-sel IS INITIAL.
          <fs_data>-sel = 'X'.
        ELSE.
          CLEAR <fs_data>-sel.
        ENDIF.
        me->mo_salv->refresh( ).
      ENDMETHOD.                
     

  • 完整代码
    CLASS lcl_model DEFINITION.
      PUBLIC SECTION.
        TYPES:BEGIN OF TY_dATA,
                sel   TYPE char1,
                vbeln TYPE vbak-vbeln,
                erdat TYPE erdat,
                erzet TYPE erzet,
                ernam TYPE ernam,
                auart TYPE auart.
        TYPES:END  OF ty_data.
    
        DATA mt_data TYPE TABLE OF ty_data.
    
        DATA mo_salv TYPE REF TO cl_salv_table.
    
        "获取数据的方法
        METHODS get_data.
        "展示SALV的方法
        METHODS alv_show.
    
      PRIVATE SECTION.
        METHODS:
          set_status  CHANGING co_alv TYPE REF TO cl_salv_table.
        METHODS:
          set_columns CHANGING co_alv TYPE REF TO cl_salv_table.
        METHODS:
          on_link_click FOR EVENT link_click OF cl_salv_events_table
            IMPORTING row column.
    ENDCLASS.
    
    CLASS lcl_model IMPLEMENTATION.
      METHOD get_data.
        SELECT vbeln erdat erzet ernam auart
          INTO CORRESPONDING FIELDS OF TABLE mt_data
          FROM vbak
          UP TO 20 ROWS.
      ENDMETHOD.
    
      METHOD alv_show.
        DATA: lx_msg TYPE REF TO cx_salv_msg.
        TRY.
            cl_salv_table=>factory(
              IMPORTING
                r_salv_table = mo_salv
              CHANGING
                t_table      = mt_data ).
          CATCH cx_salv_msg INTO lx_msg.
        ENDTRY.
        me->set_status( CHANGING co_alv = mo_salv ).
        me->set_columns( CHANGING co_alv = mo_salv ).
        mo_salv->display( ).
      ENDMETHOD.
    
      METHOD set_status.
        DATA(lo_functions) = co_alv->get_functions( ).
        "cl_salv_functions_list类型的实例对象的添加状态方法
        lo_functions->set_all( abap_true ).
        "lo_functions->set_default( abap_true ).
      ENDMETHOD.
    
      METHOD set_columns.
    *   取得全部列的对象
        DATA(lo_cols) = co_alv->get_columns( ).
    
    *   设置自动优化列宽度
        lo_cols->set_optimize( 'X' ).
    
    *   修改列VBELN的标签名字和输出长度
        TRY.
            lo_cols->get_column( 'SEL' )->set_long_text( '选择' ).  "长描述
            lo_cols->get_column( 'SEL' )->set_medium_text( '选择' )."中描述
            lo_cols->get_column( 'SEL' )->set_short_text( '选择' ). "短描述
            lo_cols->get_column( 'SEL' )->set_output_length( 4 ).
    
            DATA lo_col TYPE REF TO cl_salv_column_list.
            lo_col ?= lo_cols->get_column( 'SEL' ).
            lo_col->set_cell_type( if_salv_c_cell_type=>checkbox_hotspot )..
          CATCH cx_salv_not_found.
        ENDTRY.
    
        DATA: lo_events TYPE REF TO cl_salv_events_table.
        lo_events = co_alv->get_event( ).
    
        SET HANDLER me->on_link_click FOR lo_events.
    
      ENDMETHOD.                    "SET_COLUMNS
    
      METHOD on_link_click.
    
        READ TABLE me->mt_data ASSIGNING FIELD-SYMBOL(<fs_data>) INDEX row.
        CHECK sy-subrc IS INITIAL.
        IF <fs_data>-sel IS INITIAL.
          <fs_data>-sel = 'X'.
        ELSE.
          CLEAR <fs_data>-sel.
        ENDIF.
        me->mo_salv->refresh( ).
      ENDMETHOD.
    ENDCLASS.
    
    START-OF-SELECTION.
      DATA(lo_model) = NEW lcl_model( ).
      lo_model->get_data( ).
      lo_model->alv_show( ).
     
  • 23
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
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报表显示一个复选框,用户可以选择或取消选择复选框。请根据你的实际需求修改字段名称、数据类型和内表数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值