ABAP ALV详解

  • 格式:pdf
  • 大小:216.51 KB
  • 文档页数:29

ALV GRID参考文档

SAP HELP对ALV的定义如下:The ALV grid control is a flexible tool for displaying lists. The

tool provides common list operations as generic functions and can be enhanced by self-defined

options。

ALV Grid控件用来创建非层次的友好的交互式报表。作为一个控件,他被安装在本地机

的客户端上。

ALV Grid控件提供了典型的常用功能,比如排序,筛选和总计等。同时他也提供了自开

发功能的接口。它提供了大量与excel和水晶报表的接口。

类CL_GUI_GRID用来实现ALV GRID控件的各种功能。还可以使用:REUSE_ALV….

这些功能模块,来实现ALV报表。

当我们想通过ALV来实现报表时,我们通常需要准备一下几个部分:

1) List data;就是你要显示的内表。除排序功能之外,ALV GRID的控件只是读取所要

显示的内表中的内容。然而,排序将会改表内表的状态。所要显示的内表可以包含

任何flat type的数据。如果要显示deep type的数据,那可能就要设定ALV GRID的

某些特定功能。

2) Field Catalog: 使用另外一个内表来定义ALV报表的每一个字段的显示方式。Field

catalog可以通过三种方式来实现:自动生成,半自动和手动生成。这个内表的类型

必须是LVC_T_FCAT

3) Layout Structure: 我们可以通过这个结构来设置ALV的显示格式。用这个结构我们可

以用来设置ALV的常用选项,对GRID控件的配置,汇总选项已经颜色等。这个结

构的类型必须是LVC_S_LAYO

4) Event Handler: 如果我们想在alv grid中触发时间,可以通过事件处理类来实现,必

须注册一个事件处理类的实例来处理alv grid的事件。

5) Additional data: 通过alv其他的一些参数可以用来设置alv grid的其它的一些特征。

例如设置初始的排序顺序,把某些按钮置为非激活状态等。

下面我们来简单看一下alv的实现步骤,作为一个控件对象必须有一个容器来实现与屏幕

的连接。我们用cl_gui_custom_container这个类的实例来实现这个目的。另外还有一些其

他类的实例也可能会用到,比如cl_gui_docking_container,cl_gui_dialogbox_container。首

先我们要在屏幕上创建custome control区域。

下面简单描述一下ALV GRID的创建过程;

1. 在屏幕上创建custom control区域,比如我们把这个区域的名字定位cc_alv

2. 定义alv grid的全局变量

3. *--GLOBAL DATA DEFINITIONS FOR ALV *--- ALV GRID instance reference

DATA: gr_alvgrid TYPE REF TO cl_gui_alv_grid.

*--- Name of the custome control added on the screen

DATA: gc_custome_control_name TYPE scrfname VALUE 'CC_ALV'.

*-- Custome container instance reference

DATA: gr_container TYPE REF TO cl_gui_custom_container.

*-- Field catalog table

DATA gt_fieldcat TYPE lvc_t_fcat.

*-- Layout structure

DATA gs_layout TYPE lvc_s_layo.声明用来创建容纳显示内容的内表

4. 根据自己的具体需求把取出来的数据放到内表中

5. 建立PBO MODULE用来创建ALV GRID的实例 PROCESS BEFORE OUTPUT.

* MODULE STATUS_0100.

MODULE display_alv.

MODULE display_alv OUTPUT.

PERFORM display_alv.

ENDMODULE.

6. 下面是显示alv的主要步骤,先检查一下alv容器的实例是否存在,如果存在的话就

把刷新,否则的话就创建它,并调用显示alv的方法。 FORM display_alv.

IF gr_alvgrid IS INITIAL.

CREATE OBJECT GR_CONTAINER

EXPORTING CONTAINER_NAME = gc_custome_control_name

EXCEPTIONS

CNTL_ERROR = 1

CNTL_SYSTEM_ERROR = 2

CREATE_ERROR = 3

LIFETIME_ERROR = 4

LIFETIME_DYNPRO_DYNPRO_LINK = 5

others = 6.

IF SY-SUBRC <> 0.

ENDIF.

CREATE OBJECT GR_ALVGRID

EXPORTING I_PARENT = GR_CONTAINER

