मैंने अपना खुद का कोड तैयार किया है जिसे मैं साझा करना चाहता हूं। यह सही नहीं है, यह जटिल संरचनाओं के साथ काम नहीं करेगा। हालांकि मुझे फ्लैट संरचनाओं पर काम करने के बजाय अभी कुछ और चाहिए नहीं है।
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.
... और एक छोटे से मैक्रो को इसे भाषा निर्माण की तरह कम उपयोग करने के लिए।
DEFINE move_corresponding_ignore_init.
lcl_utilities=>move_corresponding_ignore_init(
exporting
i_str_source = &1
changing
c_str_dest = &2
).
END-OF-DEFINITION.
यदि आप बिना जांच किए जा रहे हैं, तो आप पूरी तरह से l_rcl_abap_typedescr को छोड़ सकते हैं। – vwegert
@vwegert: आप सही हैं। मैंने पहले ही कोडिंग में सुधार किया है। – Jagger