900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > SAP ABAP开发从入门到精通——第15章 面向对象ALV

SAP ABAP开发从入门到精通——第15章 面向对象ALV

时间:2019-12-29 12:12:46

相关推荐

SAP ABAP开发从入门到精通——第15章 面向对象ALV

目录

15.1概要

15.1.1 什么是ALV

ALV的主要功能

15.1.2 ALV的类型

15.1.3 ALV GRID容器接口

15.1.4 ALV GRID 容器结构

15.2 SAP容器

15.2.1 创建SAP容器及容器对象

15.3 创建ALV

15.3.1 创建ALV GRID 容器

1. 创建参照变量

2.创建SAP容器

3.创建ALV GRID 控件

4.查询数据

5.调用ALV显示方法

6.执行程序

15.3.2 利用Docking容器创建程序

15.4 ALV方法

15.4.1 set_table_for_first_display方法

1. I_STRUCTURE_NAME 参数

2. IS_VARIANT 参数

3. I_SAVE 参数

4.I_DEFAULT 参数

5.IS_LAYOUT 参数

6.IT_OUTTAB 参数

7.IT_FIELDCATALOG 参数

8.IT_TOOLBAR_EXCLUDING 参数

9.IT_SORT 参数

15.4.2 ALV 其他方法

1. get_current_cell 方法

目录

15.1概要

15.1.1 什么是ALV

ALV的主要功能

15.1.2 ALV的类型

15.1.3 ALV GRID容器接口

15.1概要

15.1.1 什么是ALV

ALV是ABAP List Viewer的缩写,是实际业务中查询数据或修改数据是经常使用的程序。“第 12 章 报表程序”中是使用WRITE语句制作了报表程序。面向对象程序中为了追加下载数据的功能,首先要创建GUI STATUS,从而在画面中增加按钮,

然后实现用户单击按钮时触发事件。但是ALV已经提供了包含这些基本业务的程序包。即在Excel程序中,排序数据,计算合计,筛选信息等基本功能不用通过代码也能自由地实现。

ALV的主要功能

排序功能过滤设置变更列管变更布局ABC分析下载Excel及Word文档的保存。

ALV在SAP Release3.1版本以后开始出现在ABAP程序中,最近除报告书,成绩表等有固定样式的文档程序基本使用ALV进行开发

15.1.2 ALV的类型

ALV分为利用函数的方法利用GRID控件的方法两种,两种方法内部含有相似的结构和功能,当然也存在SALV(New ALV)。这些技术出现的顺序依次为Function ALV > GRID ALV > SALV。REUSE_ALV_GRID_DISPLAY函数也以类为基础

但是SAP公司为了提供方便集合了多样的功能使用功能函数实现。若利用函数输出ALV程序,则不易控制画面。就因为存在这些限制项,从SAP Release3.1版本开始导入了利用ABAP对象的ALV GRID技术。另外,Net Web 平台中发布了集合

ALV功能的SALV包(SALV也称为 New ALV)。SALV可以像使用函数生成ALV一样不适用画面以全屏模式输出,也可以利用容器在画面上显示ALV。利用GRID的ALV不能以Batch Job登录后再后台运行,但SALV可正常运行。SALV与现有方法相比

为开发提供了便利,集合了详细功能以接口方式提供。但是SALV的唯一缺点就是不支持编辑模式。

利用ALV,只要运用数据结构和内标就可以在短时间内开发报表。Function ALV在第16章进行介绍。ALV GRID是以类开发的技术,因此需要掌握“第 14 章 ABAP 对象”的知识。

下图是用ALV查询列表的画面。ALV GRID 使用 SAP 公司开发的控件技术。与其他很多容器相同,ALV GRID 容器提供可以通过全局类影响属性的方法,通过这些方法可以为程序包ALV基本功能基础上适用追加项。另外 ALV GRID 容器定义 SAP

Context 菜单就可以使用标准程序的综合功能。

15.1.3 ALV GRID容器接口

ALV 程序中使用的接口由参照CL_GUI_ALV_GRID类的变量定义。用下列语句定义对象引用变量。

DATA : name TYPE RET TO cl_gui_alv_grid.

上面语句的name变量是参照CL_GUI_ALV_GRIDE的对象引用变量(Object Reference Variable)。

另外,用CREATE OBJECT 语句调用类的构造函数并生成ALV GRID接口

CREATE OBJECT name.

ALV GRID 容器中拥有画面显示的所有信息,调用类方法可以重新定义或修改ALV画面属性。

下图说明了ALV的继承树。在类生成器T-CODE:SE24中查询CL_GUI_ALV_GRID可以发现Supper class字段上面存在超级类。还可以看出CL_GUI_ALV_GRID的超级类是CL_GUI_ALV_OBJECT。

15.1.4 ALV GRID 容器结构

下图说明了ALV GRID 显示在画面的顺序。

