Единственный способ заставить это работать — это функция 'DDIF_FIELDINFO_GET'. Он получает имя словарной структуры, таблицы или типа и возвращает список ее полей, а также множество полезных сведений о них, таких как элемент данных поля, описание, длина и т. д. . Вот простой пример:
DATA: lt_fields_info TYPE dfies_tab.
CALL FUNCTION 'DDIF_FIELDINFO_GET'
EXPORTING
tabname = 'MARA'
TABLES
dfies_tab = lt_fields_info[]
EXCEPTIONS
not_found = 1
internal_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Handle errors.
ENDIF.
LOOP AT lt_fields_info[] INTO ls_field_info.
" Dynamically printing the fields' details:
WRITE: / 'Field name: ',
ls_field_info-fieldname,
'Field data element: ',
ls_field_info-rollname,
'Field description: ',
ls_field_info-fieldtext.
ENDLOOP.
Leelaprasad Kolapalli (извините, я не могу понять, как пометить имя пользователя в своем комментарии) предложил использовать функцию 'DD_GET_FIELD_INFO'. К сожалению, для некоторых таблиц DDIC это не сработало без видимых причин. Это побудило меня поискать в Google похожую функцию, а затем я нашел лучшую. К сожалению, обе функции не работают с локальными (внутренними) структурами, определенными в классах или включениях, поэтому я не знаю, как получить для них сведения о полях.
Я не мог заставить работать ни один из этих CL_ABAP______DESCR
классов/методов, потому что они либо вызывали ошибку преобразования, либо вообще не сообщали мне имя поля. Они сказали мне значение поля и базовый тип, которые НЕ являются тем, что мы с ОП пытаемся получить.
ASSIGN COMPONENT
и все его варианты тоже бесполезны. Я не могу сделать ASSIGN COMPONENT 'MANDT' OF STRUCTURE ...
, потому что не знаю названия поля! В моем конкретном случае на работе я использую позицию поля (индекс) в структуре и команду ASSIGN COMPONENT sy-index OF STRUCTURE ...
.
Я исследовал Интернет и нашел около десяти разных сообщений с множеством вводящих в заблуждение ответов и людей, которые на самом деле не читали вопросы или не понимали их, и я безуспешно пробовал их все, пока не нашел вышеупомянутую функцию. Я надеюсь, что это полезно для всех, поскольку это было полезно для меня.
person
Cuky
schedule
28.09.2017