当前位置 博文首页 > 少年休闲海:【ABAP】SAP判断单据是否被锁定

    少年休闲海:【ABAP】SAP判断单据是否被锁定

    作者:[db:作者] 时间:2021-09-14 13:30

    SAP判断单据是否被锁定

    通常要是某个SAP单据被其他用户正在处理,我们进入时会有如下提示:

    ?要是在开启远程模块的函数中碰到这样的问题会提示给出Dump信息,非常不友善,那么能否在处理单据之前判定该单据是否被锁定呢?

    起初我是通过下面的例子进行处理的,直接上源码。

              DATA : LT_ENQ LIKE TABLE OF SEQG7 WITH HEADER LINE .
              DATA : LV_GARG TYPE EQEGRAARG.
              LV_GARG = SY-MANDT && VBELN.
              CALL FUNCTION 'ENQUE_READ2'
                EXPORTING
                  GCLIENT = SY-MANDT
                  GNAME   = 'LIKP'
    *             GARG    = ' '
    *             GUNAME  = SY-UNAME
    *             OPCODE2 = 1
    *          IMPORTING
    *             NUMBER  =
    *             SUBRC   =
                TABLES
                  ENQ     = LT_ENQ.
              IF LT_ENQ[] IS NOT INITIAL.
                READ TABLE LT_ENQ WITH KEY GARG = LV_GARG.
                IF SY-SUBRC = 0 .
                  EX_VBELN = VBELN.
                  ERROR = 'E'.
                  CALL FUNCTION 'MESSAGE_TEXT_BUILD'
                    EXPORTING
                      MSGID               = 'VL'
                      MSGNR               = '046'
                      MSGV1               = VBELN
                      MSGV2               = LT_ENQ-GUNAME
    *                 MSGV3               = ' '
    *                 MSGV4               = ' '
                    IMPORTING
                      MESSAGE_TEXT_OUTPUT = MSAGE.
    
                  EXIT.
                ENDIF.
              ENDIF.

    上面的代码可以适用于一般情况,但是某些时候仍会报“SYSTEM_FAILURE”的错误,让人实难捉摸不透。

    下面是改良后的代码,暂时未作测试,但是抛出了上面的异常信息,待后续反馈后更新。

              "判断是否被锁定
              CALL FUNCTION 'ENQUEUE_EVVBLKE'
                EXPORTING
                  MODE_LIKP      = 'V'
                  MANDT          = SY-MANDT
                  VBELN          = VBELN
                EXCEPTIONS
                  FOREIGN_LOCK   = 1
                  SYSTEM_FAILURE = 2
                  OTHERS         = 3.
              IF SY-SUBRC <> 0.
                CALL FUNCTION 'MESSAGE_TEXT_BUILD'
                  EXPORTING
                    MSGID               = 'VL'
                    MSGNR               = '046'
                    MSGV1               = VBELN
                    MSGV2               = SY-MSGV1
    *               MSGV3               = ' '
    *               MSGV4               = ' '
                  IMPORTING
                    MESSAGE_TEXT_OUTPUT = MSAGE.
                ERROR = 'E'.
                EXIT.
              ENDIF.

    ?

    ?

    cs