EXCEPTIONS

ERROR_CNTL_CREATE = 1

ERROR_CNTL_INIT = 2

ERROR_CNTL_LINK = 3 ERROR_DP_CREATE = 4

others = 5.

IF SY-SUBRC <> 0.

ENDIF.

*-- preparing field catalog

* PERFORM prepare_fieldcatalog CHANGING gt_fieldcat.

*-- preparing layout structure

* PERFORM prepare_layout CHANGING gs_layout.

*-- display alv list

CALL METHOD GR_ALVGRID->SET_TABLE_FOR_FIRST_DISPLAY

EXPORTING

* I_BUFFER_ACTIVE =

* I_BYPASSING_BUFFER =

* I_CONSISTENCY_CHECK =

* I_STRUCTURE_NAME =

* IS_VARIANT =

* I_SAVE =

* I_DEFAULT = 'X' IS_LAYOUT = gs_layout

* IS_PRINT =

* IT_SPECIAL_GROUPS =

* IT_TOOLBAR_EXCLUDING =

* IT_HYPERLINK =

* IT_ALV_GRAPHICS =

* IT_EXCEPT_QINFO =

CHANGING IT_OUTTAB = gt_list IT_FIELDCATALOG = gt_fieldcat

* IT_SORT =

* IT_FILTER =

EXCEPTIONS

INVALID_PARAMETER_COMBINATION = 1

PROGRAM_ERROR = 2

TOO_MANY_LINES = 3

others = 4.

IF SY-SUBRC <> 0.

ENDIF.

ELSE.

CALL METHOD GR_ALVGRID->REFRESH_TABLE_DISPLAY

* EXPORTING

* IS_STABLE =

* I_SOFT_REFRESH =

EXCEPTIONS FINISHED = 1

others = 2.

IF SY-SUBRC <> 0.

ENDIF.

ENDIF.

通过CREATE OBJECT来实例化类,在上面的一小段代码中使用了cl_gui_alv_grid的两

个实例方法。第一个便是‘set_table_for_first_display’,他的名字也就说明了他的用途。创

建了alv grid的实例后我们使用这个实例来显示ABAP报表。通过这个方法来传入list data table, field catalog, layout structure以及其他一些信息。下面是帮助文档中这些参数的含义:

Parameter Meaning

I_BUFFER_ACTIVE 如果方法的调用是静态的,这个参数被设置。这意味

着这个方法总是用同样的field catalog来调用。这种情

况下,field catalog被保存到特殊的缓存区域中。这边

加速了列表的显示。

I_STRUCTURE_NAME 要显示的数据表的数据字典结构,如果给了这个参数

field catalog会被自动产生。

IS_VARIANT 决定了数据表格的显示格式。如果用这个参数的话必

须这是结构类型DISVARIANT的REPORT字段。

I_SAVE 决定了用户是否可以保存显示样式:

‘X’: global saving only

‘U’ user-specific saving only

‘A’ corresponds to ‘X’ and ‘U’

SAPCE:no saving

I_DEFAULT 决定了用户是否可以设置缺省的显示样式:

‘X’ default layouts allowed

SPACE default layouts not allowed

如果显示样式已存在并且在IS_LAYOUT中没有其他

的显示样式,在调用这个方法时这个样式将被自动调

IS_LAYOUT 用来决定grid control的属性。它与过滤,排序和字段

的属性无关。

IS_PRINT 与打印相关的参数

IT_SPECIA_GOUPS 在FIELD CATALOG中如果字段被SP_GROUP分组,

你必须为这些组传输一个文本表。通过这个参数你就

可以限制这些组中的某一组的列

IT_TOOLBAR_EXCLUDING 这个表用来包含想在工具条中隐藏某些功能的功能代

码。这些功能代码都是一些常量属性,都以MC_FC_

开头。

IT_HYPERLINK 这个表为每个操作柄(field HANDLE OF

LVC_S_HYPE)提供了一个超级链接(field HREF OF

LVC_S_HYPE)

IT_ALV_GRAPHICS 用来在ALV中显示图片,这个表的行类型有两个字段

(variables/value pairs): PROP_ID:把以

CO_PROP_ID_开头的类CL_ALV_GRAPHICS_CU的