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 2004平台中发布了集合

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 菜单就可以使用标准程序的综合功能。

                          

SAP ABAP开发从入门到精通——第15章 面向对象ALV_第1张图片

 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。

SAP ABAP开发从入门到精通——第15章 面向对象ALV_第2张图片

15.1.4 ALV GRID 容器结构

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

SAP ABAP开发从入门到精通——第15章 面向对象ALV_第3张图片

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

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

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

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

SAP ABAP开发从入门到精通——第15章 面向对象ALV_第4张图片

为了显示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容器种类

SAP ABAP开发从入门到精通——第15章 面向对象ALV_第5张图片

容 器 类 型 功                能
SAP 自定控件

在使用屏幕编辑器的一般画面上定义领域

类:CL_GUI_CUSTOM_CONTAINER

SAP 对话框控件

对话框或者在全画面上以对话框形式显示

类:CL_GUI_DILGONBOX_CONTAINER

SAP Docking 控件

在画面领域的各边角可以调节其大小。是在ALV程序中经常与自定义控件一起使用的形态

类:CL_GUI_DOCKING_CONTAINER

SAP 拆分控件

拆分容器时使用

类:CL_GUI_SPLITTER_CONTAINER

SAP 细拆分控件

和Splitter控件功能相同,可以再拆分已被拆分的容器

类:CL_GUI_EASY_SPLITTER_CONTAINER

本章重点学习这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_ref
    EXPORTING
    container_name = 'CON1'.

3.创建ALV GRID 控件

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

    CREATE OBJECT G_GRID
        EXPORTING
            i_parent = con1_ref.
    ENDIF.
    ENDMODULE.

4.查询数据

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

    SELECT * FROM sflight
        INTO 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_display
            EXPORTING
                I_STRUCTURE_NAME='SFLIGHT'
            CHANGING
                it_OUTTAB=gt_sflight.
                

6.执行程序

15.3.2 利用Docking容器创建程序

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

SAP ABAP开发从入门到精通——第15章 面向对象ALV_第6张图片

除了决定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_GOCKING
        EXPROTING
            REPID=SY-REPID
            DYNNER=SY-DYNNR
            EXTENSION=800."显示宽度

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

    CREATE OBJECT G_GRID
        EXPORTING
            I_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->set_table_for_first_display
        EXPORTING
            I_STRUCTURE_NAME            =
            IS_VARIANT                  =
            I_SAVE                      =
            I_DEFAULT                   =
            IS_LAYOUT                   =
            IS_PRINT                    =
            IT_SPECIAL_GROUPS           =
            IT_TOOLBAR_EXCLUDING        =
        CHANGING
            IT_OUTTAB                   =
            IT_FIELDCATALOG             =
            IT_SORT                     =
            IT_FILTER                   =

下面仔细观察一下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_display
        EXPORTING
            I_STRUCTURE_NAME = 'SFLIGHT'
        CHANGING
            IT_OUTTAB = GT_SFLIGHT.

2. IS_VARIANT 参数

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

3. I_SAVE 参数

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

功        能
X 只能保存全局布局
U 只能保存自定义布局
A 同时包含X和U
SPACE 不保存布局

4.I_DEFAULT 参数

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

功        能
X 可以设置默认变式
SPACE 不能设置默认变式

5.IS_LAYOUT 参数

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

字   段 描    述 目    的
CTAB_FNAME 指定字段列颜色 颜色
CWIDTH_OPT 自动调整列宽 GRID属性
DFTAILINIT 决定是否在详细画面显示初始值 Interaction
DFTAILTITL 显示详细画面的标题栏 Interaction
EXCP_CONDS 显示例外处理字段Sub Total Exeptions
EXCP_FNAME 显示例外处理字段 Exeptions
EXCP_LED 例外处理字段不用信号灯显示,而是用LED Exeptions
EXCP_ROLLN 显示关于例外处理字段的帮助 Exeptions
GRID_TITLE 指定标题栏的描述 GRID 属性
INFO_FNAME 指定行颜色 颜色
KEYHOT 指定以HOTSOPOT显示的主键 Interaction
NO_HEADERS

不显示字段标题

GRID 属性
NO_HGRIDLN 不显示GRID的水平线 GRID 属性
NO_MERGING 排序字段时防止合并相同值的列 GRID 属性
NO_ROWMARK

删除GRID的行选择按钮

SEL_MODE='D'时删除行选择按钮

SEL_MODE=‘A’时删除字段/行按钮

GRID 属性
NO_TOOLBAR 不显示工具栏 GRID 属性
NO_TOTLINE 不显示所有行 Total选项
NO_VGRIDLN 不显示Grid的垂直线 GRID 属性
NUM_TOTAL 显示NUMC字段的合计金额 Total选项
S_DRAGDROP

设置Drag & Drop控件

(复制,移动行的功能)

Interaction
SEL_MODE

设置选择模式

(A,B,C,D,SPACE)

GRID 属性
SGL_CLK_HD 单击字段标题时进行排序 Interaction
SMALLTITLE 决定标题大小 GRID 属性
TOTALS_BEF 合计金额显示在最上行 Total选项
ZEBRA 变换行颜色 颜色

设置几个布局属性后进行测试,其他的参数可以通过练习掌握功能,生成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设置以排序字段为基准显示合计金额和全体合计金额。

属   性 说    明
SPOS 数字 指定排列顺序
FIELDNAME 字段名 指定需要排序的字段名
UP “,‘X’ 升序排序
DOWN “,‘X’ 降序排序

15.4.2 ALV 其他方法

1. get_current_cell 方法

你可能感兴趣的:(abap,sap)