SAP接口实现QA11 BDC绕过决策数字签名

文章讲述了如何通过BDC接口进行参数设置、数据操作和权限管理,涉及SAPMQEVA系统的功能调用,以及数字签名的省略和用户账号权限的重要性。测试需通过外部接口而非SPROXY进行以确保成功。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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,否则也会调用失败。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值