ABAP 泛型编程技术,在本教程之前的多篇文章已经有所介绍:
- 66. SAP ABAP Function Module 的动态调用方式使用方式介绍
- 127. 答网友疑问:ABAP Function Module 如何支持内表结构不确定的动态输入参数
- 128. 工作实战:SAP ABAP 动态创建类型在实际工作中的一个应用场合分享
笔者在实际工作中,经常需要对一些 SAP 系统标准的数据库表进行一些调研工作,比如调整数据库表的字段,或者对这张标准数据库表的内容,进行增删改查等等。
因为是调研性质,自己也没有 100% 把握,所以我一般习惯先将标准的数据库表,拷贝出来成为一个 Z 表。比如下面这张 SAP CRM 系统里标准的数据库表 ZCRMC_OBJECTS
:
使用 SE11 事务码里提供的拷贝功能:
在表名字前添加 Z 即可:
下面是拷贝出来的 Z 表,数据结构同原来标准的表一模一样:
然而这只是数据库表的结构做了拷贝,不包含数据库里存放的记录。为此我开发了一个小工具,利用了 ABAP 泛型编程技术,只需要在工具输入参数里,指定源数据库表,和目标数据库表这两张表的名称,工具就能自动将源数据库表的全部内容,拷贝到目标数据库表去。
当然,既然是泛型编程,我的工具源代码里,就<font color='red' size="3pt">没有</font>硬编码任何关于 CRMC_OBJECTS
或者 ZCRMC_OBJECTS
这两张数据库表的结构信息。
所谓 ABAP 泛型编程,主要通过泛型数据类型
来实现,而泛型数据类型的实现,离不开 ABAP 的 Field Symbol.
泛型数据类型允许我们在声明变量、类或接口时不指定具体的数据类型
,而是使用类型为 <font color='red' size="3pt">ANY</font> 或者 TABLE
的 Field Symbol 来表示。这些 Field Symbol 在应用程序执行时,才能确定其具体的数据类型。
听起来可能有些抽象,不过不要紧,我们通过具体的例子来实战。
执行笔者开发的数据库表内容拷贝工具(完整源代码在文末),指定两个参数:
- 源数据库表名:维护想要将其内容复制出来的数据库表名称,在我的使用场景里,通常是 SAP 标准数据库表名称。
- 目标数据库表名:从 SAP 标准数据库表拷贝出来的 Z 表的名称。
执行完毕后,打印出成功拷贝的数据库表记录数:
下面是详细的源代码讲解。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。