我们正在用Java编写一个用于解析和转换ABAP代码的工具。因此,我们无意编写新的ABAP代码,但我们的工具必须处理所有ABAP,甚至是过时的语句。而且,我不是ABAP专家。
我们有一个ABAP工具,可以提取系统并将其写入XML。该程序没有逻辑,因此我认为XML实际上与系统相对应。
我正在查看通过读取文本池生成的数据。后者由READ TEXTPOOL
读取;如果存在,则将属性LANGU
,ID
,KEY
,ENTRY
和LENGTH
写入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。 (在这里,我不确定我们的数字来自哪里)
在转换文本条目时,我们将验证现有的条目,并且不能使用太长的现有条目。有人可以澄清吗?
答案 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,只需应用变通方法以获取正确的文本元素: