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的变体还在实现中..

本文链接: http://www.cnblogs.com/hhelibeb/p/7134317.html

原文标题:ABAP News for Release 7.50 – CORRESPONDING, again …

时间: 2024-12-26 15:54:13

ABAP 7.50 新特性之另一个CORRESPONDING的相关文章

ABAP 7.50 新特性 – Open SQL中的宿主表达式和其它表达式

在长期的停滞后,Open SQL的发展终于从沉睡中醒来.从ABAP 7.40开始,SAP推进了某些关键的改变,以尽可能地包含SQL92中的特性,并提供与ABAP CDS中的DDL里面的SELECT一样的功能给Open SQL.为了实现这些目标,ABAP运行时环境中引入了一个新的SQL parser作为Open SQL的新基础.结果就是,Open SQL现在可以在ABAP中扮演一些和以往不同的角色了. 虽然在7.40之前,Open SQL更多地被视为ABAP语言本身的一部分,但在同时,SQL关键字

JDK各版本新特性总结

JDK各版本新特性总结 JDK 1.7 新特性  1.switch中可以使用string字符串了 2.<>的运用, List<String> tempList = new ArrayList<>(); 即泛型实例化类型自动推断 3.语法上支持集合,而不一定是数组 final List<Integer> piDigits = [ 1,2,3,4,5,8 ]; 对Java集合(Collections)的增强支持,摒弃了Java集合接口的实现类,如:ArrayLi

Java8新特性小结-接口与Lambda表达式

Java8的新特性相对于前版本(Java7)来说,主要体现在两个方面: 1.   接口定义与使用 2.   Lambda表达式对匿名内部类的简化使用. Java8新特性的具体表现如下: 1.在接口中的体现 (1)在接口中可以定义实体方法,但除原先的抽象方法外只能定义两种方法: A.公共的静态方法 如: package com.jasberyon.java8.interfacer; public interface InterfaceA { public static void sayHi(){

atitit.eclipse 新特性总结3.1--4.3

atitit.eclipse 新特性总结3.1--4.3 Eclipse 3.1 1 Eclipse 3.2 Java开发工具的新特性 2 1. 内容辅助(Ctrl+Space)模板 2 2. 动态地重排它的建议 2 3. Quick Fix"的功能 2 Eclipse 3.3 M1 新特性一览 5 4. Browse all references 5 5. More Java search options 6 6. Plugin deve 7 7. 别的 9 eclipse 3.4新特性 10

android5.0L版本新特性:主色提取

上一次周例会上,有关专家介绍了一下android5.0的一些新特性.其中一个是主色提取,按照产品经理的意思,下一期需求上我们最好能加上这个特性.于是乎,我们就开始研究一下这个新特性了.这个是放在support包里面的新增接口,也就是说这个接口和android版本无关.看来源码也不会太大.:-) 先看一下google官方说明.https://developer.android.com/reference/android/support/v7/graphics/Palette.html从这个介绍页面

一个列子演示vs2010 c++新特性

近日托安装雪豹的"福",格了XP装了win7,前段时间看了C++0X标准以及VS2010诱人的新特性,不禁心痒痒在线安装了VS2010,然后手写了这个列子用来测试新增的特性. struct _SUT {     int _a;     char _c; };int _tmain(int argc, _TCHAR* argv[]) {     //auto关键字     auto i = 0.0f;     cout << typeid(i).name() << 

java13-5 JDK1.5以后的一个新特性和Integer的面试题

1.JDK5的新特性 自动装箱:把基本类型转换为包装类类型 自动拆箱:把包装类类型转换为基本类型 注意一个小问题: 在使用时,Integer x = null;代码就会出现NullPointerException. 标准化:建议先判断是否为null,然后再使用. 1 public class IntegerDemo { 2 public static void main(String[] args) { 3 // 定义了一个int类型的包装类类型变量i 4 // Integer i = new

通过一个例子感受C# 6.0新特性

微软在Visual Studio 2015中更新C#语言到6.0,添加了很多很好的特性,以使C#语言继续跻身于最优秀语言之行列.下面通过一个例子快速感受一下C# 6.0的新特性,以下程序在VS2015预览版中测试通过,正式版可能还要添加新特性. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Syste

activity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题,Android1.5后的一个新特性。

android:windowSoftInputMode 这个属性能影响两件事情: [一]当有焦点产生时,软键盘是隐藏还是显示 [二]是否减少活动主窗口大小以便腾出空间放软键盘 它的设置必须是下面列表中的一个值,或一个"state-"值加一个"adjust-"值的组合.在任一组设置多个值--多个"state-"values,例如&mdash有未定义的结果.各个值之间用|分开.例如:<activity android:windowSof