У меня есть входящая глубокая структура в моем рекурсивном методе, который содержит структуры и таблицы, поэтому я работаю с RTTI, чтобы проверить тип, перебрать его и выполнить свою операцию, если я нашел конкретный компонент.
Если текущий компонент является структурой или таблицей, метод вызывает сам себя.
Проблема: импортирую структуру с типом any. Все идет нормально. И я хочу также экспортировать это как тип.
И вот я борюсь.
Как я могу назначить отредактированную глубинную структуру моему параметру экспорта?
METHOD process_input.
DATA: lo_type_descr TYPE REF TO cl_abap_typedescr,
lo_struct_descr TYPE REF TO cl_abap_structdescr,
lv_comp_found TYPE abap_bool.
FIELD-SYMBOLS: <fs_table> TYPE ANY TABLE,
<fs_value> TYPE any.
lo_type_descr ?= cl_abap_typedescr=>describe_by_data( p_data = im_input ).
IF lo_type_descr->type_kind EQ cl_abap_typedescr=>typekind_struct2 OR
lo_type_descr->type_kind EQ cl_abap_typedescr=>typekind_struct1.
lo_struct_descr ?= cl_abap_structdescr=>describe_by_data( p_data = im_input ).
LOOP AT lo_struct_descr->components ASSIGNING FIELD-SYMBOL(<fs_comp>).
ASSIGN COMPONENT sy-tabix OF STRUCTURE im_input TO <fs_value>.
lo_type_descr ?= cl_abap_typedescr=>describe_by_data( p_data = <fs_value> ).
lv_comp_found = abap_false.
IF lo_type_descr->type_kind EQ cl_abap_typedescr=>typekind_struct2 OR
lo_type_descr->type_kind EQ cl_abap_typedescr=>typekind_struct1 OR
lo_type_descr->type_kind EQ cl_abap_typedescr=>typekind_table.
process_input(
EXPORTING
im_input = <fs_value>
im_list = im_list
).
ELSE.
READ TABLE im_list INTO DATA(element) WITH KEY service_part = <fs_comp>-name BINARY SEARCH.
IF sy-subrc EQ 0.
<fs_value> = 'TEST :)'.
ENDIF.
ENDIF.
ENDLOOP.
ELSEIF lo_type_descr->type_kind EQ cl_abap_typedescr=>typekind_table.
ASSIGN im_input TO <fs_table>.
LOOP AT <fs_table> ASSIGNING FIELD-SYMBOL(<fs_tab_index>).
lo_struct_descr ?= cl_abap_structdescr=>describe_by_data( p_data = <fs_tab_index> ).
LOOP AT lo_struct_descr->components ASSIGNING <fs_comp>.
ASSIGN COMPONENT sy-tabix OF STRUCTURE <fs_tab_index> TO <fs_value>.
lo_type_descr ?= cl_abap_typedescr=>describe_by_data( p_data = <fs_value> ).
lv_comp_found = abap_false.
IF lo_type_descr->type_kind EQ cl_abap_typedescr=>typekind_struct2 OR
lo_type_descr->type_kind EQ cl_abap_typedescr=>typekind_struct1 OR
lo_type_descr->type_kind EQ cl_abap_typedescr=>typekind_table.
process_input(
EXPORTING
im_input = <fs_value>
im_list = im_list
).
ELSE.
READ TABLE im_list INTO element WITH KEY service_part = <fs_comp>-name BINARY SEARCH.
IF sy-subrc EQ 0.
<fs_value> = 'TEST :)'.
ENDIF.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDIF.
get REFERENCE OF im_input INTO lv_cont.
ex_input = im_input.
ENDMETHOD.