要利用ALV显示数据,至少要经过下列两个步骤。

定义内表:定义显示在画面上的内表。在ALV上存储数据信息的内表叫输出表(Output Table)。数据结构(字段目录):定义ALV GRID容器显示在画面上的结构。即拥有如ALV GRID容器中定义的数据结构,技术属性,描述等信息。一般利用ABAP数据字典的表,结构体或者直接使用内表结构。

只要启动ALV GRID,则传递给ALV GRID容器中的输出表一直有效。输出表可以利用ABAP数据字典对象,但也可以只用字段目录创建ALV结构。字段目录(Field CataLog)是存储要显示在ALV画面上的字段信息的表。例如,定义ALV字段的类型,属性,长度等。

字段目录是LVC_T_FCAT类型的表。下图显示生成ALV画面之前的内部结构顺序。

为了显示ALV实例到画面,首先要定义ALV领域,可以利用屏幕编辑器的自定义控件设置。另外,显示ALV必须要有连接屏幕领域与ALV的SAP容器控件。ALV是与画面的SAP控件相连后显示在画面上的。控件从“Containe”单词可以看出是代表给画面“装什么”的意思。即容器时在画面上显示类似于 Textedit,Picture等控件对象时使用的上级控件。在第二节中会详细介绍SAP容器。

15.2 SAP容器

15.2.1 创建SAP容器及容器对象

若要显示ALV画面,必须要有连接屏幕与ALV GRID控件的SAP容器控件。即SAP容器为了充当连接器,将SAP控件包含在容器中。SAP容器类型有SAP Tree,SAP Picture,SAP Textedit,SAP Splitter控件等。SAP容器时包含其他控件的控件,也称为父控件(Parent Control)。

下图中的容器控件为基础创建ALV程序。能显示这些SAP控件的SAP容器种类

本章重点学习这5种类型中的SAP自定义控件。另外,在实际也去中也经常使用SAP Docking容器,因此先简单了解基本结构后做实际练习。此外,容器的基本原理都相似,因此只要掌握其使用方法就不难理解。

15.3 创建ALV

15.3.1 创建ALV GRID 容器

1. 创建参照变量

创建屏幕,利用屏幕编辑器追加自定义控件CON1。然后追加创建参照ALV GRID 容器的引用变量,与此同时创建要显示在屏幕上的内表。

REPORT z15_02.DATA : con1_ref TYPE REF TO CL_GUI_CUSTOM_CONTAINER.DATA : G_GRID TYPE REF TO CL_GUI_ALV_GRID.DATA : GT_SFLIGHT TYPE TABLE OF SFLIGHT.

2.创建SAP容器

在屏幕上创建适当大小的自定义控件。另外,在PBO模块init_con中追加下列代码后创建SAP容器。CREATE OBJECT语句会调用类CL_GUI_CUSTOM_CONTAINER的构造函数,创建SAP容器的实例。此时,参数指定屏幕上创建的自定义控件。

IF~is initial.语句的内容意味着已经创建容器对象不重复创建。例如,ALV GRID已经显示在画面上,当用户点击REFRESH按钮要重新刷新画面时没有必要重新创建实例。

MODULE init_con OUTPUT.IF con1_ref is initial.CREATE OBJECT con1_refEXPORTINGcontainer_name = 'CON1'.

3.创建ALV GRID 控件

利用CREATE OBJECT 语句创建参照CL_GUI_ALV_GRID控件实例。参数i_parent为了显示ALV指定连接屏幕时使用的SAP容器。

CREATE OBJECT G_GRIDEXPORTINGi_parent = con1_ref.ENDIF.ENDMODULE.

4.查询数据

在主程序中追加执行事件START-OF-SELECTION来查询数据。然后调用存在自定义控件的屏幕。

SELECT * FROM sflightINTO TABLE gt_sflight UP TO 25 ROWS.CALL SCREEN 100.

5.调用ALV显示方法

只要调用显示ALV的G_GRID方法就可以很简单地结束ALV画面。此时,参数利用SFLIGHT结构体要显示在画面上的数据使用内表gt_sflight。在MODULE init_con最后追加下面代码

CALL METHOD g_grid->set_table_for_first_displayEXPORTINGI_STRUCTURE_NAME='SFLIGHT'CHANGINGit_OUTTAB=gt_sflight.

6.执行程序

15.3.2 利用Docking容器创建程序

自定义容器是在画面指定领域,于此相反Docking容器是创建实例时直接直接指定屏幕和大小。即就如Docking单词的本意一样,不用通过自定义容器直接指定ALV要使用的领域和屏幕编号。下图为Docking容器的结构

除了决定SAP容器的类不同和不指定屏幕领域这两点之外,其他使用方法和自定义控件相似。首先,定义参照Docking容器的类型参照对象和ALV实例。

