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

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

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的 ABAP Report BDC 实现创建采购合同的示例: 1. 创建一个自定义的屏幕布局,包含需要输入的采购合同信息。 2. 使用 TCODE SHDB 记录一个标准的采购合同创建过程的 BDC 数据。 3. 通过 ABAP 代码将该 BDC 数据读入内存中,并替换其中需要输入的信息为用户在屏幕上输入的信息。 4. 执行 BDC 事务,创建采购合同。 以下是一个示例 ABAP Report 代码: ``` REPORT z_create_purchase_contract. DATA: BEGIN OF bdcdata OCCURS 0, program LIKE sy-repid, dynpro LIKE sy-dynnr, dynbegin(1) TYPE c, fnam LIKE bdcdata-fnam, fval LIKE bdcdata-fval, END OF bdcdata. DATA: v_ebeln TYPE ekko-ebeln, v_bsart TYPE ekko-bsart, v_bukrs TYPE ekko-bukrs, v_lifnr TYPE ekko-lifnr, v_waers TYPE ekko-waers. PARAMETERS: p_ebeln TYPE ekko-ebeln, p_bsart TYPE ekko-bsart, p_bukrs TYPE ekko-bukrs, p_lifnr TYPE ekko-lifnr, p_waers TYPE ekko-waers. v_ebeln = p_ebeln. v_bsart = p_bsart. v_bukrs = p_bukrs. v_lifnr = p_lifnr. v_waers = p_waers. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING input = v_ebeln IMPORTING output = v_ebeln. bdcdata-program = 'SAPLMEGUI'. bdcdata-dynpro = '0100'. bdcdata-dynbegin = 'X'. APPEND bdcdata. bdcdata-fnam = 'MEPO_SELECT-EKGRP'. bdcdata-fval = v_bsart. APPEND bdcdata. CLEAR bdcdata. bdcdata-program = 'SAPLMEGUI'. bdcdata-dynpro = '0101'. bdcdata-dynbegin = 'X'. APPEND bdcdata. bdcdata-fnam = 'MEPO_SELECT-BUKRS'. bdcdata-fval = v_bukrs. APPEND bdcdata. CLEAR bdcdata. bdcdata-program = 'SAPLMEGUI'. bdcdata-dynpro = '0102'. bdcdata-dynbegin = 'X'. APPEND bdcdata. bdcdata-fnam = 'MEPO_SELECT-LIFNR'. bdcdata-fval = v_lifnr. APPEND bdcdata. CLEAR bdcdata. bdcdata-program = 'SAPLMEGUI'. bdcdata-dynpro = '0103'. bdcdata-dynbegin = 'X'. APPEND bdcdata. bdcdata-fnam = 'MEPO_SELECT-WAERS'. bdcdata-fval = v_waers. APPEND bdcdata. CLEAR bdcdata. bdcdata-program = 'SAPLMEGUI'. bdcdata-dynpro = '0200'. bdcdata-dynbegin = 'X'. APPEND bdcdata. bdcdata-fnam = 'MEPO_CREATE-EBELN'. bdcdata-fval = v_ebeln. APPEND bdcdata. CLEAR bdcdata. bdcdata-program = 'SAPLMEGUI'. bdcdata-dynpro = '0200'. bdcdata-dynbegin = 'X'. APPEND bdcdata. bdcdata-fnam = 'MEPO_CREATE-EKORG'. bdcdata-fval = '1000'. APPEND bdcdata. CLEAR bdcdata. bdcdata-program = 'SAPLMEGUI'. bdcdata-dynpro = '0200'. bdcdata-dynbegin = 'X'. APPEND bdcdata. bdcdata-fnam = 'MEPO_CREATE-BSART'. bdcdata-fval = v_bsart. APPEND bdcdata. CLEAR bdcdata. bdcdata-program = 'SAPLMEGUI'. bdcdata-dynpro = '0200'. bdcdata-dynbegin = 'X'. APPEND bdcdata. bdcdata-fnam = 'MEPO_CREATE-BUKRS'. bdcdata-fval = v_bukrs. APPEND bdcdata. CLEAR bdcdata. bdcdata-program = 'SAPLMEGUI'. bdcdata-dynpro = '0200'. bdcdata-dynbegin = 'X'. APPEND bdcdata. bdcdata-fnam = 'MEPO_CREATE-LIFNR'. bdcdata-fval = v_lifnr. APPEND bdcdata. CLEAR bdcdata. bdcdata-program = 'SAPLMEGUI'. bdcdata-dynpro = '0200'. bdcdata-dynbegin = 'X'. APPEND bdcdata. bdcdata-fnam = 'MEPO_CREATE-WAERS'. bdcdata-fval = v_waers. APPEND bdcdata. CLEAR bdcdata. bdcdata-program = 'SAPLMEGUI'. bdcdata-dynpro = '0200'. bdcdata-dynbegin = 'X'. APPEND bdcdata. bdcdata-fnam = 'MEPO_CREATE-ABSAK'. bdcdata-fval = 'X'. APPEND bdcdata. CLEAR bdcdata. bdcdata-program = 'SAPLMEGUI'. bdcdata-dynpro = '0200'. bdcdata-dynbegin = 'X'. APPEND bdcdata. bdcdata-fnam = 'MEPO_CREATE-BEDAT'. bdcdata-fval = sy-datum. APPEND bdcdata. CLEAR bdcdata. bdcdata-program = 'SAPLMEGUI'. bdcdata-dynpro = '0200'. bdcdata-dynbegin = 'X'. APPEND bdcdata. bdcdata-fnam = 'MEPO_CREATE-ERNAM'. bdcdata-fval = sy-uname. APPEND bdcdata. CLEAR bdcdata. bdcdata-program = 'SAPLMEGUI'. bdcdata-dynpro = '0200'. bdcdata-dynbegin = 'X'. APPEND bdcdata. bdcdata-fnam = 'MEPO_CREATE-LOEKZ'. bdcdata-fval = 'X'. APPEND bdcdata. CLEAR bdcdata. bdcdata-program = 'SAPLMEGUI'. bdcdata-dynpro = '0210'. bdcdata-dynbegin = 'X'. APPEND bdcdata. bdcdata-fnam = 'MEPO_CREATE-EBELN'. bdcdata-fval = v_ebeln. APPEND bdcdata. CLEAR bdcdata. bdcdata-program = 'SAPLMEGUI'. bdcdata-dynpro = '0211'. bdcdata-dynbegin = 'X'. APPEND bdcdata. bdcdata-fnam = 'MEPO_CREATE-EBELN'. bdcdata-fval = v_ebeln. APPEND bdcdata. CLEAR bdcdata. bdcdata-program = 'SAPLMEGUI'. bdcdata-dynpro = '0211'. bdcdata-dynbegin = 'X'. APPEND bdcdata. bdcdata-fnam = 'MEPO_CREATE-PO_TEXT'. bdcdata-fval = '采购合同文本'. APPEND bdcdata. CALL FUNCTION 'BDC_INSERT' EXPORTING program = bdcdata-program dynpro = bdcdata-dynpro dynbegin = bdcdata-dynbegin TABLES bdcdata = bdcdata. CALL FUNCTION 'BDC_TRANSACTION' EXPORTING update_task = 'S' EXCEPTIONS OTHERS = 1. ``` 在该示例中,我们使用了 PARAMETERS 语句定义了用户需要输入的采购合同信息,然后将这些信息替换到 BDC 数据中。最后通过调用 BDC_INSERT 和 BDC_TRANSACTION 函数执行 BDC 事务,创建采购合同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值