为什么在内置功能模块中允许这种结构声明,而在新功能模块中却不允许?

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 应该有效。与往常一样,错误消息有点用处不大。