OOALV 容器
接着上一篇继续写容器相关的内容,主要介绍了五种容器类型(自定义容器、对话框容器、Docking容器、拆分容器和细拆分容器)与其相关的特性。更多内容可以查看我的个人博客:https://www.yemaojun.top/
一、容器种类介绍
类别 | 类名 | 说明 |
---|---|---|
自定义容器 | CL_GUI_CUSTOM_CONTAINER | 在使用屏幕编辑器的一般画面上定义一个特定的领域(需手动画出区域)。 |
对话框控件 | CL_GUI_DIALOGBOX_CONTAINER | 对话框,或者再全画面上以对话框的形式显示。 |
Docking容器 | CL_GUI_DOCKING_CONTAINER | 在屏幕领域的各边角设置的容器,可以调节其大小,是ALV程序开发中经常与自定义控件一起使用的控件。 |
拆分容器 | CL_GUI_SPLITTER_CONTAINER | 可以将容器拆分成几部分。 |
细拆分容器 | CL_GUI_EASY_SPLITTER_CONTAINER | 和拆分控件功能相同,可以再次拆分已经被拆分的容器,在程序中使用 |
此外还有一个类,名字叫做容器类,是上面这些容器类的父类(CL_GUI_CONTAINER)。
二、注意事项
本次主要介绍容器相关的内容,而这部分的内容主要是在第一章《OOALV 基础知识》的初始化屏幕Model Initial_0100的 From “Create_Container_ALV”中的逻辑。其余部分没有变化。所以主要介绍创建容器From中的内容。其余内容不再复述。
现将公共TOP中的内容展示如下:
三、自定义容器
1.容器类
CL_GUI_CUSTOM_CONTAINER
2.使用过程
(1)创建屏幕0100
此过程在前一章《OOALV基础知识》有介绍,此处就不再赘述
(2)定义容器所需要的变量
- 自定义容器对象变量定义
因为该变量在代码层面只在ALV Grid对象创建时使用,所以写在了局部Form中 “Create_Container_ALV”
(3)屏幕绘制容器
创建好屏幕后点击Layout按钮打开屏幕的绘制界面
选择红框选中的按钮,在屏幕上画出一个区域,该区域就是你在屏幕上的容器区域。
在画完容器区域之后双击你所画的容器,为其起一个名字,这个名字在后面要作为关联的Key使用。
(4)自定义容器对象的创建
"自定义容器对象定义
DATA:
LO_CCONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
"自定义容器创建
CREATE OBJECT LO_CCONTAINER
EXPORTING
CONTAINER_NAME = 'CONTAINER'.
ASSIGN LO_CCONTAINER TO <FO_CONTAINER>.
CHECK <FO_CONTAINER> IS ASSIGNED.
CREATE OBJECT GO_ALV
EXPORTING
I_PARENT = <FO_CONTAINER>.
(5)效果展示
四、自适应容器
1.容器类
CL_GUI_DOCKING_CONTAINER
2.使用过程
(1)创建自适应容器对象
DATA:
LO_DCONTAINER TYPE REF TO CL_GUI_DOCKING_CONTAINER.
CREATE OBJECT LO_DCONTAINER
EXPORTING
REPID = SY-REPID // 当前程序名
DYNNR = SY-DYNNR // 当前屏幕号
EXTENSION = 2000. // 当前长宽
ASSIGN LO_DCONTAINER TO <FO_CONTAINER>.
...
(2)效果展示
五、对话框容器
1.容器类
CL_GUI_DIALOGBOX_CONTAINER
2.注意事项
该容器和上面介绍的两种容器有一定的区别。首先通过名称可以知道该容器是弹出框式的容器。并且没办法绑定GUI Status。在使用过程中也可以不创建屏幕,使用容器父类的静态属性屏幕。这也就是说他所能添加的按钮只能通过事件实现。而且该容器虽然创建出来是一个弹框,但是退出容器的逻辑却需要自己通过事件实现。
3.使用过程
(1)创建对话框容器对象
因为要通过事件实现退出逻辑,所以将其定义为一个全局对象在TOP中。
DATA:
GO_ACONTAINER TYPE REF TO CL_GUI_DIALOGBOX_CONTAINER.
CREATE OBJECT GO_ACONTAINER
EXPORTING
PARENT = CL_GUI_CONTAINER=>SCREEN0 " 容器父类的屏幕静态属性
CAPTION = 'TITLE' " 标题
REPID = SY-REPID " 当前程序名
DYNNR = SY-DYNNR " 当前屏幕号
WIDTH = 600 " 对话框的宽度
HEIGHT = 200 " 对话框的高度
TOP = 60 " 距离顶上的距离
LEFT = 500. " 距离左边的距离
ASSIGN GO_ACONTAINER TO <FO_CONTAINER>.
...
(2)退出事件的实现
(3)事件注册
(4)效果展示
六、拆分容器
1.容器类
CL_GUI_SPLITTER_CONTAINER
2.注意事项
拆分容器无法单独创建,必须存在可以分割的容器才可以创建。而允许被分割的容器就是上面讲述的三种容器。必须先创建好上面的三种容器才可以继续使用和创建拆分容器。
本次在使用拆分容器时,将容器分割为两部分。上部分的容器用于实现了TOP_OF_PAGE事件。下面的容器实现了ALV Grid。所以在此处简单的提一下TOP_OF_PAGE事件。
3.使用过程
(1)创建拆分容器的对象
(2)拆分容器的创建
(3)TOP OF PAGE事件的实现
-
定义TOP OF PAGE事件需要使用的容器和变量
-
TOP_OF_PAGE事件的定义与实现
-
将展示TOP OF PAGE事件的容器分配好,该过程就是上面使用分割容器进行拆分的过程
-
注册TOP OF PAGE事件
(4)效果展示
- 自定义容器
- 自适应容器
- 对话框容器
七、细拆分容器
1.容器类
CL_GUI_EASY_SPLITTER_CONTAINER
2.注意事项
在实际开发过程中,一般拆分容器就已经够用了。所以细拆分容器使用的次数很少。
在我的理解中,细拆分容器是作用在拆分容器上的。但最后经过测试发现细拆分容器也可以作用在其他的容器上。所以具体两者的区别是什么可以作为课下去了解的内容进行探究。
3.使用过程
(1)细拆分对象的创建
在上面拆分容器中我们拆分出来了用于展示TOP OF PAGE的容器,所以我们此次就直接拆分该容器。
(2)效果展示
八、代码参考部分
程序名:YTEST_OOALV_CYH (BIO)
1.选择屏幕
2.主程序
3.自定义屏幕的PBO部分
4.自定义屏幕的PAI部分
5.容器创建From
更多内容可以查看我的个人博客:https://www.yemaojun.top/