博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

锁对象

Posted on 2016-02-03 16:10  jansum  阅读(246)  评论(0)    收藏  举报

SAP中锁模式有三种

  模式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模式的不可以。
    当激活锁对象的时候,系统会自动创建两个FM,ENQUEUE_<锁对象名>和DEQUEUE_<锁对象名>,分别用来锁定和解锁。 
 
锁定和解锁代码:
CALL FUNCTION 'ENQUEUE_EZMM_T_AE12'
  EXPORTING
    mode_zmm_t_ae12 = 'X'
    mandt           = sy-mandt
  EXCEPTIONS
    foreign_lock    = 1
    system_failure  = 2
    OTHERS          = 3.
CALL FUNCTION 'DEQUEUE_EZMM_T_AE12'
    EXPORTING
      mode_zmm_t_ae12 = 'X'
      mandt           = sy-mandt.

 

有个比较容易忽略的点是,很多bapi跑完调用BAPI_TRANSACTION_COMMIT提交的时候会把所有锁都释放掉