ABAPSAP判断单据是否被锁定
Posted SAP剑客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ABAPSAP判断单据是否被锁定相关的知识,希望对你有一定的参考价值。
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.
以上是关于ABAPSAP判断单据是否被锁定的主要内容,如果未能解决你的问题,请参考以下文章