快速掌握SAP BDC数据导入
对于有任何语言编程经验的人员来说,BDC 方式导入数据不失为一种不错的选择。BDC 可以将操作过程录制的记录自动生成 ABAP 代码,并且可以基于自动生成的代码进行优化,加上诸如数据校验,数据导入日志等功能。本篇以创建固定资产 AS01 事务码为例,讲解如何有效利用 BDC 进行数据导入。
对于有任何语言编程经验的人员来说,BDC 方式导入数据不失为一种不错的选择。BDC 可以将操作过程录制的记录自动生成 ABAP 代码,并且可以基于自动生成的代码进行优化,加上诸如数据校验,数据导入日志等功能。
本篇以创建固定资产 AS01 事务码为例,讲解如何有效利用 BDC 进行数据导入。
事务录制
使用 BDC 前,先使用事务码 SHDB 或者 SM35 将操作过程录制下来,这里以 SHDB 为例说明。在 SHDB 界面中,点击 New Recording 按钮开始一个新的录制:

在弹出对话框中,输入 recording 名称(ZAS01) 和事务码 (AS01),点击 Start recording 按钮开始录制。

录制的过程中,就是事务码 AS01 的操作过程。要点就是对每一个需要输入值的字段都手工输入,不要从历史记录中选择;完成录入后,点击保存按钮保存保存数据,保存动作也需要被记录下来;避免录入的时候在不同的屏幕中跳来跳去,因为 SAP 会记录屏幕和光标 (Cursor)的位置,反复跳转产生一些无关的脚本代码,增加了后续处理的难度。这里省略录制的过程。录制完成后,SHDB 的界面如下:

Field Name 字段有很多值,像 ANLA-ANLKL 这样的比较容易理解,表示 ANLA 表的 ANLKL 字段,BDC_SUBSCR 表示子屏幕,BDC_CURSOR 表示光标的位置。另外有多个 BDC_OKCODE,表示操作的动作。有些是标准的,比如 /00,表示回车,但 =BUCH 是什么意思呢?这些动作码对应程序对话屏幕 (dialog) 的 function code,因为这些功能码基于程序,并没有一个统一的规定,所以如果想知道的话,要到对应程序中去查看。比如本例中,我们输入 AS01,在初始界面中,通过菜单项:系统 -> 状态,进入下面的界面:

双击 GUI status NEU_FIRST,可以看到 BUCH 对应的功能是保存的意思。

我把需要填写值的字段都已经标注了出来。可以看到,SAP 记录了操作过程中的子屏幕 (BDC_SUBSCR),也记录了光标的位置 (BDC_CURSOR),我们可以基于对 AS01 界面,删除不影响功能的一些行次。比如 BDC_CURSOR,一般是可以删除的,BDC_SUBSCR 的屏幕,如果没有需要录入任何值,也是可以删除的。删除不相关字段后,屏幕录制的代码简化为:

在界面中,有一个 Process 按钮,可以在精简后点击此按钮进行测试,如果能创建新的固定资产,则表示没有问题,可以将录制进行保存。
生成程序
回到 SHDB 的 Overview 界面,在这个界面中,可以基于录制生成程序,或者函数。我们以生成程序为例进行讲解。

点击生成程序按钮,在对话框中,输入下面界面中的值:

当然,这个步骤的操作需要用户开发权限。点击确认按钮,即可生成程序,这是一个可以直接运行的程序,程序从应用程序服务器(Application server 上) 读取 AS01_Data 文件的数据,调用事务码 AS01,实现数据导入的功能。应用程序服务器 文件的路径为:DIR_SAPUSERS 文件夹。


可以用事务码 AL11 查看文件,通过事务码 CG3Y 下载到本地,通过事务码 CG3Z 从本地导入到应用程序服务器。看起来一切都很完美,我们只要将服务器上的文件作为模板下载下来,维护好数据再上传到服务器,不就全部搞定了吗?很可惜,SHDB 默认生成的文本文件,是基于每个字段的长度拼接来生成文件的每一行的,不像 LSMW 可以定义字段之间的分隔符,从这个方面来说,设计不如 LSMW.。如果用户要按这种格式来维护导入的数据,考虑每个字段的长度,这个困难太大了,所以我们需要修改 SAP 自动生成的程序,添加从 PC 导入数据的功能。
改写程序
为了改写和完善这支程序,我们需要熟悉自动生成程序的逻辑。这里我就不分析程序的细节了,直接说明方法。SAP 将 BDC 程序的通用功能写在 include 程序 BDCRECX1 中,我们将 BDCRECX1 拷贝为一个新的程序 ZBDCRECX,保留 BDC_DYNPRO, BDC_FIELD 和 BDC_TRANSACTION 三个子程序,并且进行适当的改写。完成后代码如下:

然后新建一支程序,命名为 Z_BDC_AS01, 在程序中实现将 Excel 数据导入到内表:

然后从 ZSHDB_AS01 将导入的代码拷贝过来。完整代码如下:

源代码
源代码和 Excel 格式的导入文模板放在 github 上:BDC_AS01_Demo
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)