Я использую cl_abap_structdescr->get_components
, чтобы получить список полей в структуре. Он отлично работает, когда я использую его на локально объявленных типах структур, но когда я использую его на структурах DDIC, он не дает ожидаемых результатов.
Воспроизводимый пример:
TYPES: BEGIN OF gty_outtab,
infty TYPE infty,
uname TYPE uname,
bdate TYPE datum,
btime TYPE uzeit,
pernr TYPE pernr_d,
opera TYPE hr_opera,
begda TYPE begda,
endda TYPE endda,
END OF gty_outtab.
DATA: lr_infty_structdescr TYPE REF TO cl_abap_structdescr,
lr_outtab_structdescr TYPE REF TO cl_abap_structdescr,
lt_outtab_components TYPE STANDARD TABLE OF abap_componentdescr,
lt_infty_components TYPE STANDARD TABLE OF abap_componentdescr.
" works as expected
lr_outtab_structdescr ?= cl_abap_structdescr=>describe_by_name( 'GTY_OUTTAB' ).
lt_outtab_components = lr_outtab_structdescr->get_components( ).
" doesn't work as expected
lr_infty_structdescr ?= cl_abap_structdescr=>describe_by_name( 'P0008' ).
lt_infty_components = lr_infty_structdescr->get_components( ).
BREAK-POINT.
Результаты:
Это нормально для GTY_OUTTAB:
Есть толькодва поля для P0008
, хотя оно содержит гораздо больше полей (см. ниже):
Я уже пытался использовать cl_abap_typedescr
вместо этого и гуглил, нокаждый код, который я нахожу в Интернете, выглядит так же, как мой?
Вот определение P0008
, которое содержит много полей, которые вы можете видеть: