CL_ABAP_CORRESPONDING class provides simple methods for field mapping between nested structures.
CODE
DATA: BEGIN OF src,
col1 TYPE string VALUE ‘AA’,
col2 TYPE string VALUE ‘BB’,
BEGIN OF src_1,
col3 TYPE string VALUE ‘AA1’,
col4 TYPE string VALUE ‘BB1’,
BEGIN OF src_2,
col5 TYPE string VALUE ‘AA2’,
col6 TYPE string VALUE ‘BB2’,
END OF src_2,
END OF src_1,
END OF src,
BEGIN OF tgt,
fld1 TYPE string VALUE ‘XX’,
fld2 TYPE string VALUE ‘YY’,
BEGIN OF tgt_1,
fld3 TYPE string VALUE ‘XX1’,
fld4 TYPE string VALUE ‘YY1’,
BEGIN OF tgt_2,
fld5 TYPE string VALUE ‘XX2’,
fld6 TYPE string VALUE ‘YY2’,
END OF tgt_2,
END OF tgt_1,
END OF tgt.
WRITE:/ ‘Source’ COLOR 3.
WRITE:/1 src–col1, 6 src–col2,
11 src–src_1–col3,16 src–src_1–col4,
21 src–src_1–src_2–col5,26 src–src_1–src_2–col6.
WRITE:/ ‘Target’ COLOR 3.
WRITE:/1 tgt–fld1, 6 tgt–fld2,
11 tgt–tgt_1–fld3, 16 tgt–tgt_1–fld4,
21 tgt–tgt_1–tgt_2–fld5,26 tgt–tgt_1–tgt_2–fld6.
” Define the mapping table, here level define the depth of structure fields
DATA(mapping_tab) = VALUE cl_abap_corresponding=>mapping_table(
( level = 0 kind = 1 srcname = ‘COL1’ dstname = ‘FLD2’ )
( level = 0 kind = 1 srcname = ‘COL2’ dstname = ‘FLD1’ )
( level = 0 kind = 1 srcname = ‘SRC_1’ dstname = ‘TGT_1’ )
( level = 1 kind = 1 srcname = ‘COL3’ dstname = ‘FLD3’ )
( level = 1 kind = 1 srcname = ‘COL4’ dstname = ‘FLD4’ )
( level = 1 kind = 1 srcname = ‘SRC_2’ dstname = ‘TGT_2’ )
( level = 2 kind = 1 srcname = ‘COL5’ dstname = ‘FLD6’ )
( level = 2 kind = 1 srcname = ‘COL6’ dstname = ‘FLD5’ ) ).
” Create mapping object from mapping table
DATA(mapper) = cl_abap_corresponding=>create(
source = src
destination = tgt
mapping = mapping_tab ).
” Change the target structure
mapper->execute( EXPORTING source = src
CHANGING destination = tgt ).
WRITE:/ ‘Target After:’ COLOR 3.
WRITE:/1 tgt–fld1, 6 tgt–fld2,
11 tgt–tgt_1–fld3, 16 tgt–tgt_1–fld4,
21 tgt–tgt_1–tgt_2–fld5,26 tgt–tgt_1–tgt_2–fld6.
OUTPUT