冷酷至尊

博客园 首页 新随笔 联系 订阅 管理

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

 

细心的读者肯定已经注意前面的两个例子少了点什么,少了ALV提供的标准功能,比如排序,过滤,汇总,等,以及用户可以在ALV的功能栏上加上自己自定义的功能按钮。

TABLE 三:ALV的功能设计[转]" alt="OO实现ALV TABLE 三:ALV的功能设计[转]" src="http://s7.sinaimg.cn/middle/5ccd375bga6b24b858c56&690" name=image_operate_68931309184611984>

 

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.

 

 

下面是效果图

TABLE 三:ALV的功能设计[转]" height=367 alt="OO实现ALV TABLE 三:ALV的功能设计[转]" src="http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif" width=508 name=image_operate_69881309184627528 real_src="http://s7.sinaimg.cn/middle/5ccd375bga6b24c779466&690">

 

下面是程序的所有代码:

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( ).

posted on 2013-01-11 20:04  冷酷至尊  阅读(118)  评论(0)    收藏  举报