OOALV 容器

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/

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值