首先介绍一下BDC即Batch Data Conversion。由于某种原因,当我们需要大量并且重复的输入保存变更删除数据的操作,且没有对应的BAPI可以使用的时候,可以使用BDC的方式进行。
其原理是sap通过录屏的方式将业务操作记录下来,然后让计算机重复的进行操作。
一,录制业务操作
-
输入TCode:SHDB进入BDC录制初始界面
-
单击工具栏 Newrecording 按钮创建一个新的BDC,系统将弹出Create Recording对话框,要求输入记录名称(此名称可以不用Y或Z开头来定义)和录制程序的事务码,本例以创建物料主数据MM01为例。
-
单击Startrecording 按钮,程序直接跳转到事务码mm01下
-
输入自定义的物料名和行业领域,物料类型后,按工具栏的继续按钮,系统将弹出Select View列表,要求选择物料主档中所维护的具体视图,我们选“基本数据1”,单击继续。
-
进入物料信息维护界面,维护物料主档数据,我们这里选填了4项。
物料名称,基本计量单位,物料组及普通项目类别组。
-
完成后点保存,界面自动跳转到如下图界面,红色圈住的地方就是我们在录屏的过程中填入的值,接下来在程序中需要动态的进行修改。
-
点保存后,点返回,如下图:
-
点击工具栏按钮:Program,出现下图对话框,输入程序名称
-
点继续,在下方的对话框中插入标题,然后点击 源代码
-
输入开发类,本例是以STMP开发类。点击:本地对象
-
界面转到abap编辑界面
二,编辑生成代码
- 在第一阶段中生成的代码,在实际的应用中并不是所有都需要用到,下图中红色框圈出来的部分是我们需要用实际业务中的变量进行代替的。
步骤大概如下:
①从数据库或本地文件中获取到需要进行操作的数据
②Loop循环需要操作的数据,每一条需要进行操作的数据需要进行一次BDC(构建BDC 数据 + Call Transaction)
③在SHDB中生成的代码,我们只需要留下黑色框中的代码(包括Form 中代码),并将原来录屏中输入的定值变更为loop内表中的值,整理后复制到自己需要用到BDC的程序中进行②操作即可。
如下图所示:
像以下这样:
三,代码含义讲解
PERFORM bdc_dynpro USING 'SAPLMGMM' '0060' .
--> 定位到当前屏幕SAPLMGMM程序的 0600 Screen
PERFORM bdc_field USING 'BDC_CURSOR' 'RMMG1-MATNR' .
-->将光标移动到RMMG1-MATNR输入框中
PERFORM bdc_field USING 'BDC_OKCODE' '= ENTR' .
-->输入完成后点击回车(= ENTR回车,此处为屏幕的okcode)
PERFORM bdc_field USING 'RMMG1-MATNR' P_MATNR.
-->在屏幕的RMMG1-MATNR输入框中 输入P_MATNR变量中的值
CALL TRANSACTION 'MM02' (调用的事务码)
USING gt_bdc_data (创建好的BDC录屏数据)
OPTIONGS FROM gs_opt (调用选项)
MESSAGE INTO lt_mes. (成功与否的消息)
gs_opt type cutparams
-dismode (E:有错误是跳转前台、A:一直前台执行、N:均后台执行)
-updmode(A:异步、S: 同步、L:Local Update)
-racommit (后台遇到commit work代码时是否结束BDC ,赋值为X时不结束。此处在实际业务中经常碰到问题,注意此参数设置)
CALL FUNCTION 'CONERT_BDCMESGCALL_TO_BAPIRET2'
TABLES
IMT_BDC_MESGCOLL = lt_mes
EXT_RETURN = lt_return
根据lt_return的值判断是否执行成功
四,BDC其他方式-异步模式
除了以上所说的方式还有创建BI SESSION 的方式进行
在SHDB中自动生成的代码有此段逻辑,大概总结如下
① Call ’BDC_OPEN_GROUP‘.(创建BI SESSION)
② LOOP 主数据
BDC数据创建 ->> Call ‘BDC_INSERT’
ENDLOOP.
③ Call BDC_CLOSE_GROUP.(关闭BI SESSION)