ABAP BDC 实例
BDC的本质就是在SAP中,一些标准程序批量处理时,无法使用SAP系统提供的BAPI进行数据处理,而使用SHDB生成一个模板,然后在程序中调用这个模板生成的代码,用于数据的批导。
1.使用Tcode SHDB,新建一条记录
2.记录中填写自建BDC的名称,事务代码中填写需要录制的事务代码
3.这里我们使用QA11来举例,
事务代码QA11使用的BAPI:BAPI_INSPLOT_SETUSAGEDECISION该函数只能用于做决策、计分的操作,没有针对检验批库存过账的操作,其中需要过账部分需要采用BDC。
点击开始记录,
就进入到了标准程序QA11的前台,这个时候我们录制一个检验批决策的步骤,录制步骤就不赘述了…
4.录制完成之后再次查看SHDB,可以得到如下步骤
其实际,就是记录了我们在前台屏幕上所调用的按钮、填写的字段以及步骤,所以我们如果熟练的话,其实是可以不用SHDB进行录制,自己手工写一个BDC的。
接下来在程序中调用,如下主代码:
LOOP AT gt_data ASSIGNING FIELD SYBMOL(<fs>).
IF <fs>-vcode = 'A'OR <fs>-vcode = 'A1'."退货交货填写消耗数量,至非限制使用填写检验批数量
CLEAR l_value.
l_value = <fs>-losmenge - <fs>-zmenge1.
PERFORM frm_bdc_build USING: 'X' 'SAPMQEVA' '0100',
' ' 'BDC_CURSOR' 'QALS-PRUEFLOS',
' ' 'BDC_OKCODE' '=NB',
' ' 'QALS-PRUEFLOS' <fs>-prueflos,
'X' 'SAPMQEVA' '0200',
' ' 'BDC_OKCODE' '=BB',
' ' 'BDC_CURSOR' 'RQEVA-VCODE',
' ' 'RQEVA-VCODE' <fs>-vcode,
' ' 'RQEVA-VCODEGRP' <fs>-vcodegrp,
'X' 'SAPMQEVA' '0200',
' ' 'BDC_OKCODE' '/00',
' ' 'BDC_CURSOR' 'RQEVA-VMENGE01',
' ' 'RQEVA-VMENGE01' l_value ,"检验批数量
' ' 'BDC_CURSOR' 'RQEVA-VMENGE04',"冻结数量
' ' 'RQEVA-VMENGE04' <fs>-zmenge1,"消耗数量
' ' 'RQEVA-QLGO_VM01' <fs>-qlgortvorg,
' ' 'RQEVA-QLGO_VM04' <fs>-qlgortvorg,
' ' 'RQEVA-QLGO_VM06' <fs>-qlgortvorg,
* ' ' 'BDC_OKCODE' '=ENTR',
* 'X' 'SAPMQEVA' '0122',
* ' ' 'BDC_OKCODE' '=ENTE',
* ' ' 'RQEVA-GRUND' '0002',"原因
'X' 'SAPMQEVA' '0200',
' ' 'BDC_OKCODE' '=BU'.
CALL TRANSACTION 'QA11' USING gt_bdc
MODE iv_flag "A:调试 N:不显示 E:错误时调试
UPDATE 'S' "A:异步 S:同步 L:本地更新
MESSAGES INTO gt_msg.
IF sy-subrc <> 0."QA11 FAIL.
LOOP AT gt_msg INTO gs_msg.
CLEAR lv_mtext.
MESSAGE ID gs_msg-msgid
TYPE gs_msg-msgtyp
NUMBER gs_msg-msgnr
INTO lv_mtext
WITH gs_msg-msgv1 gs_msg-msgv2
gs_msg-msgv3 gs_msg-msgv4.
it_return-message = it_return-message && lv_mtext.
ENDLOOP.
ENDIF.
ENDIF.
ENDLOOP.
FRM_BDC_BUILD:
FORM frm_bdc_build USING dynbegin fnam fval.
CLEAR : gs_bdc.
IF dynbegin = 'X'.
gs_bdc-dynbegin = 'X'.
gs_bdc-program = fnam.
gs_bdc-dynpro = fval.
APPEND gs_bdc TO gt_bdc.
ELSE.
gs_bdc-fnam = fnam.
gs_bdc-fval = fval.
CONDENSE gs_bdc-fval NO-GAPS.
APPEND gs_bdc TO gt_bdc.
ENDIF.
ENDFORM.
需要注意的是BDC是完全模拟前台操作,如果前台出现报错等不可预见的错误,会导致BDC调用失败;BDC在日常程序中调用存在一定风险和不确定性,如果后期运维对BDC的事务代码更改配置或者增强,容易导致dump的风险,加大了开发量;在新版本的S4/hana中提供了大量的BAPI,如果存在BAPI,应尽量避免使用BDC录制。
post SAP-Garson
原文链接:https://blog.csdn.net/weixin_44911062/article/details/109179345文章来自于网络,如果侵犯了您的权益,请联系站长删除!