四、SALV 添加布局按钮

58 篇文章 3 订阅

添加布局按钮

一、介绍

向SALV上添加布局(Layout)按钮, 默认情况下,SALV的tool bar上只有修改 layout一个按钮,并没有保存和选择layout的按钮,如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HrkdCWvZ-1678613017950)(D:\学习计划笔记\SALV\IMAGE\image-20220416130111847.png)]

二、实现和代码
  1. 实现方法:
  • 取得SALV中CL_SALV_LAYOUT的实例,
  • 通过CL_SALV_LAYOUT实例中的方法set_key,set_save_restriction,set_initial_layout显示layout 按钮
  1. 完整代码:

    *&---------------------------------------------------------------------*
    *& 一个简单的通过类CL_SALV_TABLE生成SALV的例子
    *&---------------------------------------------------------------------*
    REPORT zabap_salv4.
    *
    *----------------------------------------------------------------------*
    *       CLASS lcl_report DEFINITION
    *----------------------------------------------------------------------*
    CLASS lcl_report DEFINITION.
    *
      PUBLIC SECTION.
    *
    *   定义SALV输出内表
        TYPES: BEGIN OF ty_vbak,
                 vbeln TYPE vbak-vbeln,
                 erdat TYPE erdat,
                 auart TYPE auart,
                 kunnr TYPE kunnr,
               END OF ty_vbak.
    *
        DATA: t_vbak TYPE STANDARD TABLE OF ty_vbak.
    *
    *   ALV reference
        DATA: o_alv TYPE REF TO cl_salv_table.
    *
        METHODS:
    *     抽取数据
          get_data,
    *
    *     生成输出内容
          generate_output.
    *
    *$*$*.....CODE_ADD_1 - Begin..................................1..*$*$*
    *
    * 定义private method来设定SALV不同特性
      PRIVATE SECTION.
        METHODS:
          set_pf_status CHANGING co_alv TYPE REF TO cl_salv_table.
    
        METHODS:
          set_layout CHANGING co_alv TYPE REF TO cl_salv_table.
    *$*$*.....CODE_ADD_1 - End....................................1..*$*$*
    
    ENDCLASS.                    "lcl_report DEFINITION
    
    *----------------------------------------------------------------------*
    *       CLASS lcl_report IMPLEMENTATION
    *----------------------------------------------------------------------*
    * 类实现
    CLASS lcl_report IMPLEMENTATION.
    *
      METHOD get_data.
    *   抽取数据
        SELECT vbeln
               erdat
               auart
               kunnr
          INTO TABLE t_vbak
          FROM vbak
               UP TO 20 ROWS.
    *
      ENDMETHOD.                    "get_data
    
    *.......................................................................
      METHOD generate_output.
    *   New ALV instance
    *   We are calling the static Factory method which will give back
    *   the ALV object reference.
    *
    * exception class
        DATA: lx_msg TYPE REF TO cx_salv_msg.
        TRY.
            cl_salv_table=>factory(
              IMPORTING
                r_salv_table = o_alv
              CHANGING
                t_table      = t_vbak ).
          CATCH cx_salv_msg INTO lx_msg.
        ENDTRY.
    *
    *$*$*.....CODE_ADD_2 - Begin..................................2..*$*$*
    *
    *    In this area we will call the methods which will set the
    *      different properties to the ALV
    *   调用status设置方法
        CALL METHOD set_pf_status
          CHANGING
            co_alv = o_alv.
    
    *   调用layout按钮设置方法
        CALL METHOD set_layout
          CHANGING
            co_alv = o_alv.
    
    *$*$*.....CODE_ADD_2 - End....................................2..*$*$*
    *
    *
    *   调用Display方法将数据输出到屏幕上
        o_alv->display( ).
    *
      ENDMETHOD.                    "generate_output
    *
    *$*$*.....CODE_ADD_3 - Begin..................................3..*$*$*
    *
    *    In this area we will implement the methods which are defined in
    *      the class definition
    * status设置方法实现
      METHOD set_pf_status.
    
        DATA: lo_functions TYPE REF TO cl_salv_functions_list.
    *   设置默认的标准状态栏
        lo_functions = co_alv->get_functions( ).
        lo_functions->set_default( abap_true ).
    
      ENDMETHOD.
    
    * layout设置方法的实现
      METHOD set_layout.
    *
        DATA: lo_layout  TYPE REF TO cl_salv_layout,
              lf_variant TYPE slis_vari,
              ls_key     TYPE salv_s_layout_key.
    *
    *   get layout object
        lo_layout = co_alv->get_layout( ).
    *
    *   set Layout save restriction
    *   1. Set Layout Key .. Unique key identifies the Differenet ALVs
        ls_key-report = sy-repid.
        lo_layout->set_key( ls_key ).
    *   2. 显示保存layout按钮
        lo_layout->set_save_restriction( if_salv_c_layout=>restrict_none ).
    *
    *   set initial Layout
        lf_variant = 'DEFAULT'.
        lo_layout->set_initial_layout( lf_variant ).
    *
      ENDMETHOD.                    "set_layout
    *$*$*.....CODE_ADD_3 - End....................................3..*$*$*
    *
    ENDCLASS.                    "lcl_report IMPLEMENTATION
    
    START-OF-SELECTION.
    
      DATA: lo_report TYPE REF TO lcl_report.
    
      CREATE OBJECT lo_report.
    * 抽取数据
      lo_report->get_data( ).
    * 生成SALV
      lo_report->generate_output( ).
    
三、执行结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nlLcFpLA-1678613017951)(D:\学习计划笔记\SALV\IMAGE\image-20220416134707832.png)]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值