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

时间:2017-01-10 10:11:55

标签: sap 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.

这显然有效,因为我可以在运行打印程序时跟踪它。所以我想我会在我自己的代码中尝试类似的结构,但即使我像上面那样复制了代码1,我在激活期间也会遇到错误。错误是

"BOOLEAN" must be a flat structure. Internal tables, references, 
strings and structures are forbidden as components.

有人可以向我解释为什么这个结构在一个程序中有效而不是我的吗?

2 个答案:

答案 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关键字来使用字典定义。