我想创建一个接受 2 个参数的函数/自定义类方法:
1) IM_ITAB 类型 ANY TABLE
2) IM_COMPONENT 类型字符串
并返回 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 创建新的线型?