3

我正在开发一个功能模块,以帮助处理嵌入了逻辑的包含文本。在研究 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.

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

4

2 回答 2

3

解释一下实际效果:LIKE通常指右手边的一个数据对象(一个实际变量),而不是一个数据类型。正如您正确地发现的那样,一旦您提供了一个名为的数据对象BOOLEAN,它就会用于构造类型。如果该名称的数据对象不存在并且您不在类或接口中,则会触发该语句的过时变体,该变体LIKE也将数据类型考虑在内,但仅允许右侧的某些元素侧面 - 即只有扁平的结构化对象或其组件。LIKE DATATYPE-BOOLEAN应该工作。像往常一样,错误消息没有什么帮助。

于 2017-01-10T10:59:07.313 回答
0

在我最初的调查中,我似乎错过了该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关键字来使用字典定义。

于 2017-01-10T10:46:00.550 回答