我正在寻找一个语言结构或功能模块MOVE-CORRESPONDING IGNORING INITIALS.简单地说,我想要的东西完全相同MOVE-CORRESPONDING source TO dest但忽略了最初的所有字段source.
有那样的吗?
我已经准备了我自己的一段代码,我想分享一下。它并不完美,不适用于复杂的结构。然而,除了在平面结构上工作之外,我现在不需要任何其他东西。
CLASS lcl_utilities DEFINITION FINAL CREATE PRIVATE.
PUBLIC SECTION.
CLASS-METHODS:
move_corresponding_ignore_init
IMPORTING
i_str_source TYPE any
CHANGING
c_str_dest TYPE any.
ENDCLASS.
CLASS lcl_utilities IMPLEMENTATION.
METHOD move_corresponding_ignore_init.
DATA:
l_rcl_abap_structdescr TYPE REF TO cl_abap_structdescr.
l_rcl_abap_structdescr ?= cl_abap_typedescr=>describe_by_data( i_str_source ).
LOOP AT l_rcl_abap_structdescr->components ASSIGNING FIELD-SYMBOL(<fs_str_component>).
ASSIGN COMPONENT <fs_str_component>-name OF STRUCTURE c_str_dest TO FIELD-SYMBOL(<fs_dest_field>).
IF sy-subrc = 0.
ASSIGN COMPONENT <fs_str_component>-name OF STRUCTURE i_str_source TO FIELD-SYMBOL(<fs_source_field>).
ASSERT sy-subrc = 0.
IF <fs_source_field> IS NOT INITIAL.
<fs_dest_field> = <fs_source_field>.
ENDIF.
ENDIF.
ENDLOOP.
ENDMETHOD. "move_corresponding_ignore_init
ENDCLASS.
Run Code Online (Sandbox Code Playgroud)
...和一个小宏,以便更像一种语言结构来使用它。
DEFINE move_corresponding_ignore_init.
lcl_utilities=>move_corresponding_ignore_init(
exporting
i_str_source = &1
changing
c_str_dest = &2
).
END-OF-DEFINITION.
Run Code Online (Sandbox Code Playgroud)