OO实现ALV TABLE 三:ALV的功能设计
細心的讀者肯定已經注意前面的兩個例子少了點什么,少了ALV提供的標準功能,比如排序,過濾,匯總,等,以及用戶可以在ALV的功能欄上加上自己自定義的功能按鈕。
?
ALV的標準功能可以通過類CL_SALV_FUNCTIONS和CL_SALV_FUNCTION來設計,通過這兩個類你可以對ALV提供的標準功能可見或不可見。也可以自己創建GUI STATUS設置自己的ALV功能,通過GUI STATUS來設置ALV的功能是通過類CL_SALV_TABLE的方法SET_SCREEN_STATUS來實現的。
?
1.首先我們要取得類CL_SALV_FUNCTIONS的實例,根據類CL_SALV_TABLE的方法get_functions可以取得功能實例。
lr_functions = gr_table->get_functions( ).
??? lr_functions->set_all( 'X' ).
2根據類CL_SALV_TABLE的方法設置功能欄。
gr_table->set_screen_status(
??? pfstatus????? =? 'SALV_STANDARD'
??? report???????=? sy-repid
??? set_functions = gr_table->c_functions_all ).
?
3.自定義功能的實現。ALV的自定義功能的實現動作要通過類的事件來處理。
???????? 首先定義事件的操作類
??? CLASS lcl_handle_events DEFINITION.
? PUBLIC SECTION.
??? CLASS-METHODS: on_user_command FOR EVENT added_function OF cl_salv_events
????????????????????? IMPORTING e_salv_function.
ENDCLASS.??????????????????? "lcl_handle_events DEFINITION
???????? 實現事件的操作類
CLASS lcl_handle_events IMPLEMENTATION.
? METHOD on_user_command.
??? DATA l_string TYPE string.
??? CONCATENATE 'Function is ' e_salv_function
?????????? INTO l_string
?????????? SEPARATED BY space.
??? MESSAGE i000(0k) WITH l_string.
? ENDMETHOD.???????????????????"on_user_command
ENDCLASS.??????????????????? "lcl_handle_events IMPLEMENTATION
????????? 注冊事件
SET HANDLER lcl_handle_events=>on_user_command FOR lr_events.
?
?
下面是效果圖
?
?
下面是程序的所有代碼:
REPORT? y_xin_002.
?
*變量定義
TYPES ty_spfli TYPE spfli OCCURS 0.
DATA: gr_table???? TYPE REF TO cl_salv_table.
?
?
*----------------------------------------------------------------------*
*?????? CLASS lcl_handle_events DEFINITION
*----------------------------------------------------------------------*
*?????? 事件處理類(定義)
*----------------------------------------------------------------------*
CLASS lcl_handle_events DEFINITION.
? PUBLIC SECTION.
??? CLASS-METHODS: on_user_command FOR EVENT added_function OF cl_salv_events
????????????????????? IMPORTING e_salv_function.
ENDCLASS.??????????????????? "lcl_handle_events DEFINITION
?
*----------------------------------------------------------------------*
*? ?????CLASS lcl_handle_events IMPLEMENTATION
*----------------------------------------------------------------------*
*?????? 事件處理類(實現)
*----------------------------------------------------------------------*
CLASS lcl_handle_events IMPLEMENTATION.
? METHOD on_user_command.
??? DATA l_string TYPE string.
??? CONCATENATE 'Function is ' e_salv_function
?????????? INTO l_string
??? ???????SEPARATED BY space.
??? MESSAGE i000(0k) WITH l_string.
? ENDMETHOD.??????????????????? "on_user_command
ENDCLASS.??????????????????? "lcl_handle_events IMPLEMENTATION
?
*----------------------------------------------------------------------*
*????? ?CLASS lcl_alv DEFINITION
*----------------------------------------------------------------------*
*?????? ALV操作類(定義)
*----------------------------------------------------------------------*
CLASS lcl_alv DEFINITION.
? PUBLIC SECTION.
??? METHODS: getdata???????? "取得要顯示的數據
?????????????? RETURNING value(lt_tab) TYPE ty_spfli,
???????????? alv_full??????? "全屏Grid列表處理方法
?????????????? IMPORTING value(lt_tab) TYPE ty_spfli,
???????????? main.?????????? "主方法
ENDCLASS.??????????????????? "lcl_alv DEFINITION
?
*----------------------------------------------------------------------*
*?????? CLASS lcl_alv IMPLEMENTATION
*----------------------------------------------------------------------*
*?????? ALV操作類(實現)
*----------------------------------------------------------------------*
CLASS lcl_alv IMPLEMENTATION.
*取得要顯示的數據
? METHOD getdata.
??? SELECT * INTO TABLE lt_tab FROM spfli.
? ENDMETHOD.??????????????????? "getdata
?
*輸出全屏網格列表的方法
? METHOD alv_full.
??? DATA: lr_functions TYPE REF TO cl_salv_functions,
????????? lr_events??? TYPE REF TO cl_salv_events.
?
??? "創建實例
??? TRY.
??????? cl_salv_table=>factory(
????????? IMPORTING
??????????? r_salv_table = gr_table
????????? CHANGING
??????????? t_table????? = lt_tab
??????? ).
????? CATCH cx_salv_msg.
??? ENDTRY.
?
??? lr_events = gr_table->get_event( ).
?
??? "設置ALV功能
??? gr_table->set_screen_status(
??? pfstatus????? =? 'SALV_STANDARD'
??? report??????? =? sy-repid
??? set_functions = gr_table->c_functions_all ).
?
??? "注冊事件
??? SET HANDLER lcl_handle_events=>on_user_command FOR lr_events.
?
??? "顯示列表
??? gr_table->display( ).
? ENDMETHOD.??????????????????? "alv_full
?
*主方法,整合數據
? METHOD main.
??? DATA: lt_tab TYPE TABLE OF spfli.
?
??? "取得要顯示的數據
??? lt_tab = me->getdata( ).
?
??? me->alv_full( 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( ).總結
以上是生活随笔為你收集整理的OO实现ALV TABLE 三:ALV的功能设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OO实现ALV TABLE 四:ALV的
- 下一篇: OO实现ALV TABLE 二:ALV显