T-CODE—SE11
1、创建锁对象
-
模式E:当更改数据的时候设置为此模式。
-
模式S:本身不需要更改数据,但是希望显示的数据不被别人更改。
-
模式X:和E类似,但是不允许累加,完全独占。
[] 如果你在一个程序里成功对一个锁对象加锁之后,如果模式为E,其他用户不能再对这个锁对象加E、X、S模式的任意一种锁;
[] 如果你在一个程序里成功对一个锁对象加锁之后,如果模式为X,其他用户不能再对这个锁对象加E、X、S模式的任意一种锁;
[] 如果你在一个程序里成功对一个锁对象加锁之后,如果模式为S,其他用户不能再对这个锁对象加E、X模式的锁,但是可以加S模式的锁;
[] 如果你在一个程序里成功对一个锁对象加锁之后,如果模式为E,在这个程序,你还可以再对这个锁对象加E、S模式的锁,X模式的不可以。
[] 如果你在一个程序里成功对一个锁对象加锁之后,如果模式为X,在这个程序,你不可以再对这个锁对象加E、X、S模式的锁。
[] 如果你在一个程序里成功对一个锁对象加锁之后,如果模式为S,在这个程序,你还可以再对这个锁对象加S模式的锁,如果没有别的用户对其加S模式的锁,那么你还可以对其加E模式的锁。X模式的不可以。
勾选主键作为锁定固定行,不勾选直接锁整个表
在激活之后,会产生两个function module,一个用来对对象进行锁定,另一个是释放对象。二者的名字都很有规律。
DEQUEUE_<lock object的名字> 【示例:DEQUEUE_EZQMT007A】
ENQUEUE_<lock object的名字> 【示例:ENQUEUE_EZQMT007A】
ABAP 解锁/锁定账号
ABAP 防止程序重复执行
CALL FUNCTION 'ENQUEUE_ESRDIRE'
EXPORTING
name = sy-repid
_scope = '1'
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
"说明已经有程序在运行了。
ENDIF.
SAP 程序锁(非数据库锁),ABAP程序在同一时间只允许一人操作
CALL FUNCTION 'ENQUEUE_ES_PROG'
EXPORTING
MODE_TRDIR = 'E'
NAME = 'Z_PROGLOCK_MODEL'
X_NAME = ' '
_SCOPE = '2'
_WAIT = ' '
_COLLECT = ' '
EXCEPTIONS
FOREIGN_LOCK = 1
SYSTEM_FAILURE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.