`
JerryWang_SAP
  • 浏览: 1052942 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

介绍一种在ABAP内核态进行内表高效拷贝的方法

阅读更多

内表操作是ABAP开发人员几乎在每个ABAP程序里都会遇到的。

看一个例子:有两个行结构不一样的内表,每个内表的行结构有三列,除了name这一列名字一致外,其他两列的名称都不同,下图用红色和蓝色标注出来。

如果要把内表developer_list里的两位开发人员Jerry和Tom的信息按照下图的映射关系拷贝到内表presale_list里:

常规做法当然是用一个LOOP循环,引入两个临时变量,先把内表1逐行赋给临时变量1,再把临时变量1逐列赋给临时变量2.

在ABAP 750版本里,提供了一个辅助类cl_abap_corresponding,能以声明式编程的方式完成这个内表复制任务。

通过工具类的create方法,第二行和第三行指定要进行复制操作的源和目标内表,第四到六行告诉工具类内表复制的列字段映射规则。之后第8行调用execute方法完成复制操作。

大家更喜欢哪一种方式?这个例子虽然简单,但包含了一个编程领域的基础知识点:命令式编程(Imperative Programming)和声明式编程(Declarative Programming)。

第一种使用LOOP循环的解法是典型的命令式编程的例子,我们定义了两个临时变量,通过循环体内的三条赋值指令,命令代码去执行以完成内表拷贝。第二种解法, 作为应用开发人员,我们只是向工具类做出声明,我们想对哪两个内表根据什么样的映射逻辑进行拷贝。至于工作类如何执行,应用开发人员不操心,这就是声明式编程。

当然,即便是声明式编程,工具类的代码也总得有人实现。双击execute方法,发现是ABAP内核态的C语言实现的。

对于SAP客户和partners来说,无法看到这个ab_kmMvcdExecute内核方法的源代码,详情参考Jerry的文章:聊聊C语言和ABAP

大家可以试着自己用ABAP来模拟实现一个自己的CL_ABAP_CORRESPONDING. 这里Jerry提供一份Java版本的实现。

Java里万物皆对象,所以我们分别定义Developer和Presale类:

创建两个Java list来模拟ABAP里的内表:

然后我的目的是,把第一个list里,Jerry和Tom这两位开发者的name, focusLanguage和salary字段分别赋给第二个list对应实例的name, focusArea和salaryPlusBonus字段,模拟一个公司内部转岗的操作。

同ABAP使用工具类的方式一样,我声明了两条映射规则,分别是第二行的mapping实例1,将focusLanguage字段直接赋给focusArea字段,以及第5行的mapping实例2,将salary字段的值乘以2,再赋给salaryPlusBonus字段。最后调用execute方法完成赋值。为了便于ABAP开发人员同之前的ABAP内表拷贝的例子进行比对,这里虽然是Java代码,但是CL_MAPPING和CL_JAVA_CORRESPONDING这两个类,我仍然用的是ABAP的命名规范,而非Java的驼峰式命名。

 

CL_JAVA_CORRESPONDING的实现如下:execute调用map, map调用mapEach,提取用户指定的映射规则里的字段名,使用Java反射机制完成操作。

完整代码位于Jerry的github上:

再来看Jerry用JavaScript如何实现这个工具类的。先看在JavaScript里消费工具类的代码,仍然是声明式编程熟悉的味道:

因为function是JavaScript世界里的一等公民,所以JavaScript的实现版本,能写出更原汁原味函数式编程的解法出来:

如果要拷贝JavaScript版本的工具类CL_JS_CORRESPONDING的实现代码,可以从Jerry这篇博客里获得:

CL_ABAP_CORRESPONDING, CL_JAVA_CORRESPONDING and CL_JS_CORRESPONDING

希望这个简单的例子,能让大家感受到命令式编程和声明式编程的差异,感谢阅读。

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

0
0
分享到:
评论

相关推荐

    ABAP三种内表区别

    Internal Table 是 ABAP 中最基本的一种内表,它是通过在内存中分配一定的空间来存储数据的。Internal Table 的优点是可以快速地存储和访问数据,但是它的缺点是占用内存空间较大。当我们需要存储大量数据时,...

    ABAP动态内表使用的例子

    在ABAP编程语言中,动态内表(Dynamic Internal Tables)是一种非常灵活的数据结构,它允许程序员在运行时定义和操作内表。与静态内表相比,动态内表提供了更多的灵活性,尤其是在处理不确定的数据结构时更为实用。...

    abap内表使用方法

    ABAP 内表是一种非常重要的数据结构,它可以存储和处理大量的数据。在 ABAP 程序中,内表是使用 TABLE 语句或 DATA 语句定义的。ABAP 内表可以用来存储和处理大量的数据,例如从数据库中读取的数据、用户输入的数据...

    sap abap找表的18种方法

    下面将详细介绍标题“sap abap找表的18种方法”所涵盖的知识点,这些方法可以帮助开发人员高效地进行数据检索和处理。 1. **SELECT语句**:最基础的查找方法,直接在ABAP代码中使用SQL SELECT语句来查询数据库表。...

    sap_ABAP-动态内表

    SAP ABAP 中的动态内表是一种特殊的内表结构,它可以根据实际情况动态地生成和赋值。本文将详细介绍动态内表的创建、赋值和读取显示。 动态内表的创建 动态内表的创建主要分为两步:首先定义动态结构,然后根据...

    ABAP动态内表的收集

    在SAP ABAP编程中,动态内表的创建是实现灵活数据处理的重要手段,尤其是在处理大量数据或涉及多个系统表的场景下。本篇将详细解释如何动态地创建和使用内表,以及在进行动态更新时需要注意的关键点。 首先,让我们...

    SAP ABAP动态内表构建与例子

    在SAP ABAP编程中,动态内表是一种非常重要的数据结构,它允许程序根据运行时的需求灵活地处理数据。动态内表不同于静态内表,后者在编写代码时就已经定义了结构,而动态内表的结构是在程序运行时通过变量或表达式...

    abap 维护表视图

    在这个特定的话题“ABAP维护表视图”中,我们将深入探讨如何在ABAP环境中管理和操作表视图,这是一种在数据库层面与数据交互的重要方式。 表视图在数据库管理中扮演着关键角色,它们提供了对原始数据库表的抽象和...

    ABAP内表创建整理

    在ABAP编程中,内表(Internal Table)是一种非常重要的数据结构,用于存储和处理大量数据。内表灵活且高效,可以适应各种复杂的数据处理需求。以下是对ABAP内表创建方法的详细说明: 1. **声明表结构并基于表结构...

    abap 内表效率问题

    在ABAP编程语言中,内表(Internal Tables)是存储数据的一种重要结构。根据不同的应用场景,开发人员可以选择使用标准内表(Standard Table)或排序内表(Sorted Table)。本文将深入探讨这两种内表类型的性能差异...

    一本介绍ABAP的文档

    2. 访问内表:使用APPEND、INSERT、DELETE、READ TABLE等语句对内部表进行操作,获取、修改和删除记录。 3. 内部表的声明:声明内部表时需指定其类型,可以是标准表类型(如TYPE LINES OF)或自定义结构类型。 除了...

    ABAP 内表复习与强化

    在ABAP中,内表(Internal Table)是一种非常重要的数据结构,它允许程序员存储和处理大量数据。本节将深入探讨ABAP内表的创建、填充以及从数据库读取信息到内表的方法。 首先,我们来看创建内表的方式。内表可以...

    BOM按层展开在ABAP中的几个实现方法

    3. **ABAP表函数和内部表处理**:利用ABAP的表函数,如BOM函数模块(如`BAPI_BOM_GET_DETAIL`),配合内部表进行数据处理,逐步展开BOM层次。这种方法灵活性高,适合复杂的业务逻辑。 4. **树形结构和循环**:在...

    SAP数据表大全ABAP数据表大全

    - 内部表:这是一种在内存中操作的数据结构,不直接对应数据库表,但可以与透明表进行交互。 - 查找表:用于提供固定值选择,通常与主键关联,用于快速查找和验证输入数据。 - 描述表:存储字段描述信息,如字段...

    abap 如何找表

    在ABAP(Advanced Business Application Programming)编程中,找表是一个常见的任务,这涉及到从数据库中检索数据以满足特定的需求。本文将深入探讨18种基于屏幕字段查找潜在数据的技巧,帮助ABAP开发者更高效地...

    ABAP基础:行和内表

    在ABAP编程中,行(LINES)和内表(INTERNAL TABLES)是两种重要的数据结构,用于存储和处理大量数据。本篇文章将详细介绍这两种数据结构及其相关的关键字。 首先,我们来了解一下`DATATYPES`和`TYPES`关键字。在...

    ABAP 学习资料 ABAP性能提高解决办法

    二分法查询是一种非常高效的查询方法,可以提高查询内表数据的速度。因此,在查询内表数据时,应该使用二分法查询。 11. 两个内表添加使用批量增加代替逐行 在ABAP程序中,逐行增加内表将会影响程序的性能。因此,...

    SAP ABAP动态内表总结

    field-symbols: <dyn_table> type standard table, ” 内表结构 , ” 表头 <dyn_field>. ” 项 data: dy_table type ref to data, dy_line type ref to data, ” 行 xfc type lvc_s_fcat, ” 列结构 ifc ...

    abap內表 工作区 的定义和区别

    在ABAP编程中,理解和掌握工作区(Work Area)与内表(Internal Table)的概念及其差异至关重要。工作区和内表都是ABAP中用于存储数据的结构,但它们的使用场景和特性有所不同。 ### 工作区(Work Area) 工作区在...

    abap 内表使用

    本文件详细地对介绍了 abap编程中内表的定义及使用

Global site tag (gtag.js) - Google Analytics