ABAP CORRESPONDING 的相关语法

举报
雨绸缪 发表于 2023/05/26 17:57:09 2023/05/26
【摘要】 CORRESPONDINGCORRESPONDING 和 VALUE 这两个表达式主要侧重于在表上下文中创建结构和移动数据内容。新命令取代了 MOVE_CORRESPONDING,正如您可能已经想到的那样。可以在传输时直接定义新类型。该命令还具有一些定义的附加功能MOVE_CORRESPONDING 语法:MOVE-CORRESPONDING [EXACT] struc1 TO struc...

image.png

CORRESPONDING

CORRESPONDINGVALUE 这两个表达式主要侧重于在表上下文中创建结构和移动数据内容。新命令取代了 MOVE_CORRESPONDING,正如您可能已经想到的那样。可以在传输时直接定义新类型。该命令还具有一些定义的附加功能

MOVE_CORRESPONDING 语法:

MOVE-CORRESPONDING [EXACT] struc1 TO struc2  
  [EXPANDING NESTED TABLES].

语句 MOVE-CORRESPONDING 的此变体要求为 struc1 和 struc2 指定结构。 网格 - 作为语句 MOVE-CORRESPONDING 的操作数 - 以与普通结构相同的方式处理,也可以指定。

" Easy 
Move DATA(ls_t001) = CORRESPONDING t001( ls_data ).

它看起来不同,如果你想合并几个结构,这里你需要一个添加,否则之前映射的值将从你的目标结构中删除。这就是所谓的 MOVE_CORRESPONDING 的基础。在下面的示例中,我们将三个结构组合成一个目标结构:

ls_data = CORRESPONDING #( ls_t001 ). 
ls_data = CORRESPONDING #( BASE( ls_data ) ls_bkpf ). 
ls_data = CORRESPONDING #( BASE( ls_data ) ls_skb1 ).

添加将已填充的字段从 ls_data 中转移,然后将它们添加到附加结构的字段中

CORRESPONDING 新语法 - 映射

另一个非常有趣的附加功能是不适合名称的字段的映射。以前,您必须使用 MOVE_CORRESPONDING ,然后映射所有偏差字段。现在可以在“映射”命令之后完成此操作。

语法:

... [ MAPPING {t1 = s1 [ duplicates]}|( t1 = s1 [ duplicates] [MAPPING ...] [EXCEPT ...] )
              {t2 = s2 [ duplicates]}|( t2 = s2 [ duplicates] [MAPPING ...] [EXCEPT ...] )
              ...  ]
    [ EXCEPT {ti tj ...}|* ] ...

新使用的 CORRESPONDING 关键词与 MAPPINGEXCEPT 组合允许两个结构之间更强大的数据传输。例如:

ls_data = CORRESPONDING #( ls_t001 MAPPING company_code = bukrs description = butxt ).

Value

VALUE 命令主要用于创建结构和表。插入、更新或追加的使用非常灵活,节省了编码空间,最重要的是,它节省了初始化工作,因为结构仅由 Value 语句生成。在值的括号之间,将进行必填字段的分配。您只需要填写所需的字段,其余的将填充初始值。

" Fill a Range
DATA lt_bukrs TYPE RANGE OF t001-bukrs.

APPEND VALUE #( sign = 'I' option = 'EQ' low = 'A001' ) TO lt_bukrs.
APPEND VALUE #( sign = 'I' option = 'EQ' low = 'A002' ) TO lt_bukrs.
APPEND VALUE #( sign = 'I' option = 'EQ' low = 'A003' ) TO lt_bukrs.

" Create a structure
DATA(ls_t001) = VALUE t001( bukrs = 'A001' butxt = 'Value-Test' land1 = 'EN' ).

" Create table
TYPES tt_data TYPE STANDARD TABLE OF char25 WITH EMPTY KEY.

DATA(lt_data) = VALUE tt_data( ( '123' ) ( '456' ) ( '789' ) ).

ADD 语句

语句 ADD 和 ADD-CORRESPOND 用于添加字段并将结果存储在字段变量中。下面是这两个语句关键字的语法和用法。

ADD dobj1 TO dobj2.

上面的语句等同于:

dobj2 = dobj2 + dobj1.

解释:dobj1 的内容与 dobj2 的内容相加,结果被分配给 dobj2 。数据对象 dobj1 和 dobj2 必须是数字。只能指定数据对象,没有调用或其他表达方式。

以下的语法在 ABAP 750 已经过时:

ADD <x1> THEN <x2> UNTIL <xz> GIVING <y>.
ADD n1 THEN n2 UNTIL nz TO m.
ADD n1 THEN n2 UNTIL nz … ACCORDING TO sel …GIVING m.
ADD n1 FROM m1 TO mz GIVING m.

带有 THENUNTILL 的变体中,字符串由数据对象 <x1> 和 <x2> 之间的距离定义。在与 <x1> 的距离是该距离的多个值(最多并包括位置 y)的所有内存位置,必须存储具有相同技术类型属性的数字数据对象。将添加所有这些数据对象的内容。

在带有 TO 的变体中,总计将添加到数据对象结果的内容中,并将结果分配给它。

在具有 GIVING 的变体中,总计直接分配给数据对象结果。数据对象结果必须是数值变量。如果使用 ACCORDING 条件,则仅当字符串中的数据对象在字符串中的位置满足选择表 sel 中的条件时,才会将字符串的数据对象添加到总计中。

选择表中的 lowhigh 变量需要数据类型 i。

ADD-CORRESPONDING
DATA: BEGIN OF VECTOR,
        X TYPE I,
        Y TYPE I,
        LENGTH TYPE I,
      END OF VECTOR,

    BEGIN OF CIRCLE,
        VOLUME TYPE P
        Y TYPE P,
        RADIUS TYPE I,
        X TYPE I,
   END OF CIRCLE.ADD-CORRESPONDING VECTOR TO CIRCLE.
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。