Как узнать, является ли переменная структурной или скалярной? - PullRequest
0 голосов
/ 06 марта 2020

Сейчас я работаю над одним отчетом ABAP, в котором пользователь помещает имя своего отчета ABAP, и мой отчет должен проверить соглашение об именах.

По сути, это проверка рекомендаций по кодированию.

В моем В команде существует соглашение об именах, которое говорит, например, что DATA: table TYPE STANDARD TABLE OF spfli неверно, правильная форма должна быть DATA: lt_table TYPE STANDARD TABLE OF spfli.

Я знаю, что в этом конкретном c случае я могу поставить lt_ перед именем переменной, потому что есть TYPE STANDARD TABLE.

Вот краткий код, как я это решаю.

Source code

Output

Что я ' Я делаю так, что я читаю исходный код в таблицу строк, затем я зацикливаюсь в этой таблице с исходным кодом, и у меня есть условие, что если строка содержит строку DATA TEXT_TAB TYPE STANDARD TABLE OF или LIKE TABLE OF et c. затем разделите эту строку на 3 переменные; первый будет содержать DATA, второй будет содержать TEXT_TAB (в основном имя переменной), а третий будет содержать остальную часть объявления данных LIKE TABLE OF. Затем я добавляю префикс и строку таблицы и объединяю все вместе DATA LT_TEXT_TABLE LIKE TABLE OF TEXT. «Это не глупо, если это работает»: D

Теперь у меня проблема, когда дело доходит до переменных. Например:

DATA: variable01 TYPE string,
      variable02 TYPE spfli.

Они выглядят одинаково, но один является переменной, а другой является структурой / рабочей областью.

Мой вопрос ... Как узнать, является ли следующая переменная структурой или переменной? ?

Я знаю, что есть класс cl_abap_typedescr с методом, но он не работает с READ REPORT.

Подробнее ... У меня есть отчет о тестировании

REPORT ZMH_TEST_SOURCE_CODE.


DATA string01 TYPE string.
DATA: string02 TYPE string,
      string03 TYPE string.
data class04 TYPE REF TO ZMH_CR_CL_SPPM.
data class05 LIKE class04.
DATA: class06 TYPE REF TO ZMH_CR_CL_SPPM.
DATA: table07 TYPE STANDARD TABLE OF spfli,
      table08 TYPE STANDARD TABLE OF spfli,
      table09 TYPE STANDARD TABLE OF spfli,
      table10 TYPE STANDARD TABLE OF spfli.
DATA: lt_table11 TYPE STANDARD TABLE OF spfli,
      lt_table12 TYPE STANDARD TABLE OF spfli.
DATA structure13 LIKE LINE OF table07.
data structure14 LIKE REF TO class05.


CONSTANTS constant15 TYPE i VALUE '13'.
CONSTANTS: constant16 TYPE i VALUE '14'.
DATA text(10) TYPE c.
DATA text_tab LIKE TABLE OF text.

И пока мой вывод отчета по соглашению об именах

Row:30 DATA LT_TEXT_TAB LIKE TABLE OF TEXT.
Row:17 DATA: LT_TABLE07 TYPE STANDARD TABLE OF SPFLI,
Row:18 LT_TABLE08 TYPE STANDARD TABLE OF SPFLI,
Row:19 LT_TABLE09 TYPE STANDARD TABLE OF SPFLI,
Row:20 LT_TABLE10 TYPE STANDARD TABLE OF SPFLI.
Row:24 DATA LO_STRUCTURE14 LIKE REF TO CLASS05.
Row:14 DATA LO_CLASS04 TYPE REF TO ZMH_CR_CL_SPPM.
Row:16 DATA: LO_CLASS06 TYPE REF TO ZMH_CR_CL_SPPM.
Row:27  CONSTANTS LC_CONSTANT15 TYPE I VALUE '13'.
Row:28  CONSTANTS: LC_CONSTANT16 TYPE I VALUE '14'.
Row:23 DATA WA_STRUCTURE13 LIKE LINE OF TABLE07.

Спасибо.

1 Ответ

0 голосов
/ 06 марта 2020

Ваша проблема слишком глубока для обработки мелкой строки. Добавьте SCAN ABAP-SOURCE к изображению, чтобы получить больше информации о том, что означают отдельные токены в ваших утверждениях.

...