ABAP 7.50 新特性之另一个CORRESPONDING
在ABAP中,存在着一条法则:名字不一定代表实际规则(具体可看最近的相关讨论)。
但是如你们所知的,存在着一个很好的例外: 所有涉及到使用CORRESPONDING为结构赋值的关键字的语法形式(偶然地)有着相同的名字..
- 在ABAP 7.40之前,主要有用MOVE-CORRESPONDING来复制结构组件、Open SQL的SELECT的CORRESPONDING附加字段,以及某些过时的计算语句等。
- 在ABAP 7.40中,MOVE-CORRESPONDING可以用于操纵带有结构的内表。并且7.40引入了一个新的构造器操作符CORRESPONDING,它允许显式地将结构的组件映射到不同名字的组件上。
还缺了点什么?答案是动态的映射!这个特性在ABAP 7.50中得到了引入。
新的系统类 CL_ABAP_CORRESPONDING 允许你适用动态指定的映射规则为结构或内表的组件赋值。
映射规则需要创建在一个映射表中,然后传递给映射对象。
例子如下:
DATA(mapper) = cl_abap_corresponding=>create( source = struct1 destination = struct2 mapping = VALUE cl_abap_corresponding=>mapping_table( ( level = 0 kind = cl_abap_corresponding=>mapping_component srcname = ‘…’ dstname = ‘…’ ) ( level = 0 kind = cl_abap_corresponding=>mapping_component srcname = ‘…’ dstname = ‘…’ ) ( level = 0 kind = cl_abap_corresponding=>mapping_component srcname = ‘…’ dstname = ‘…’ ) ) ).
这是个简单的例子,所有组件都在第0层,并且所有组件都得到了映射 (kind = cl_abap_coresponding=>mapping_component)。复杂点的形式会涉及到嵌套结构和排除项。通过srcname和dstname,组件名可以动态地指定。表的建立和CORRESPODING操作符的mapping子句类似。
创建映射对象后,你需要做的就是按如下方式执行赋值:
mapper->execute( EXPORTING source = struct1 CHANGING destination = struct2 ).
你可以一次又一次地为拥有相同类型的结构或者内表来进行这样的操作。
没别的了。更多细节请看:
CL_ABAP_CORRESPONDING – System Class.
远景
到目前为止,只有CORRESPONDING操作符的基本形式被反映到了CL_ABAP_CORRESPONDING里面。而适用lookup table的变体还在实现中..
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· 一个费力不讨好的项目,让我损失了近一半的绩效!