您的位置:首页 > 其它

OO实现ALV TABLE 三:ALV的功能设计

2008-08-19 11:47 405 查看
细心的读者肯定已经注意前面的两个例子少了点什么,少了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' ).[/b]
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( ).
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: