快速掌握SAP 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_FIELDBDC_TRANSACTION 三个子程序,并且进行适当的改写。完成后代码如下:

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

在这里插入图片描述

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

在这里插入图片描述

源代码

源代码和 Excel 格式的导入文模板放在 github 上:BDC_AS01_Demo

猜你喜欢

转载自blog.csdn.net/stone0823/article/details/110082685
BDC