FUNCTION z_qm.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(CTU) LIKE APQI-PUTACTIVE DEFAULT 'X'
*" VALUE(MODE) LIKE APQI-PUTACTIVE DEFAULT 'E'
*" VALUE(UPDATE) LIKE APQI-PUTACTIVE DEFAULT 'S'
*" VALUE(GROUP) LIKE APQI-GROUPID OPTIONAL
*" VALUE(USER) LIKE APQI-USERID OPTIONAL
*" VALUE(KEEP) LIKE APQI-QERASE OPTIONAL
*" VALUE(HOLDDATE) LIKE APQI-STARTDATE OPTIONAL
*" VALUE(NODATA) LIKE APQI-PUTACTIVE DEFAULT '/'
*" VALUE(PRUEFLOS_001) LIKE BDCDATA-FVAL DEFAULT ''
*" VALUE(VMENGE03) LIKE BDCDATA-FVAL DEFAULT '1'
*" VALUE(SIGNER_010) LIKE BDCDATA-FVAL DEFAULT ''
*" VALUE(PASSWORD_011) LIKE BDCDATA-FVAL DEFAULT ''
*" EXPORTING
*" VALUE(SUBRC) LIKE SYST-SUBRC
*" TABLES
*" MESSTAB STRUCTURE BDCMSGCOLL OPTIONAL
*"----------------------------------------------------------------------
subrc = 0.
PERFORM bdc_nodata USING nodata.
"20240429下面BDC参数用于测试
** ctu = 'X'.
** mode = 'N'.
** update = 'L'.
PERFORM open_group USING group user keep holddate ctu.
PERFORM bdc_dynpro USING 'SAPMQEVA' '0100'.
PERFORM bdc_field USING 'BDC_CURSOR' 'QALS-PRUEFLOS'.
PERFORM bdc_field USING 'BDC_OKCODE' '=NB'.
PERFORM bdc_field USING 'QALS-PRUEFLOS' prueflos_001."质检批号
PERFORM bdc_dynpro USING 'SAPMQEVA' '0200'.
PERFORM bdc_field USING 'BDC_OKCODE' '=BB'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RQEVA-MHD_01'.
PERFORM bdc_dynpro USING 'SAPMQEVA' '0200'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RQEVA-VMENGE03'.
PERFORM bdc_field USING 'RQEVA-VMENGE03' vmenge03. "数量
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_dynpro USING 'SAPMQEVA' '0200'.
PERFORM bdc_field USING 'BDC_OKCODE' '=BU'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RQEVA-VMENGE03'.
PERFORM bdc_field USING 'RQEVA-VMENGE03' vmenge03. "数量
**
** PERFORM bdc_dynpro USING 'SAPLCJ00' '1100'.
** PERFORM bdc_field USING 'BDC_CURSOR' 'RC70D-PASSWORD'.
** PERFORM bdc_field USING 'BDC_OKCODE' '=ENT'.
** PERFORM bdc_field USING 'RC70D-SIGNER' ''. "帐号
** PERFORM bdc_field USING 'RC70D-PASSWORD' ''."密码
.
PERFORM bdc_transaction TABLES messtab
USING 'QA11'
ctu
mode
update.
IF sy-subrc <> 0.
subrc = sy-subrc.
EXIT.
ENDIF.
PERFORM close_group USING ctu.
* SUBRC = 0.
*
* PERFORM BDC_NODATA USING NODATA.
*
* PERFORM OPEN_GROUP USING GROUP USER KEEP HOLDDATE CTU.
*
* PERFORM BDC_DYNPRO USING 'SAPMQEVA' '0100'.
* PERFORM BDC_FIELD USING 'BDC_CURSOR'
* 'QALS-PRUEFLOS'.
* PERFORM BDC_FIELD USING 'BDC_OKCODE'
* '=NB'.
* PERFORM BDC_FIELD USING 'QALS-PRUEFLOS'
* PRUEFLOS_001.
* PERFORM BDC_DYNPRO USING 'SAPMQEVA' '0200'.
* PERFORM BDC_FIELD USING 'BDC_OKCODE'
* '=BB'.
* PERFORM BDC_FIELD USING 'BDC_CURSOR'
* 'RQEVA-MHD_01'.
**perform bdc_field using 'RQEVA-MHD_01'
** MHD_01_002.
* PERFORM BDC_DYNPRO USING 'SAPMQEVA' '0200'.
* PERFORM BDC_FIELD USING 'BDC_OKCODE'
* '/00'.
* PERFORM BDC_FIELD USING 'BDC_CURSOR'
* 'RQEVA-VMENGE03'.
**perform bdc_field using 'RQEVA-QLGO_VM01'
** QLGO_VM01_003.
* PERFORM BDC_FIELD USING 'RQEVA-VMENGE03'
* VMENGE03.
**perform bdc_field using 'RQEVA-QLGO_VM04'
** QLGO_VM04_005.
**perform bdc_field using 'RQEVA-QLGO_VM06'
** QLGO_VM06_006.
* PERFORM BDC_DYNPRO USING 'SAPMQEVA' '0200'.
* PERFORM BDC_FIELD USING 'BDC_OKCODE'
* '=BU'.
* PERFORM BDC_FIELD USING 'BDC_CURSOR'
* 'RQEVA-VMENGE01'.
**perform bdc_field using 'RQEVA-QLGO_VM01'
** QLGO_VM01_007.
**perform bdc_field using 'RQEVA-VMENGE03'
** VMENGE03_008.
**perform bdc_field using 'RQEVA-QLGO_VM04'
** QLGO_VM04_009.
**perform bdc_field using 'RQEVA-QLGO_VM06'
** QLGO_VM06_010.
*
* PERFORM BDC_TRANSACTION TABLES MESSTAB
* USING 'QA11'
* CTU
* MODE
* UPDATE
* .
*
*
*
* IF SY-SUBRC <> 0.
* SUBRC = SY-SUBRC.
* EXIT.
* ENDIF.
*
* PERFORM CLOSE_GROUP USING CTU.
* DATA : L_OPT TYPE CTU_PARAMS .
* L_OPT-RACOMMIT = 'X'.
* L_OPT-DISMODE = 'N'.
* L_OPT-UPDMODE = 'S'.
* L_OPT-NOBINPT = 'X' .
*
* CALL TRANSACTION P_TCODE
* USING BDCDATA
* OPTIONS FROM L_OPT
* MESSAGES INTO P_MESSTAB.
ENDFUNCTION.
INCLUDE bdcrecxy .
上面是BDC部分的代码,跟实际在本地运行的时候大致相同,基本上按照需要通过SHDB进行测试和验证即可。
关键点是由于是通过接口去执行的,用户就不需要去进行数字签名,那么这块就不需要进行提交数字签名的BDC操作,直接提交即可。但是对于接口用户必须使用接口服务类型的账号,并且赋予了ALL的权限,否则可能写入失败。如果提交成功的话会在MSEG和QAMB中创建对应的物料凭证,类型为S,消息号为163,;如果创建失败的话就没有对应的凭证号,其中有时候会返回类型为S,但是实际上并没有创建成功。
还有,测试的时候需要通过外部接口调用的方式进行测试,不可以通过SPROXY,否则也会调用失败。