Я хочу создать метод функции / пользовательского класса, который принимает 2 параметра:
1) IM_ITAB типа ЛЮБОЙ СТОЛ
2) IM_COMPONENT типа STRING
и возвращает1 параметр:
1) EX_RANGE тип PIQ_SELOPT_T
Итак, алгоритм выглядит так:
- Прежде всего, мы проверяем, если столбец с именем компонента ввсе существует
- Затем мы проверяем, что внутренняя таблица не пуста.
- Затем мы перебираем внутреннюю таблицу, назначающую компонент и заполняем таблицу диапазонов.Код ниже.
METHODS compose_range_from_itab
IMPORTING
IM_ITAB type ANY TABLE
IM_COMPONENT type STRING
EXPORTING
EX_RANGE type PIQ_SELOPT_T.
...
METHOD compose_range_from_itab.
DATA: lo_obj TYPE REF TO cl_abap_tabledescr,
wa_range TYPE selopt,
lt_range TYPE piq_selopt_t.
FIELD-SYMBOLS: <fs_line> TYPE ANY,
<fs_component> TYPE ANY.
lo_obj ?= cl_abap_typedescr=>describe_by_data( p_data = im_itab ).
READ TABLE lo_obj->key TRANSPORTING NO FIELDS WITH KEY name = im_component.
IF sy-subrc IS INITIAL.
IF LINES( im_itab ) GT 0.
LOOP AT im_itab ASSIGNING <fs_line>.
ASSIGN COMPONENT im_component OF STRUCTURE <fs_line> TO <fs_component>.
wa_range-sign = 'I'.
wa_range-option = 'EQ'.
wa_range-low = <fs_component>.
APPEND wa_range TO lt_range.
ENDLOOP.
SORT lt_range BY low.
DELETE ADJACENT DUPLICATES FROM lt_range COMPARING low.
ex_range[] = lt_range[].
ENDIF.
ENDIF.
ENDMETHOD.
Но я хочу улучшить метод дальше.Если импортированная внутренняя таблица имеет, скажем, 255 столбцов, то цикл обработки такой таблицы займет больше времени.Но мне нужен только один столбец для составления диапазона.
Поэтому я хочу получить компоненты внутренней таблицы, затем выбрать только один компонент, создать новый тип строки, содержащий только этот компонент, а затем создать внутреннюю таблицу с этой строкой.введите и скопируйте.
Вот псевдокод, соответствующий тому, чего я хочу достичь:
append corresponding fields of im_itab into new_line_type_internal_table.
Как я могу "вырезать" один компонент и создать новый тип линии, используя RTTS?