在 ABAP 中,CORRESPONDING
操作符用于根据字段名称自动映射结构体(Structure)或内表(Internal Table)的字段值。它比传统的 MOVE-CORRESPONDING
语句更灵活,支持更多控制选项。
基础用法
data: begin of ls_person,
name type string,
age type i,
end of ls_person.
data: begin of ls_target,
name type string,
age type i,
end of ls_target.
ls_person-name = 'John'.
ls_person-age = 18.
ls_target = corresponding #( ls_person ).
write: / ls_target-name, ls_target-age.
- 功能:将
source
中与target
同名字段的字段值复制到target
。 - 要求:源和目标字段名称相同且类型兼容。
高级用法
MAPPING
子句用于字段名称不同时的显式映射。
target = CORRESPONDING #( source MAPPING target_field = source_field ... ).
示例:
data: begin of ls_source,
firstname type string,
birthdate type d,
end of ls_source.
data: begin of ls_target,
name type string,
dob type d,
end of ls_target.
ls_source-firstname = 'Alice'.
ls_source-birthdate = '19900101'.
ls_target = corresponding #( ls_source mapping name = firstname dob = birthdate ).
write: / ls_target-name, ls_target-dob.
2. EXCEPT 子句排除不需要映射的字段。
target = CORRESPONDING #( source EXCEPT field1 field2 ... ).
3. BASE
子句保留目标变量的现有值,仅覆盖映射的字段。
target = CORRESPONDING #( BASE (target) source ).
示例:
data: begin of ls_source,
firstname type string,
birthdate type d,
end of ls_source.
data: begin of ls_target,
name type string,
dob type d,
end of ls_target.
ls_source-firstname = 'Alice'.
ls_source-birthdate = '19900101'.
ls_target-name = 'Bob'.
ls_target-dob = '20000101'.
" name = 'Alice'(覆盖),dob = '20000101'(保留)
ls_target = corresponding #( BASE ( ls_target ) ls_source mapping name = firstname ).
write: / ls_target-name, ls_target-dob.