существующие текстовые элементы ABAP теперь хорошо сформированы - PullRequest
0 голосов
/ 03 сентября 2018

Мы пишем инструмент на 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, ключ присутствует. Пример: ключ = "027". Я даже вижу пример, где все атрибуты одинаковы, но ключ.

  • id = S, текстовый элемент не начинается ни с " " (восемь пробелов), ни с "D " ("D", за которым следуют семь пробелов)

  • длина текстового элемента превышает максимальную. Мы используем верхние пределы H = 255, I = 132, S = 38, R = 70, T = 70. (Здесь я не уверен, откуда наши номера)

Когда мы преобразуем текстовые записи, мы проверяем существующие и не можем использовать слишком длинные. Может кто-нибудь уточнить?

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Я думаю, что объяснения, которые вы упоминаете, действительны для недавно созданных текстовых пулов, но, возможно, при создании XML существовала старая логика.

Более того, нет уверенности в том, что XML является точным изображением текстового пула, извлеченного READ TEXTPOOL, и поэтому трудно ответить.

Было бы лучше, если бы вы сегодня выполнили READ TEXTPOOL, и если что-то странное, то, возможно, мы сможем расследовать.

Что касается существующего XML, просто примените обходной путь, чтобы получить правильные текстовые элементы:

  • для строк с ID = 'I', возьмите первые 3 символа KEY
  • для строки с ID = 'R', игнорировать KEY (и игнорировать дополнительные строки)
  • для строк с идентификатором = 'S' попытайтесь определить, соответствуют ли другие значения тексту или
  • для текстовых элементов, я полностью согласен с указанными вами длинами, но если это не сработает, то либо возьмите текст на основе длины, либо возьмите весь текст и проигнорируйте длину.
0 голосов
/ 03 сентября 2018

Вы можете использовать READ TEXTPOOL имя программы, чтобы получить тексты, используемые в программах ABAP. Согласно документации ABAP :

| 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 -> в соответствии с приведенным выше определением это имя текстового символа, означает: ссылка на текст, используемый в программе (указывающий на текст). Так откуда у тебя длина = 3? Не могу поддержать это.

  • id = R, ключ присутствует. Пример: ключ = "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

Надеюсь, это поможет!

...