OO实现ALV(一)<转>

转载 2013年12月03日 16:49:53

一、最简单的ALV显示

以前都是通过函数“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( ).

下面是报表的所有源代码:

REPORTy_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. "main

DATA: lt_tab TYPE TABLE OF spfli.

lt_tab = me->getdata( ). "取得要显示的数据

me->alv_process( lt_tab ). "处理数据

ENDMETHOD.

ENDCLASS. "lcl_alv IMPLEMENTATION

*报表执行==============================================================

start-of-selection.

data lr_alv type ref to lcl_alv.

create object lr_alv.

lr_alv->main( ).

二、ALV显示的三种形式

一般的ALV有三种显示形式,分别为

1、普通的List

2、全屏的Grid

3、在自定义屏幕的显示的Grid

跟以往实现这三种ALV显示方式相比,以往的三种显示方式分别是调用不同的Function和Class,实现方式复杂。现在这三种显示方式可以通过一个类(CL_SALV_TABLE)来实现,而且通过这个类和它的子类可以更加容易的实现ALV的功能,比如:排序,总计,过滤,页眉页脚,单击双击事件等。

下面让我们一步一步地来实现这三种显示形式。

1.首先我们先创建选择屏幕,屏幕有三个选项,三个选项分别为三种显示方式。

SELECTION-SCREEN BEGIN OF BLOCK blk WITH FRAME.

PARAMETERS: p_full RADIOBUTTON GROUP rg,

p_list RADIOBUTTON GROUP rg,

p_grid RADIOBUTTON GROUP rg.

SELECTION-SCREEN END OF BLOCK blk.

2.取得要显示的数据。

SELECT * INTO TABLE lt_tab FROM spfli

3.判断选择屏幕的选项创建不同的实例。

CASE 'X'.

WHEN p_full.

me->alv_full( lt_tab ).

WHEN p_list.

me->alv_list( lt_tab ).

WHEN p_grid.

me->alv_grid( lt_tab ).

ENDCASE.

4.当用户选择第一个选项,列表输出为全屏的网格列表,执行方法alv_full( )。

METHOD alv_full.

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_full

5.当用户选择第二个选项,列表输出为普通的列表,alv_list方法跟alv_full方法不同的是在创建实例的时候多了一个选项list_display = ‘X’.

METHOD alv_list.

TRY.

cl_salv_table=>factory( "创建实例

EXPORTING

list_display = 'X'

IMPORTING

r_salv_table = gr_table

CHANGING

t_table = lt_tab).

CATCH cx_salv_msg.

ENDTRY.

gr_table->display( ). "显示列表

ENDMETHOD. "alv_list

6.当用户选择第三个选项,列表在自定义屏幕上输出网格列表,执行方法alv_grid( ).方法alv_grid()调用了屏幕100。执行屏幕的时候会执行它的PBO和PAI,也就是会执行module status_0100和user_command_0100。Status_0100的代码是:

DATA: lr_container TYPE REF TO cl_gui_custom_container, "定义变量

lr_alv2 TYPE REF TO lcl_alv,

lt_tab TYPE TABLE OF spfli.

IF cl_salv_table=>is_offline( ) = ''. "判断容器存在与否,然后创建容器实例

CREATE OBJECT lr_container

EXPORTING

container_name = 'CONTAINER'.

ENDIF.

CREATE OBJECT lr_alv2. "创建类LCL_ALV实例LCL_ALV2

lt_tab = lr_alv2->getdata( ). "取得列表数据

TRY.

cl_salv_table=>factory( "创建ALV实例

EXPORTING

r_container = lr_container

container_name = 'CONTAINER'

IMPORTING

r_salv_table = gr_table

CHANGING

t_table = lt_tab).

CATCH cx_salv_msg.

ENDTRY.

gr_table->display( ). "显示ALV列表

FREE lt_tab. "释放内存

下面是程序的所有代码:

REPORT y_xin_002.

TYPES ty_spfli TYPE spfli OCCURS 0. "变量定义

DATA: gr_table TYPE REF TO cl_salv_table.

SELECTION-SCREEN BEGIN OF BLOCK blk WITH FRAME. "选择屏幕设计

PARAMETERS: p_full RADIOBUTTON GROUP rg,

p_list RADIOBUTTON GROUP rg,

p_grid RADIOBUTTON GROUP rg.

SELECTION-SCREEN END OF BLOCK blk.

*----------------------------------------------------------------------*

* 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,

alv_list "普通List处理方法

IMPORTING value(lt_tab) TYPE ty_spfli,

alv_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.

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_full

*输出全屏普通列表的方法==============================================

METHOD alv_list.

TRY.

cl_salv_table=>factory( "创建实例

EXPORTING

list_display = 'X'

IMPORTING

r_salv_table = gr_table

CHANGING

t_table = lt_tab).

CATCH cx_salv_msg.

ENDTRY.

gr_table->display( ). "显示列表

ENDMETHOD. "alv_list

*输出在自定义屏幕上的列表============================================

METHOD alv_grid.

CALL SCREEN '0100'.

ENDMETHOD. "alv_grid

*主方法,整合数据====================================================

METHOD main.

DATA: lt_tab TYPE TABLE OF spfli.

lt_tab = me->getdata( ). "取得要显示的数据

CASE 'X'. "判断选择屏幕的选择条件调用不同的方法

WHEN p_full.

me->alv_full( lt_tab ).

WHEN p_list.

me->alv_list( lt_tab ).

WHEN p_grid.

me->alv_grid( lt_tab ).

ENDCASE.

ENDMETHOD. "main

ENDCLASS. "lcl_alv IMPLEMENTATION

*----------------------------------------------------------------------*

* MODULE status_0100

*----------------------------------------------------------------------*

* PBO 屏幕输出前执行

*----------------------------------------------------------------------*

MODULE status_0100 OUTPUT.

DATA: lr_container TYPE REF TO cl_gui_custom_container, "定义变量

lr_alv2 TYPE REF TO lcl_alv,

lt_tab TYPE TABLE OF spfli.

IF cl_salv_table=>is_offline( ) = ''. "创建容器实例

CREATE OBJECT lr_container

EXPORTING

container_name = 'CONTAINER'.

ENDIF.

CREATE OBJECT lr_alv2. "创建类LCL_ALV实例

lt_tab = lr_alv2->getdata( ). "取得列表数据

TRY.

cl_salv_table=>factory( "创建ALV实例

EXPORTING

r_container = lr_container

container_name = 'CONTAINER'

IMPORTING

r_salv_table = gr_table

CHANGING

t_table = lt_tab).

CATCH cx_salv_msg.

ENDTRY.

gr_table->display( ). "显示ALV列表

FREE lt_tab. "释放内存

ENDMODULE. "status_0100

*----------------------------------------------------------------------*

* MODULE user_command_0100

*----------------------------------------------------------------------*

* PAI 屏幕输出后的动作

*----------------------------------------------------------------------*

MODULE user_command_0100 INPUT.

ENDMODULE. "user_command_0100

"报表执行===============================================================

START-OF-SELECTION.

DATA lr_alv TYPE REF TO lcl_alv.

CREATE OBJECT lr_alv.

lr_alv->main( ).

相关文章推荐

sap abap oo实现ALV

  • 2012-09-05 11:11
  • 1.08MB
  • 下载

OO实现ALV 聚合,排序,过滤

在ALV提供的标准工具栏上我们可以实现输出结果的聚合(最大值,最小值,汇总,平均数),排序,过滤功能,同样在程序里也可以达到这些功能。   1.       声明聚合,排序,过滤所需要的变量。 ...

sap OO实现ALV TABLE

  • 2012-04-06 08:59
  • 1.08MB
  • 下载

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

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

OO实现ALV TABLE 二:ALV显示的三种形式

一般的ALV有三种显示形式,分别为 一、普通的List   二、全屏的Grid     三、在自定义屏幕的显示的Grid   跟以往实现这三种ALV显示方式相比,以往的三种...

OO实现ALV TABLE 七:ALV的选择功能

在ALV的输出结果中,要对它的某一行、某一列或者某一单元格进行选定,我们通常的做法是把鼠标直接点击那一行或者是列就可以了,如果选择多行或多列,在选择的条件按住‘CTRL’键就可以了。这是手动选择的方法...

OO实现ALV TABLE 四:ALV的显示样式

通过类CL_SALV_DISPLAY_SETTINGS我们可以设置ALV的显示样式,主要包括ALV表头名称,列表颜色间隔显示,水平线是否显示,竖线是否显示等。   1.首先我们要取得类CL_SAL...

OO实现ALV TABLE 十:ALV的页眉页脚

除了可以通过类CL_SALV_EVENTS_TABLE的事件设置ALV的页眉页脚之外,还可以通过类CL_SALV_TABLE的方法SET_TOP_OF_LIST,SET_TOP_OF_LIST_PRI...

OO实现ALV TABLE 一:最简单的ALV显示

以前都是通过函数“REUSE_ALV_GRID_DISPLAY”来显示列表,这种方式是面向过程的,现在有另外一种面向对象化的方式来显示列表,函数REUSE_ALV_GRID_DISPLAY可以做到的它...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)