现有的ABAP文本元素格式正确

时间:2018-09-03 10:32:09

标签: abap

我们正在用Java编写一个用于解析和转换ABAP代码的工具。因此,我们无意编写新的ABAP代码,但我们的工具必须处理所有ABAP,甚至是过时的语句。而且,我不是ABAP专家。

我们有一个ABAP工具,可以提取系统并将其写入XML。该程序没有逻辑,因此我认为XML实际上与系统相对应。

我正在查看通过读取文本池生成的数据。后者由READ TEXTPOOL读取;如果存在,则将属性LANGUIDKEYENTRYLENGTH写入XML。

现在,我看到XML中的文本元素条目似乎违反了ABAP关键字文档中所述的格式。

  • id = I,密钥的长度不为3。尤其是,密钥类似于01100001,SH010001,SF010001

  • id = R,存在密钥。例如:key =“ 027”。我什至看到了一个示例,其中所有属性(但键)都相同。

  • id = S,文本元素既不以" "(八个空格)开头,也不以"D "(“ D”后跟七个空格)开头

  • 文本元素的长度超过了最大长度。我们使用上限H = 255,I = 132,S = 38,R = 70,T = 70。 (在这里,我不确定我们的数字来自哪里)

在转换文本条目时,我们将验证现有的条目,并且不能使用太长的现有条目。有人可以澄清吗?

2 个答案:

答案 0 :(得分:1)

您可以使用READ TEXTPOOL程序名来获取ABAP程序中使用的文本。根据{{​​3}}:

| ID | KEY                                        | ENTRY                       | 
| H  | 001 through 004                            | List header Column headers  | 
| I  | ID of a text symbol                        | Text of the text symbol     | 
| R  | -                                          | Program title               | 
| S  | Name of a parameter or selection criterion | Selection text              | 
| T  | -                                          | List header Title bar       | 
  • id = I,密钥长度不为3。尤其是,密钥类似于01100001, SH010001,SF010001 ->根据上面的定义,它是文本符号的名称,表示:对程序中使用的文本的引用(指向文本)。那么,您从哪里获得length = 3?不能支持这个。

  • id = R,存在密钥。例如:key =“ 027”。我什至看到一个例子 所有属性都是相同的,但关键是相同的。 -> Normalle应该是已执行的程序标题...绝对可以超过3位数字

  • id = S,文本元素都不以“”开头(八个空格) 也不是“ D”(“ D”后跟七个空格) ->其中一些可能是在ABAP中自动生成的,因此命名有些奇怪。

  • 文本元素的长度超过了最大长度。我们使用上限 H = 255,I = 132,S = 38,R = 70,T = 70。 (在这里,我不确定我们的电话号码在哪里 来自) 。 ->文本元素最多可包含255个字符,您可以在abap中看到结构:TEXTPOOL有一个字段:TEXTPOOLTX CHAR 255

我认为这些是要检查的定义:

ID      Type    TEXTPOOLID  CHAR    1
KEY     Type    TEXTPOOLKY  CHAR    8
ENTRY   Type    TEXTPOOLTX  CHAR    255
LENGTH  Type    TEXTPOOLLN  INT4    10

希望这会有所帮助!

答案 1 :(得分:1)

我认为您提到的说明对最近生成的文本池有效,但是在生成XML时可能有一个旧逻辑。

此外,不确定XML是否是READ TEXTPOOL提取的文本池的确切图像,因此很难回答。

最好今天执行READ TEXTPOOL,如果有什么奇怪的事情,也许我们可以进行调查。

关于您现有的XML,只需应用变通方法以获取正确的文本元素:

  • 对于ID ='I'的行,请输入KEY的前3个字符
  • 对于ID ='R'的行,请忽略KEY(并忽略多余的行)
  • 对于ID ='S'的行,尝试查看其他值是对应于文本还是
  • 对于文本元素,我完全同意您提供的长度,但是如果这样做不起作用,则可以根据长度选择文本,也可以采用整个文本,而忽略长度。