ABAP BDC 实例

it2023-02-11  53

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录制。

最新回复(0)