今天学习一下新语法 CORRESPONDING
效果和move-corresponding 类似
"1.… CORRESPONDING type( [BASE ( base )] struct|itab [mapping] )
TYPES:BEGIN OF ty_data1,
field1 TYPE i,
field2 TYPE i,
END OF ty_data1,
BEGIN OF ty_data2,
field1 TYPE i,
field2 TYPE i,
field3 TYPE i,
END OF ty_data2.
DATA(ls_data1) = VALUE ty_data1(
field1 = 1 field2 = 2
).
DATA(ls_data2) = VALUE ty_data2( field1 = 4 field2 = 5 field3 = 6 ).
"使用 curresponding语句可以:
ls_data2 = CORRESPONDING #( ls_data1 ).
WRITE:/ ls_data2-field1,ls_data2-field2,ls_data2-field3.
" 1 2 0 此时 ls_data2-field3 = 0 在赋值过程中被覆盖
ls_data2 = VALUE ty_data2( field1 = 4 field2 = 5 field3 = 6 ).
"
ls_data2 = CORRESPONDING #( BASE ( ls_data2 ) ls_data1 ).
WRITE:/ ls_data2-field1,ls_data2-field2,ls_data2-field3.
"此时 ls_data2-field = 6 未被覆盖
ls_data2 = VALUE ty_data2( field1 = 4 field2 = 5 field3 = 6 ).
"当直接创建LS_DATA3时,未知道ls_data3是什么结构时,#必须未某一结构
DATA(ls_data3) = CORRESPONDING ty_data2( BASE ( ls_data2 ) ls_data1 ).
WRITE:/ ls_data3-field1,ls_data3-field2,ls_data3-field3.
"2.类似于lookup 的功能
TYPES:BEGIN OF ty_data,
key TYPE i,
remarks TYPE char10,
END OF ty_data,
ty_t_data TYPE STANDARD TABLE OF ty_data WITH EMPTY KEY,
ty_hashed_t_data TYPE HASHED TABLE OF ty_data WITH UNIQUE KEY key.
DATA(lt_data1) = VALUE ty_t_data( FOR i = 1 UNTIL i > 10 ( key = i ) ).
DATA(lt_data2) = VALUE ty_hashed_t_data( ( key = 2 remarks = `ceshi1` )
( key = 4 remarks = `测试1` )
( key = 6 remarks = `测试2` )
( key = 7 remarks = `测试3` ) ).
"把lt_data2中的内容匹配到 lt_data1里面
DATA:BEGIN OF ls_test,
aptyp TYPE c,
status TYPE c,
datbi TYPE sy-datum,
END OF ls_test.
ls_test-aptyp = 'D'.
ls_test-status = '0'.
IF ls_test-aptyp = 'D' AND ls_test-status = '0' AND ls_test-datbi IS INITIAL.
ls_test-datbi = sy-datum+0(6) && '01'."申請迄日
ENDIF.
lt_data1 = CORRESPONDING #( lt_data1 FROM lt_data2 USING key = key ).
cl_demo_output=>display( data = lt_data1 ).
"3.类似于mapping的功能,不同名字字段之间传值 (这个语法可以用户和外部接口数据赋值的时候使用)
DATA:BEGIN OF customer_oa,
id TYPE char10 VALUE '1000000001',
name TYPE char35 VALUE 'OA_NAME',
BEGIN OF information,
company_id TYPE char4 VALUE '6100',
sales_organization TYPE char4 VALUE '6200',
country TYPE char3 VALUE 'CN',
END OF information,
END OF customer_oa,
BEGIN OF customer_sap,
kunnr TYPE kna1-kunnr,
name1 TYPE kna1-name1,
BEGIN OF info,
bukrs TYPE knb1-bukrs,
vkorg TYPE knvv-vkorg,
land1 TYPE kna1-land1,
END OF info,
END OF customer_sap.
"两个名字不相同的工作区相互赋值
customer_sap = CORRESPONDING #(
customer_oa MAPPING
kunnr = id name1 = name
( info = information MAPPING
bukrs = company_id
vkorg = sales_organization
land1 = country
) ).
WRITE:/ 'sap:' , customer_sap .
WRITE:/ 'oa:' , customer_oa.