DATA:G_DOCKING TYPE REF TO CL_GUI_DOCKING_CONTAINER,G_GRID TUPE REF TO CL_GUI_ALV_GRID.

利用CREATE OBJECT语句调用类cl_gui_docking_container的构造函数创建g_docking实例。但是创建Docking容器组件时参数还需要指定程序编号sy-repid和屏幕编号sy-dynnr。

CREATE OBJECT G_GOCKINGEXPROTINGREPID=SY-REPIDDYNNER=SY-DYNNREXTENSION=800."显示宽度

利用CREATE OBJECT语句创建参照CL_GUI_ALV_GRID的ALV GRID控件实例。然后创建ALV GRID控件实例的同时连接Docking容器。

CREATE OBJECT G_GRIDEXPORTINGI_PARENT = G_DOCKING.

15.4 ALV方法

本章介绍ALV中经常用到的方法。前面已经介绍方法决定对象的行为即ALV方法管理ALV行为。

15.4.1 set_table_for_first_display方法

set_table_for_first_display是 ALV GRID 控件实例显示在输出列表时最基本,最重要的方法。调用方法时需要参照ABAP数据字典的结构或者需要定义字段目录。前者指的是如前面实例中的EXPORTING I_STRUCTURE_NAME='SFLIGHT'所示,参照SFLIGHT表一样的结构,后者指的是在代码中直接构成ALV字段。另外,调用set_table_for_first_display方法时在运行程序之前可以排序或者过滤字段,如下图语句所示

CALL METHOD<ref.var.to CL_GUI_ALV_GRID>->set_table_for_first_displayEXPORTINGI_STRUCTURE_NAME =<string of type DD02L-TABNAME>IS_VARIANT =<structure of type DISVARIANT>I_SAVE =<var.of TYPE cHAR01>I_DEFAULT =<var.of TYPE cHAR01>IS_LAYOUT =<structure of type LVC_S_LAYO>IS_PRINT=<structure of type LVC_S_PRNT>IT_SPECIAL_GROUPS =<internal table of type LVC_T_SGRP>IT_TOOLBAR_EXCLUDING =<internal table of type UI_FUNCTIONS>CHANGINGIT_OUTTAB =<internal table>IT_FIELDCATALOG =<internal table of type LVC_T_FCAT>IT_SORT =<internal table of type LVC_T_SORT>IT_FILTER =<internal table of type LVC_T_FILT>

下面仔细观察一下set_table_for_first_display 方法中要使用的参数和属性。

1. I_STRUCTURE_NAME 参数

为了制作输出表的形式输入类似于SFLIGHT的一样的ABAP数据字典结构体名字。只要设置这个参数会自动生成符合此结构体的字段目录。即在程序内部没有必要重新构成字段目录。

DATA : g_g_grid TYPE REF TO cl_gui_alv_grid.gt_sflight TYPE TABLE OF sflight.CALL METHOD g_grid->set_table_for_first_displayEXPORTINGI_STRUCTURE_NAME = 'SFLIGHT'CHANGINGIT_OUTTAB = GT_SFLIGHT.

2. IS_VARIANT 参数

可以设置ALV列表变式(Variant)。列表变式把修改的画面字段顺序、排列字段等操作保存成一个变式,以便以后查询时以同样式显示。首先需要在报表程序中追加用于选择布局的参数及功能。

3. I_SAVE 参数

函数set_table_for_first_display的参数I_SAVE已经在前面讲述,因此下面简单整理一下相关值

4.I_DEFAULT 参数

决定用户是否能保存默认变式。

5.IS_LAYOUT 参数

利用IS_LAYOUT 参数可以定义ALV GRID控件的画面属性,如设置合计金额或者以条纹形式显示等。布局是LVC_S_LAYO类型的结构体。此结构体可以在T-CODE:SE11中查询

设置几个布局属性后进行测试,其他的参数可以通过练习掌握功能,生成LVC_S_LAYO类型的变量。

6.IT_OUTTAB 参数

IT_OUTTAB 参数是定义要显示数据的输出表的参数。换句话说是指定包含要显示数据的内表参数。

7.IT_FIELDCATALOG 参数

决定要显示的数据类型及输出表结构。

8.IT_TOOLBAR_EXCLUDING 参数

在ALV GRID控件中有需要隐藏按钮时使用。先定义ui_funcionts 类型的内表,然后把此Function代码插入到此表中,则相应按钮就会隐藏

9.IT_SORT 参数

设置ALV数据排列顺序的参数。定义参照LVC_T_SORT类型的内表后,加入要用于排序的字段到此表中杰克。LVC_T_SORT中T指的是表,LVC_S_SORT指的是结构体。排序表的选项中Subtot设置以排序字段为基准显示合计金额和全体合计金额。

15.4.2 ALV 其他方法

1. get_current_cell 方法

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。