当前位置 博文首页 > 少年休闲海:【ABAP】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