OOALV 基础知识
一、概要
OOALV也被称为面向对象的ALV(ABAP List Viewer)。
1.ALV的功能
- 排序数据
- 过滤数据
- 变更列宽
- 变更布局
- 下载Excel等文档
2.ALV的类型
- Function ALV
- OOALV
- SALV
- SALV IDA
3.ALV程序的执行顺序
- **定义内表:**定义显示再ALV画面上的内表,存储显示数据;
- 创建屏幕、容器和Grid对象
- 设置画面的字段目录
- 输出内表中的数据
二、SAP 容器
1.创建SAP容器及容器对象
若要显示ALV页面,有三样元素作为支撑。分别是承载容器和组件的屏幕、划分组件区域的容器和用于展示功能的组件。所以要使一个组件完整的运行下来,需要屏幕、容器和组件三样元素。
2.容器类型
类别 | 类名 | 说明 |
---|---|---|
自定义容器 | CL_GUI_CUSTOM_CONTAINER | 在使用屏幕编辑器的一般画面上定义一个特定的领域(需手动画出区域)。 |
对话框控件 | CL_GUI_DIALOGBOX_CONTAINER | 对话框,或者再全画面上以对话框的形式显示。 |
Docking控件 | CL_GUI_DOCKING_CONTAINER | 在屏幕领域的各边角设置的容器,可以调节其大小,是ALV程序开发中经常与自定义控件一起使用的控件。 |
拆分控件 | CL_GUI_SPLITTER_CONTAINER | 可以将容器拆分成几部分。 |
细拆分控件 | CL_GUI_EASY_SPLITTER_CONTAINER | 和拆分控件功能相同,可以再次拆分已经被拆分的容器,在程序中使用 |
三、使用Docking控件创建OOALV示例
1.创建Report程序
(1)通过SE38,输入程序名,点击Create按钮创建程序
(2)输入程序描述,和设置程序类型 1
(3)因为是练习程序,所以一般选择的Package都是本地
2.编写程序履历、主界面和对应Include
(1)创建好程序第一件事是编写程序履历,各个模块的程序履历不一样,所以我的程序履历仅供参考
(2)编写程序主界面、各Include和选择屏幕事件
3.设置展示的结构
(1)本次我们使用 SE11中的 YSFLIGHT表作为展示结构,该表的原型是SE11 中的 SFLIGHT
(2)在名字为YTEST_0614_CYH_TOP的Include中创建如下结构
对该结构说明如下:
- 开头的常量含有一些单个字符例如‘X’ ‘S’ ‘E’等,这些是为了防止Hard Code而设置的。包括下面的一些字段名常量;
- GV_MESSAGE该变量是一个标记字段,用来设置当程序出现异常时的标记变量;
- GV_SAVEOK和OK_CODE该变量是用来设置接收屏幕Function Code的变量,用来判断你在屏幕上点击了哪个按钮;
- 结构体,一般此处用来设置自定义在OOALV 中展示的结构或字段;
- 内表,类似于上面的结构体,用来存放在ALV上展示的数据,但除此之外还有一些用于其他用途的内表,例如GT_FIELDCATALOG,该内表用来存放字段目录中的内容;
- 对象,用来设置屏幕容器或ALV GRID对象或事件对象等。
4.设置选择屏幕
(1)根据需求定义,一般情况下都是涉及的表的主键
以本例为例子,在表YSFLIGHT中的主键有三个,分别是CARRID、CONNID和FLDATE,所以本次就是用这三个字段作为选择屏幕的字段。
(2)选择屏幕的代码一般放在名字带有SCR的Include中
一般为了保持选择屏幕的整洁、可读性一般会使用SELECTION-SCREEN BEGIN OF BLOCK …等语句,将选择屏幕中相关的字段包在一起。
详细的选择屏幕设置详见报表程序篇。
注:此处变量的名字(S_CARRID)不可以超过8个字符,否则会报错。
设置好选择屏幕字段后还需要设置其在选择屏幕上的显示的名字选择GUI 窗口上方的 Goto --> Text Elements --> Selecyion Texts
注:若是进入后没有能设置的字段,有可能是你的程序没有激活,激活后可见
运行后,选择屏幕的展示效果如下
5.创建屏幕和设置屏幕属性
(1)点击Display Object List按钮,或按快捷键C +S + F5
(2)之后左边会出现一个工具栏,整体结构和SE80的结构是一致的
之后再程序名称处右键,选择Create --> Screen
(3)选择好按钮之后,会有一个弹框要求你输入屏幕号
注:此处不能使用屏幕号1000,因为该屏幕号有特殊含义,指的是选择屏幕。
(4)设置屏幕的描述和Element List列表中的内容
设置OK_CODE,有关OK_CODE的相关概念请参考上方的 设置展示的结构 中的内容
6.创建容器和ALV Grid对象
(1)在主程序界面的End-Of-Selection.事件下方调用我们创建好的屏幕0100
(2)双击上方代码中的屏幕号0100,或在左侧的工具栏中点开Screen文件夹,选择0100屏幕。进入屏幕逻辑流界面
(3)在Process Before Output(后简称为PBO)事件下方新建一个MODULE
在程序中填写下面的代码
MODULE INITIAL_0100 OUTPUT.
PERFORE INITIAL_0100.
ENDMODULE.
注:之所以要在此处编写一个PERFORE,是因为在MODULE中定义的所有的变量全部都是全局变量,但是将这些变量放在PERFORE中则会变为局部变量。并且在开发规范中也是要求不允许在MODULE中去定义变量的。
双击该PERFORE的方法名称,创建该PERFORE的FORE到名字带有F01的Include中。然后编写下面的代码。
- CREATE_CONTAINER_ALV:用来创建屏幕容器和ALV GRID对象的Perform;
- GET_FIELDCAT:通过传入的展示画面的结构体获取展示结构属性的Perform;
- SET_FIELDCAT:自定义展示结构的一些属性,例如修改间距,列标题名等;
- REGISTRATION_EVENTS:OOALV事件类注册事件的Perform;
- CALL_ALV_GRID:设置ALV Grid样式、布局、变式和默认展示的按钮以及调用ALV Grid的Perform;
- REFRESH_ALV:刷新ALV Grid的Perform,当每次有变更时,则需要刷新ALV Grid,使变更的内容更新到界面上。
(4)PERFORM CREATE_CONTAINER_ALV
7.设置ALV Grid对象的属性
(1)获取字段目录——GET_FIELDCAT
(2)自定义字段目录,用来设置列名、列宽和布局样式(居左、居中和居右)——SET_FIELDCAT
(3)注册事件类中的事件,本次因为暂不涉及事件类,所以跳过改内容——REGISTRATION_EVENTS
(4)设置ALV GRID对象的布局、变式、默认按钮和调用——CALL_ALV_GRID
设置布局和变式——SET_VARIANT_LAYOUT
设置ALV Grid默认按钮
8.设置GUI Status和GUI Title
(1)和创建屏幕的操作类似,创建GUI Status实际就是创建屏幕的功能按钮
在左侧的工具栏出右键程序名,按照 Create --> GUI Status,创建GUI Status
然后会弹出一个框,设置该GUI Status的名称、描述和类型。名称一般建议以G开头,后跟使用该GUI Status的屏幕号
点击完对勾后,或弹出设置GUI Status的页面,设置GUI Status其实就是设置页面上的按钮,详见下图
固定的按钮设置是最下面的设置退出按钮的一栏,可参考下面的图片内容进行设置
注:三个按钮都需要设置为“E”类型,代表是退出按钮。设置成该类型是因为当我们在屏幕中设置了必输字段后,必输字段的校验不会影响E类型退出屏幕的按钮逻辑。若不设置为“E”类型按钮,则这三个按钮与普通的逻辑按钮为同一优先级,当存在必输字段时,屏幕会要求先输入完必输字段和其他的校验逻辑后,参允许点击其他的按钮。这样一来与退出按钮的实际应用不相符,所以需要将这三个退出按钮设置为“E”类型。
设置完成后激活,可以在左侧的工具栏中看到新增了一个GUI Status的文件夹。
(2)同上,创建好的GUI Title其实就是在该页面开头展示的标题内容
点击GUI Title按钮后,会弹出设置GUI Title名称和显示的Title内容的弹框,如下所示
点击绿色的对勾按钮,可以在左侧的工具栏中看到多了一个GUI Title的文件夹
(3)将GUI Status和GUI Title与屏幕绑定
打开“100”屏幕的逻辑流界面,在左侧工具栏展开Screen的文件夹,双击0100屏幕号。将该Module前面的“*”号删除,然后双击该Module的名称,创建该Module到PBO Include中。
该Module创建好后,会有系统生成好两行设置GUI Status和GUI Title的代码。将我们刚刚设置好的GUI Status和GUI Title的名字填充在这,完成绑定。
9.设置屏幕初始化内容
详细的初始化内容在上面的第6和7项已经讲过了,此处补充以下,当屏幕的容器和ALV Grid对象创建好后,调用的REFRESH_ALV Perform的内容在此处展示。这段刷新方法也是固定的写法,可以用作模板。
(1)REFRESH_ALV
10.设置退出屏幕的逻辑
同上面开始操作一样,打开0100屏幕的逻辑流界面,在 PROCESS AFTER INPUT. 下面创建一个Module。
双击该Module 的名字 EXIT。将该Module 创建在PAI中。
Perfrom中的内容如下。该Perfrom也是固定写法,可用作模板。
11.展示屏幕效果
在主程序界面(左侧工具栏双击程序名)的START-OF-SELECTION 事件下编写获取数据的逻辑。
展示效果如下:
更多技术内容可以来看我的个人博客:https://www.yemaojun.top/