为什么在内置功能模块中允许这种结构声明,而在新功能模块中却不允许?
Why is this structure declaration allowed in a built-in Function Module but not in a new one?
我正在开发一个功能模块,以协助处理包含嵌入逻辑的文本。在研究 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 for 1,我在激活过程中也会出错。错误是
"BOOLEAN" must be a flat structure. Internal tables, references,
strings and structures are forbidden as components.
谁能给我解释一下为什么这个结构在一个程序中有效,而在我的程序中却无效?
在我最初的调查中,我似乎错过了 BOOLEAN
类型的声明。在 STXC
函数组中,SAP 决定在不同的包含文件中声明自己的布尔变量,如下所示:
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
关键字来使用字典定义。
说明一下实际效果:LIKE
通常是指右边的一个数据对象(实际变量),不是一种数据类型。正如您正确地发现的那样,一旦您提供了一个名为 BOOLEAN
的 数据对象 ,它就会用于构造类型。如果该名称的数据对象不存在并且您不在 class 或接口中,则会触发 obsolete variant of the LIKE
statement 也会考虑数据类型,但只允许某些元素右侧 - 即仅平面结构化对象或其组件。 LIKE DATATYPE-BOOLEAN
应该有效。与往常一样,错误消息有点用处不大。
我正在开发一个功能模块,以协助处理包含嵌入逻辑的文本。在研究 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 for 1,我在激活过程中也会出错。错误是
"BOOLEAN" must be a flat structure. Internal tables, references,
strings and structures are forbidden as components.
谁能给我解释一下为什么这个结构在一个程序中有效,而在我的程序中却无效?
在我最初的调查中,我似乎错过了 BOOLEAN
类型的声明。在 STXC
函数组中,SAP 决定在不同的包含文件中声明自己的布尔变量,如下所示:
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
关键字来使用字典定义。
说明一下实际效果:LIKE
通常是指右边的一个数据对象(实际变量),不是一种数据类型。正如您正确地发现的那样,一旦您提供了一个名为 BOOLEAN
的 数据对象 ,它就会用于构造类型。如果该名称的数据对象不存在并且您不在 class 或接口中,则会触发 obsolete variant of the LIKE
statement 也会考虑数据类型,但只允许某些元素右侧 - 即仅平面结构化对象或其组件。 LIKE DATATYPE-BOOLEAN
应该有效。与往常一样,错误消息有点用处不大。