se11
的最后一个功能是建立锁对象,例如对创建的数据库表加锁,命名可以是
“E”+
表名(这块有的帐户权限可能不够建不了,找
basis
给权限吧)。
名字起好后点创建 , 输入锁对象短文本(描述) , 在 tables 选项中选择要加锁的表名 , 之后在下面的 lock parameter 中一般选择 “E”( 专用,累积 ), 设置好后 , 一个锁对象就建好了 , 在 lock parameter 选项中 , 系统默认表的所有主键都是锁参数。根据个人需要可以删除不需要的参数 。
名字起好后点创建 , 输入锁对象短文本(描述) , 在 tables 选项中选择要加锁的表名 , 之后在下面的 lock parameter 中一般选择 “E”( 专用,累积 ), 设置好后 , 一个锁对象就建好了 , 在 lock parameter 选项中 , 系统默认表的所有主键都是锁参数。根据个人需要可以删除不需要的参数 。
之后在程序中,调用CALL FUNCTION ‘ ENQUEUE_EZMATMOV ‘和CALL FUNCTION ‘ DEQUEUE_ EZMATMOV ‘两函数在程序中加锁和解锁,第一个函数用于在程序操作数据库之前上锁,后一个是程序操作数据库后将锁释放。代码如下:
data: l_mqid like ZMM_MES_MATM_LOG-MQID,
l_sentti like ZMM_MES_MATM_LOG-SENTTI,
l_USERID like ZMM_MES_MATM_LOG-USERID,
l_BWART like ZMM_MES_MATM_LOG-BWART.
data: l_errmsg(255).
CALL FUNCTION ‘ENQUEUE_EZMATMOV’
EXPORTING
mode_zmm_mes_matm_log = ‘E’
mandt = sy-mandt
mqid = l_mqid
sentti = l_sentti
userid = l_userid
bwart = l_bwart
* x_mqid = ’ ’
* x_sentti = ’ ’
* x_userid = ’ ’
* x_bwart = ’ ’
_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
* into l_errmsg.
* write: / l_errmsg.
MESSAGE e001(z001) WITH ‘多个用户不能同时对数据做操作处理!‘.
EXIT.
ENDIF.
select zpesinfnr….
…
CALL FUNCTION ‘ DEQUEUE_ EZMATMOV ‘
EXPORTING
mode_zpseinfnr = ‘E’
mandt = sy-mandt
.
附件是截图
最后在SE37中可以去看系统已经帮我们自动生成的锁定和解锁的函数。详细可以参考ENQUEUE_EZMATMOV和DEQUEUE_EZORDCFM,所建的锁定和解锁的函数都放在叫/1BCDWBEN/ZEN0000的函数组中