ABAP 新语法 - corresponding
在 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.与 MOVE-CORRESPONDING 的区别

