使用 CL_ABAP_CORRESPONDING 映射结构中不同级别的字段



我有两个嵌套结构,我想根据一些规则在运行时映射字段。它可以附加 dest 结构和源结构的字段位于嵌套结构的不同级别。

(结构有不同的类型(

例如,我想映射:

struct1-a1 = struct2-bsub1-s1_b1.
struct1-asub1-s1_a1 = struct2-b1.
DATA:
BEGIN OF struct1,
a1 TYPE string VALUE 'a1',
a2 TYPE string VALUE 'a2',
a3 TYPE string VALUE 'a3',
a4 TYPE string VALUE 'a4',
a5 TYPE string VALUE 'a5',
BEGIN OF asub1,
s1_a1 TYPE string VALUE 's1_a1',
s1_a2 TYPE string VALUE 's1_a2',
s1_a3 TYPE string VALUE 's1_a3',
END OF asub1,
END OF struct1,
BEGIN OF struct2,
b1 TYPE string VALUE 'b1',
b2 TYPE string VALUE 'b2',
b3 TYPE string VALUE 'b3',
a4 TYPE string VALUE 'b4',
a5 TYPE string VALUE 'b5',
BEGIN OF bsub1,
s1_b1 TYPE string VALUE 's1_b1',
s1_b2 TYPE string VALUE 's1_b2',
s1_b3 TYPE string VALUE 's1_b3',
END OF bsub1,
END OF struct2.

我发现这个很酷的类可以为字段构建映射,但它只有一个级别参数。

我的问题是我可以使用类CL_ABAP_CORRESPONDING来映射不同级别的字段以及如何做到这一点。

不,你不能,映射的结构必须在同一级别上。课程文档摘录:

笔记

仅当组件位于同一级别时,它们才能相互映射。不能将子结构中的元件指定给更高级别元件,也不能将更高级别的元件指定给子结构中的元件。

您必须拆分为多个执行:

cl_abap_corresponding=>create(
source            = struct2-bsub1
destination       = struct1
mapping           = VALUE cl_abap_corresponding=>mapping_table(
( level = 0 kind = 1 srcname = 's1_b1' dstname = 'a1' ) )
)->execute( EXPORTING source      = struct2-bsub1
CHANGING  destination = struct1 ).
cl_abap_corresponding=>create(
source            = struct2
destination       = struct1-asub1
mapping           = VALUE cl_abap_corresponding=>mapping_table(
( level = 0 kind = 1 srcname = 's1_a1' dstname = 'b1' ) )
)->execute( EXPORTING source      = struct2
CHANGING  destination = struct1-asub1 ).

编辑:虽然文档看起来很简单,但我发现组件选择器可以在SRCNAME组件内部使用,以引用嵌套结构中的组件,例如上面的第一次执行等效于此代码(区别在于source = struct2srcname = 'bsub1-s1_b1'(:

cl_abap_corresponding=>create(
source            = struct2
destination       = struct1
mapping           = VALUE cl_abap_corresponding=>mapping_table(
( level = 0 kind = 1 srcname = 'bsub1-s1_b1' dstname = 'a1' ) )
)->execute( EXPORTING source      = struct2
CHANGING  destination = struct1 ).

似乎仍然不可能的是DSTNAME组件中使用组件选择器,例如第二次执行不能指示destination = struct1dstname = 'asub1-b1',会发生异常。

相关内容

  • 没有找到相关文章

最新更新