Code: Alles auswählen.
FORM move_corr USING us_in TYPE any CHANGING cs_out TYPE any.
TYPE-POOLS: abap.
DATA:
lx_structdescr TYPE REF TO cl_abap_structdescr.
FIELD-SYMBOLS:
<l_in> TYPE ANY,
<l_out> TYPE ANY,
<ls_component> TYPE abap_compdescr.
lx_structdescr ?= cl_abap_typedescr=>describe_by_data( us_in ).
IF NOT lx_structdescr IS INITIAL.
LOOP AT lx_structdescr->components ASSIGNING <ls_component>.
ASSIGN COMPONENT <ls_component>-name
OF STRUCTURE cs_out TO <l_out>.
CHECK sy-subrc = 0.
ASSIGN COMPONENT <ls_component>-name
OF STRUCTURE us_in TO <l_in>.
CHECK sy-subrc = 0.
MOVE <l_in> TO <l_out>.
ENDLOOP.
ENDIF.
ENDFORM.
Danke!BlackMail hat geschrieben:Du musst wohl mit den RTTI-Klassen arbeiten.
Als Beispiel:Hierbei werden namensgleiche Felder einander zugewiesen. Die Routine müsste aber noch erweitert werden, weil im Moment vorausgesetzt wird, dass zwei Strukturen als Parameter übergeben werden. Außerdem gibt es bei der Zuweisung keine Typprüfung, d.h. wenn es in den Strukturen Komponenten mit gleichem Namen aber unterschiedlichen Typs gibt, erfolgt ein Kurzdump. Also bitte nur als Beispiel verstehen.Code: Alles auswählen.
FORM move_corr USING us_in TYPE any CHANGING cs_out TYPE any. TYPE-POOLS: abap. DATA: lx_structdescr TYPE REF TO cl_abap_structdescr. FIELD-SYMBOLS: <l_in> TYPE ANY, <l_out> TYPE ANY, <ls_component> TYPE abap_compdescr. lx_structdescr ?= cl_abap_typedescr=>describe_by_data( us_in ). IF NOT lx_structdescr IS INITIAL. LOOP AT lx_structdescr->components ASSIGNING <ls_component>. ASSIGN COMPONENT <ls_component>-name OF STRUCTURE cs_out TO <l_out>. CHECK sy-subrc = 0. ASSIGN COMPONENT <ls_component>-name OF STRUCTURE us_in TO <l_in>. CHECK sy-subrc = 0. MOVE <l_in> TO <l_out>. ENDLOOP. ENDIF. ENDFORM.
Gruß BlackMail.