添加布局按钮
一、介绍
向SALV上添加布局(Layout)按钮, 默认情况下,SALV的tool bar上只有修改 layout一个按钮,并没有保存和选择layout的按钮,如下:
二、实现和代码
- 实现方法:
- 取得SALV中CL_SALV_LAYOUT的实例,
- 通过CL_SALV_LAYOUT实例中的方法set_key,set_save_restriction,set_initial_layout显示layout 按钮
-
完整代码:
*&---------------------------------------------------------------------* *& 一个简单的通过类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( ).