刚看到abap的结构体时,感觉它和其它的语言没有什么分别。但是看到include的用法时,我服了,因为很多书都是一笔带过。
include 的主要作用是实现结构体的继承关系,详见如下例子:
"人员结构休类型
TYPES : BEGIN OF personinfo ,
sid TYPE string,
name TYPE string,
END OF personinfo.
"员工信息类型
TYPES : BEGIN OF staffinfo ,
email TYPE string.
INCLUDE TYPE personinfo AS pinfo .
TYPES END OF staffinfo.
通过INCLUDE, staffinfo继承了personinfo的字段。
注意此时的BEGIN OF 和 END OF,都是以"."结束的,是一个完整的语句。中间包含的INCLUDE子句也是完整的语句。其自身的字段,则是BEGIN OF 或 TYPES END OF的组成部分。
因此如下形式也是正确的:
"员工信息类型
TYPES : BEGIN OF staffinfo .
INCLUDE TYPE personinfo AS pinfo .
TYPES : email TYPE string,
END OF staffinfo.
"员工信息类型
TYPES : BEGIN OF staffinfo ,
email TYPE string.
INCLUDE TYPE personinfo AS pinfo .
TYPES : age type i , END OF staffinfo .
DATA luke TYPE staffinfo .
luke- sid = '532525198504040913' .
luke- name = 'luke' .
luke- email = 'luke@sap.com' .
WRITE : / , luke- sid ,luke - name, luke -email .
WRITE : / , luke- pinfo -sid , luke- pinfo -name , luke- email . 这咱语法也是正确的。
考虑一种场景,同时包括相同的类型多次:
"员工信息类型
TYPES : BEGIN OF staffinfo ,
email TYPE string.
INCLUDE TYPE personinfo AS pinfo1 .
INCLUDE TYPE personinfo AS pinfo2 .
TYPES : age type i , END OF staffinfo .
此时 luke- sid 将出现语法错误.解决方案:RENAMING WITH SUFFIX 选项,为其加上后缀。
"员工信息类型
TYPES : BEGIN OF staffinfo ,
email TYPE string.
INCLUDE TYPE personinfo AS pinfo1 RENAMING WITH SUFFIX _pinfo1 .
INCLUDE TYPE personinfo AS pinfo2 RENAMING WITH SUFFIX _pinfo2 .
TYPES : age type i , END OF staffinfo .
DATA luke TYPE staffinfo .
luke- sid_pinfo1 = '532525198504040913' .
luke- name_pinfo1 = 'luke' .
luke- sid_pinfo2 = '532525198504040913_pinfo2' .
luke- name_pinfo2 = 'luke2' .
luke- email = 'luke@sap.com' .
WRITE : / , luke- sid_pinfo1 ,luke - sid_pinfo2, luke -name_pinfo1 , luke- email .
以上部分是使用types声明的,也可以换成data关键字
"人员结构休类型
types : begin of PersonInfo ,
SID type string,
Name type string,
end of PersonInfo.
"员工信息类型
data : BEGIN OF staffinfo ,
email TYPE string.
INCLUDE type PersonInfo as pInfo RENAMING WITH SUFFIX _pinfo .
data : age type i , END OF staffinfo .
DATA luke like staffinfo .
luke- sid_pinfo = '532525198504040913' .
luke- name_pinfo = 'luke' .
luke- pInfo- sid ='' .
luke- email = 'luke@sap.com' .
或
"人员结构休类型
data : begin of PersonInfo ,
SID type string,
Name type string,
end of PersonInfo.
"员工信息类型
data : BEGIN OF staffinfo ,
email TYPE string.
INCLUDE structure PersonInfo as pInfo RENAMING WITH SUFFIX _pinfo.
data : age type i , END OF staffinfo .
DATA luke like staffinfo .
luke- sid_pinfo = '532525198504040913' .
luke- name_pinfo = 'luke' .
luke- pInfo- sid ='' .
luke- email = 'luke@sap.com' .
Structure还可以嵌套其它Structure,如下:
"员工信息类型
data : BEGIN OF staffinfo ,
BEGIN OF birthday ,
Date type d ,
time type t ,
END OF birthday ,
email TYPE string.
INCLUDE type PersonInfo as pInfo RENAMING WITH SUFFIX _pinfo .
data : age type i , END OF staffinfo .
DATA luke like staffinfo .
luke- sid_pinfo = '532525198504040913' .
luke- name_pinfo = 'luke' .
luke- pInfo- sid ='' .
luke- email = 'luke@sap.com' .
luke- birthday- Date ='20120101' .
参考:
http://www.freesaptutorials.com/sap/abap-structures-include/