以前都是通過函數“REUSE_ALV_GRID_DISPLAY”來顯示列表,這種方式是面向過程的,現在有另外一種面向對象化的方式來顯示列表,函數REUSE_ALV_GRID_DISPLAY可以做到的它也能夠做到。它主要是通過一個類CL_SALV_TABLE來實現的.
下面讓我們來實現最簡單的ALV列表。
1取得要顯示的數據。
SELECT * INTO TABLE lt_tab FROM spfli
2.調用類CL_SALV_TABLE的靜態方法Factory()創建類的實例。
TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table = lr_table
CHANGING
t_table = lt_tab
).
CATCH cx_salv_msg.
ENDTRY.
3.取得實例之後再調用方法Display()顯示列表.
lr_table->display( ).
處理過程完成,最後讓我們看一下顯示結果。
下面是報表的所有源代碼:
REPORT y_xin_002.
*變量定義
TYPES ty_spfli TYPE spfli OCCURS 0.
*----------------------------------------------------------------------*
* CLASS lcl_alv DEFINITION
*----------------------------------------------------------------------*
* ALV操作類(定義)
*----------------------------------------------------------------------*
CLASS lcl_alv DEFINITION.
PUBLIC SECTION.
METHODS: getdata "取得要顯示的數據
RETURNING value(lt_tab) TYPE ty_spfli,
alv_process "ALV處理方法
IMPORTING value(lt_tab) TYPE ty_spfli,
main. "主方法
PRIVATE SECTION.
DATA gr_table TYPE REF TO cl_salv_table.
ENDCLASS. "lcl_alv DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_alv IMPLEMENTATION
*----------------------------------------------------------------------*
* ALV操作類(實現)
*----------------------------------------------------------------------*
CLASS lcl_alv IMPLEMENTATION.
*取得要顯示的數據
METHOD getdata.
SELECT * INTO TABLE lt_tab FROM spfli.
ENDMETHOD. "getdata
*ALV處理方法
METHOD alv_process.
"創建實例
TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table = gr_table
CHANGING
t_table = lt_tab
).
CATCH cx_salv_msg.
ENDTRY.
"顯示列表
gr_table->display( ).
ENDMETHOD. "alv_process
*主方法,整合數據
METHOD main.
DATA: lt_tab TYPE TABLE OF spfli.
"取得要顯示的數據
lt_tab = me->getdata( ).
"處理數據
me->alv_process( lt_tab ).
ENDMETHOD. "main
ENDCLASS. "lcl_alv IMPLEMENTATION
*報表執行
start-of-selection.
data lr_alv type ref to lcl_alv.
create object lr_alv.
lr_alv->main( ).
關於ALV的最全文檔可以參考SAP Help
http://help.sap.com/saphelp_nw70/helpdata/EN/5e/88d440e14f8431e10000000a1550b0/content.htm