我正在使用功能模块来协助处理嵌入逻辑的包含文本。在研究SAP处理SAPScript文件和解析逻辑的方式时,我发现了一个声明为如此的结构:
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.
有人可以向我解释为什么这个结构在一个程序中有效而不是我的吗?
答案 0 :(得分:3)
要解释实际效果:LIKE
通常是指右侧的数据对象(实际变量),不是数据类型 。正如您正确发现的那样,一旦您提供名为BOOLEAN
的数据对象,就会用于构建该类型。如果该名称的数据对象不存在且您不在某个类或接口中,则会触发obsolete variant of the LIKE
statement并考虑数据类型,但仅允许右侧的某些元素 - 手侧 - 即只有扁平结构物体或其组件。 LIKE DATATYPE-BOOLEAN
应该有效。像往常一样,错误信息有点不太有用。
答案 1 :(得分:0)
在我初步调查期间,我似乎错过了BOOLEAN
类型的声明。在STXC
函数组中,SAP决定在不同的包含文件中为boolean声明自己的变量,如下所示:
data: boolean(1) type c.
我最初假设他们使用字典定义类型执行此操作,该类型具有相似的名称并且是1个字符长的字符串。我还发现,如果我要更改我的结构声明:
DATA BEGIN OF events OCCURS 100.
INCLUDE STRUCTURE ITCCA.
DATA: command TYPE BOOLEAN,
template TYPE BOOLEAN,
mask TYPE BOOLEAN,
END OF events.
我的代码有效,因为它会使用字典定义的值。所以要么我必须为我自己的boolean
定义添加声明,以便我可以使用LIKE
关键字,或者我必须使用TYPE
关键字来使用字典定义。