ABAP程序开始语句(Introductory Statements)(二)——类池,接口池
ABAP开始语句包含以下6种:
|
CLASS-POOL
|
开始一个类池
|
|
开始一个函数组
|
|
|
INTERFACE-POOL
|
开始一个接口池
|
|
开始一个模块池或者子例程池
|
|
|
开始一个可执行程序
|
|
|
开始一个类型池
|
首先类池同接口池一样,它们都是类库中的ABAP程序,他们是在ABAP工作台通过类构建器(se24)被定义,然后以全局类和全局接口成为仓库资源。所以在类池中包含了全局类的定义,在接口池中包含的是全局接口定义,这两种类型的程序都不支持有自己的屏幕。对于类池处理块只有方法,除了全局类,类池中可以包含局部类。
类池类型的程序可以使用语句CLASS-POOL开始, 接口池类型的程序可以使用语句INTERFACE-POOL,这些语句都是通过类构建器生成的。另外每个类池或者接口池只能包含一个全局的类或者一个全局的接口。这些类或接口声明如下:
CLASS...PUBLIC. ...ENDCLASS
INTERFACE...PUBLIC.....ENDINTERFACE
|
|
类池
|
接口池
|
|
语法
|
CLASS-POOL [Message-ID id]
|
INTERFACE-POOL
|
|
框架程序命名
|
全局类名字开头,然后用“=”填充到位置30,然后用“CP”字符结束
例如:
全局类CL_ABAP_BROWER的类池中框架程序的命名是CL_ABAP_BROWSER===============CP。
|
以全局接口名字开头,然后用“=”填充到位置30,然后用“IP”字符结束。
例如:
全局接口IF_DEMO_CR_CAR_RENTL_SERVICE的接口池中框架程序的命名是IF_DEMO_CR_CAR_RENTL_SERVICE==IP
|
|
|
||
说明:从包含程序构造的类/接口池的实际结构是ABAP工作台和ABAP运行时环境的内部职责,它在类构建器(se24)中是不显示的。
二者通过各自的语法分别开始一个类池/接口池,他们都是在处理完包含程序后,出现在独立程序中的第一行的。对于在CLASS-POOL后添加MESSAGE-ID和REPOR语句中添加有相同的含义。二者都可以通过ABAP工作台的类构建器(se24)编辑,通过工作台全局类/接口的框架程序(程序的组织)被自动生成,对类池来说相关联的包含程序也会被自动生成。
另外对于类池:
同全局类的声明一样,类池只能包含以下的语句,这些语句声明的类型基本都是在全局类私有可见区域或实现部分使用:
-
使用语句TYPES声明本地数据类型
-
使用语句CONSTANTS声明本地常量
-
使用语句INTERFACE...ENDINTERFACE声明本地接口
-
使用语句CLASS...ENDCLASS声明和实现的本地类
-
使用语句DEFINE...END-OF-DEFINITION定义的宏
在类池局部定义的类型,类,接口可以以下的方式被使用。
-
只有全局类的方法访问本地声明和实现,这是常见的场景,在程序中对本地声明的任何改变不影响全局类的接口。
-
全局类的方法中,类私有部分的声明也引用程序中本地的声明。这是一个不常见的场景,在该场景中对本地声明中的改变影响全局类的接口,在程序重新执行之前会重新编译子类和友类。
对于接口池:
除了全局接口的声明以外,一个接口池不能包含任何它自己的声明或者实现。
类池和接口池程序组织
像任何其他的ABAP程序,类池和接口池由一个为了声明的全局声明部分和一个为了实现或过程步骤的实现部分。
-
类池全局声明部分可以包含局部数据类型的声明,局部接口和局部类,同样也包含全局类的声明部分。
-
一个接口池的全局声明部分可以包含类型组的声明和全局接口的声明。接口池的实现部分总是空的。
-
各种类池或者接口池的声明和实现部分是通过类构建器使用包含程序进行组织。包含程序可以包含如下:
-
在全局类声明部分的每个可见区域。
-
全局类方法的每个实现。
-
局部声明和实现
-
ABAP Unit测试类
类池接口池中的相关限制
-
禁止出现除了方法以外的处理块
-
既不能有如START-OF-SELECTION ,AT SELECTION-SCRREN,GET,或者AT LINE-SELECTION或者对话框模块(使用MODULE-ENDMODULE定义的)这样的事件块。这意味着运行时环境事件是不能被处理的。ABAP对象有它自己的事件概念。也不可以有使用FUNCTION-ENDFUNCTION或者FORM-ENDFORM对函数模块或者子例程的定义。但是类池中方法仍旧可以调用外部的函数模块和子例程,或者方法。
-
禁止出现到其他程序的接口工作区
-
语句TABLES和NODES以及DATA的附加COMMON PART是不允许的。这意味着类池和接口池不支持任何全局数据区域在一个独立的内部模式跨程序。
-
禁止专用的屏幕
-
在其他ABAP程序中用屏幕处理作为实现时不允许的。没有屏幕可以在类池或者接口池中被定义。如果你想使用传统的屏幕,包含选择屏幕,建议把他们封装到函数组。推荐使用其他合适的输出媒介替代传统的列表。对于表列表输出,使用SAP List Viewer (ALV),比如CL_SALV_TABLE。
-
对于简单的文本输出 ,推荐浏览器控件包装器比如动态文档或者文本编辑控件包装器。
-
其他禁止
-
由于定义语句FIELD-GROUPS不能在类池或接口池中出现,额外数据集也不能在全局类中被编辑。

浙公网安备 33010602011771号