十三、SALV 过滤器(filter)

58 篇文章 5 订阅

过滤器(filter)

一、主要功能
  1. 怎样在SALV中添加过滤器方法如下
    • 通过方法get_filters()取得filter类CL_SALV_FILTERS的引用,
    • 调用方法ADD_FILTERS添加过滤的条件,过滤条件和range和select-options一样,用到了sign,option,low&high。
    • sign:I-范围内;E-范围外
    • option: EQ-等于, NE-不等于, GT-大于, GE-大等于,LE-小等于, LT-小于,CP-包含pattern, NP-不包含pattern, 用到的通配符 ‘*’(多个字符), ‘+’(单独字符)
    • low:下限值
    • high:上限值
二、实现与代码
  1. 在简单SALV中添加一个方法set_filters(),只保留‘202011101’的数据

    *&---------------------------------------------------------------------*
    *& 一个简单的通过类CL_SALV_TABLE生成SALV的例子
    *&---------------------------------------------------------------------*
    REPORT ZABAP_SALV13.
    *
    *----------------------------------------------------------------------*
    *       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_filters 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.
    
    *   调用filter设置方法
        CALL METHOD set_filters
          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.
    
    * filter设置方法的实现
      METHOD set_filters.
    *
        DATA: lo_filters TYPE REF TO cl_salv_filters.
    *
        lo_filters = co_alv->get_filters( ).
    *
    *   Set the filter for the column ERDAT
    *     the filter criteria works exactly same as any
    *     RANGE or SELECT-OPTIONS works.
        TRY.
            CALL METHOD lo_filters->add_filter
              EXPORTING
                columnname = 'ERDAT'
                sign       = 'I'
                option     = 'EQ'
                low        = '20211101'  "2002.10.09
    *           high       =
              .
          CATCH cx_salv_not_found .                         "#EC NO_HANDLER
          CATCH cx_salv_data_error .                        "#EC NO_HANDLER
          CATCH cx_salv_existing .                          "#EC NO_HANDLER
        ENDTRY.
    *
      ENDMETHOD.                    "set_filters
    *$*$*.....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-iT9JDNfL-1678759699694)(D:\学习计划笔记\SALV\IMAGE\image-20220418111957695.png)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值