Abap 为什么内置功能模块中允许此结构声明,而新功能模块中不允许此结构声明?
我正在开发一个功能模块,以帮助处理嵌入逻辑的包含文本。在研究SAP处理SAPScript文件和解析逻辑的方式时,我发现了一个声明如下的结构:Abap 为什么内置功能模块中允许此结构声明,而新功能模块中不允许此结构声明?,abap,function-module,Abap,Function Module,我正在开发一个功能模块,以帮助处理嵌入逻辑的包含文本。在研究SAP处理SAPScript文件和解析逻辑的方式时,我发现了一个声明如下的结构: DATA BEGIN OF events OCCURS 100. INCLUDE STRUCTURE ITCCA. DATA: command LIKE BOOLEAN, template LIKE BOOLEAN, mask LIKE BOOLEAN, END OF events. 这显然有效,因为我可以在
DATA BEGIN OF events OCCURS 100.
INCLUDE STRUCTURE ITCCA.
DATA: command LIKE BOOLEAN,
template LIKE BOOLEAN,
mask LIKE BOOLEAN,
END OF events.
这显然有效,因为我可以在它运行打印程序时跟踪它。所以我想我会在我自己的代码中尝试类似的结构,但即使像上面那样复制代码1,我在激活过程中也会出错。错误是
"BOOLEAN" must be a flat structure. Internal tables, references,
strings and structures are forbidden as components.
有人能给我解释一下为什么这个结构在一个程序中有效而不是在我的程序中有效吗?在我最初的调查中,我似乎遗漏了一个布尔类型的声明。在
STXC
函数组中,SAP决定在不同的包含文件中声明自己的布尔变量,如下所示:
data: boolean(1) type c.
DATA BEGIN OF events OCCURS 100.
INCLUDE STRUCTURE ITCCA.
DATA: command TYPE BOOLEAN,
template TYPE BOOLEAN,
mask TYPE BOOLEAN,
END OF events.
我最初假设他们使用字典定义的类型来执行此操作,该类型具有相似的名称,是一个1个字符长的字符串。我还发现,如果我像这样更改我的结构声明:
data: boolean(1) type c.
DATA BEGIN OF events OCCURS 100.
INCLUDE STRUCTURE ITCCA.
DATA: command TYPE BOOLEAN,
template TYPE BOOLEAN,
mask TYPE BOOLEAN,
END OF events.
我的代码将是有效的,因为它将使用字典定义的值。因此,要么我必须为自己定义的
布尔值添加一个声明,这样我就可以使用LIKE
关键字,要么我必须使用TYPE
关键字来使用字典定义。为了解释实际效果:LIKE
通常指的是数据对象(实际变量)在右侧,不是数据类型。正如您正确地发现的,一旦您提供了一个名为BOOLEAN
的数据对象,该对象用于构造类型。如果该名称的数据对象不存在,并且您不在类或接口中,则将触发一个也考虑数据类型的数据对象,但只允许右侧的某些元素,即仅平面结构对象或其组件<像DATATYPE-BOOLEAN一样的code>应该是有效的。与往常一样,错误消息的帮助不大。您在哪里找到了原始代码?它是STXC
功能组的一部分。在我发布这个问题后,我确实找到了一些关于这个的信息。似乎使用LIKE
我必须自己定义布尔值
类型,但是如果我使用类型
,那么它将使用布尔值
的字典值。不知道为什么他们决定自己在原始代码中定义它?谢谢你的解释。作为SAP和ABAP的新手,我发现在理解它的工作原理方面有很多小问题。学会适应它-这种感觉不会很快消失:-)