过滤器(filter)
一、主要功能
- 怎样在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:上限值
二、实现与代码
-
在简单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( ).