定义结构的 INCLUDE 和 TYPE 方法
语法结构
INCLUDE { {TYPE struc_type} | {STRUCTURE struc} }
[AS name [RENAMING WITH SUFFIX suffix]].
该语句只能在结构定义中声明,并在 TYPES
、DATA
、CLASS-DATA
和 STATICS
等语句的 BEGIN OF
和 END OF
中添加内容。
它将结构类型 struc_type 或指定位置的结构 struc 的所有组件复制到当前结构定义中。INCLUDE
语句并不创建子结构,这意味着组件被插入,就像它们被单独包括在 INCLUDE
语句中一样。
请注意,特别是在使用语句链(冒号和逗号)时,
INCLUDE
是一个单独的语句,而不是对 DATA、TYPES 等语句的添加。
struc_type 可以是本地结构化类型,全局类或全局接口的可见结构化类型,或 ABAP 字典中的结构。struc 必须是同一程序的结构或全局类或全局接口的可见属性。
由于以下原因,这里描述的 INCLUDE
语句不应该再被使用:
- 如果使用
INCLUDE
语句将更多的结构组件添加到现有的组件中,或者在一个结构中使用多个INCLUDE
语句,这可能会由于命名冲突而产生语法错误。如果在同一个程序中没有定义的结构被包括进来,而这些结构将在以后被改变,这就特别有问题。 - 包含的结构不能不受限制地被处理。
- 对于所包含结构的每个组件,将再次存储必要的元数据,而子结构组件的元数据仅在定义子结构时存储一次。
- 与真正的子结构相反,使用
INCLUDE
包含的结构在嵌入时不能被声明为静态框。
在可能的情况下,应该创建真正的子结构而不是使用 INCLUDE
语句。然而,应该使用附加的后缀重命名,以防止命名冲突。这个建议也适用于 ABAP 字典中结构的包含,特别是数据库表的结构不能包含任何真正的子结构。
- 在 ABAP 对象之外,还可以使用 STRUCTURE 为 struc 指定平面结构、数据库表或 ABAP 字典中的视图。
- 在使用
CONSTANTS
定义的常量结构中,不能使用INCLUDE
包含任何组件,因为这些组件不能被赋予起始值。 - 就其对齐而言,使用
INCLUDE
包含的结构的行为类似于子结构,这意味着对齐间隙可能发生在第一个组件之前或最后一个组件之后。直接声明组件时,不会发生这些情况。 - 使用
INCLUDE
包含的结构由RTTI
类CL_ABAP_STRUCTDESCR
的方法GET_COMPONENTS
处理,处理方式与子结构相同。返回的组件表仅包含包含结构的一行。组件类型由CL_ABAP_STRUCTDESCR
中的对象表示,但AS_INCLUDE
列包含值 “X”。该方法GET_INCLUDED_VIEW_TAB
可用于解析所包含结构的组件。 - 将静态框从一个结构复制到另一个结构时,也会复制其盒装组件属性。
例如在程序中,可以这样使用:
DATA BEGIN OF rec.
INCLUDE STRUCTURE s.
DATA END OF rec.
或者这样:
TYPES: begin of types ty_itab,
<fld1> type <ty1>,
<fld2> type <ty2>.
include type <struc>.
TYPES: End of types ty_itab
... AS name
用法
通过在添加 AS
后指定名称名称,可以使用名称名称一起寻址所包含结构 struc_type 或 struc 的所有组件,或者可以使用结构组件选择器 (-
) 对单个组件进行寻址。名称名称在包含组件的结构中必须是唯一的。这意味着不能有其他组件具有此名称,并且不能在 AS
之后的其他 INCLUDE
语句中指定它。
- 在
AS
之后指定名称的包含组件的寻址方式与寻址为子结构名称的组件的方式相同。 - 使用
AS
名称指定的名称名称仅用作寻址选项,在诸如MOVE-CORRESPONDING
或SELECT INTO
对应 等语句中将被忽略。使用“带后缀重命名”重命名的组件实际上具有此名称,因此不会被忽略。
... RENAMING WITH SUFFIX suffix
... RENAMING WITH SUFFIX suffix
使得每个单独的组件都通过添加扩展后缀来重命名,这可以防止同名组件之间的命名冲突。必须直接指定后缀。
在下面的程序中,通过重复使用结构化类型 t_day
的组件来定义结构周。周的组成部分都处于同一级别,可以按如下方式解决:week-monday-work
, week-monday-free
, week-tuesday-work
等。
TYPES: BEGIN OF t_day,
work TYPE c LENGTH 8,
free TYPE c LENGTH 16,
END OF t_day.
DATA BEGIN OF week.
INCLUDE TYPE t_day AS monday RENAMING WITH SUFFIX _mon.
INCLUDE TYPE t_day AS tuesday RENAMING WITH SUFFIX _tue.
INCLUDE TYPE t_day AS wednesday RENAMING WITH SUFFIX _wed.
...
DATA END OF week.
- 点赞
- 收藏
- 关注作者
评论(0)