ABAP BAPI_PO_RELEASE采购订单审批:NO_COMMIT

在这个函数中,参数No_COMMIT,是默认为空的,也就是说函数执行后会默认将数据提交到数据库,当我对多条数据进行审批时,如果遇到失败的数据,想将之前已经审批通过的数据进行回滚,这时候发现已经回滚不了了,数据已经被提交到数据库了,所以,这种情况就需要给NO_COMMIT赋值'X'。

 代码:

  LOOP AT l_tab_oadata INTO l_rec_oadata.
    CLEAR l_wrk_status.
    CLEAR l_wrk_sapno.
    l_wrk_status = l_rec_oadata-status.
    l_wrk_sapno = l_rec_oadata-sap_no.

    CASE l_wrk_status.

      WHEN  'A'. "审批通过
        CLEAR l_wrk_relcod.
        REFRESH l_tab_return.
        l_wrk_relcod = 'B2'.

        CALL FUNCTION 'BAPI_PO_RELEASE'
          EXPORTING
            purchaseorder          = l_wrk_sapno
            po_rel_code            = l_wrk_relcod
            use_exceptions         = 'X'
            no_commit              = 'X'
          TABLES
            return                 = l_tab_return
          EXCEPTIONS
            authority_check_fail   = 1
            document_not_found     = 2
            enqueue_fail           = 3
            prerequisite_fail      = 4
            release_already_posted = 5
            responsibility_fail    = 6
            OTHERS                 = 7.

        LOOP AT l_tab_return INTO l_rec_return WHERE type = 'E' OR type = 'A'.
          EXIT.
        ENDLOOP.
        IF sy-subrc = 0.
          l_flg_err = 'X'.
          EXIT.
        ENDIF.


      WHEN 'B'."审批拒绝

        CLEAR l_wrk_relcod.
        REFRESH l_tab_return.
        l_wrk_relcod = 'B1'.

        CALL FUNCTION 'BAPI_PO_RESET_RELEASE'
          EXPORTING
            purchaseorder            = l_wrk_sapno
            po_rel_code              = l_wrk_relcod
            use_exceptions           = 'X'
          TABLES
            return                   = l_tab_return
          EXCEPTIONS
            authority_check_fail     = 1
            document_not_found       = 2
            enqueue_fail             = 3
            prerequisite_fail        = 4
            release_already_posted   = 5
            responsibility_fail      = 6
            no_release_already       = 7
            no_new_release_indicator = 8
            OTHERS                   = 9.

        LOOP AT l_tab_return INTO l_rec_return WHERE type = 'E' OR type = 'A'.
          EXIT.
        ENDLOOP.
        IF sy-subrc = 0.
          l_flg_err = 'X'.
          EXIT.
        ENDIF.

      WHEN OTHERS.

    ENDCASE.

    APPEND l_rec_send TO l_tab_send.
    CLEAR : l_rec_send,l_rec_oadata.

  ENDLOOP.

  IF l_flg_err IS INITIAL.
    l_rec_send-code = 0. "成功
    IF l_rec_send-message = ''.
      l_rec_send-message = '操作处理成功!'.
    ENDIF.

    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.
  ELSE.
    l_rec_send-code = 1. "失败
    l_rec_send-message = l_rec_return-message.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
  ENDIF.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值