防止用户操作数据库的并发问题,可以使用锁对象技术。
se11的最后一个功能是建立锁对象,例如对创建的数据库表加锁,命名可以是"E"+表名。
名字起好后点创建,输入锁对象短文本(描述),在tables选项中选择要加锁的表名,之后在下面的lock parameter中一般选择"E"(专用,累积),设置好后,一个锁对象就建好了,在lock parameter选项中,系统默认表的所有主键都是锁参数。根据个人需要可以删除不需要的参数。
之后在程序中,调用CALL FUNCTION ‘ENQUEUE_EZPSEINFNR‘和CALL FUNCTION ‘DEQUEUE_EZPSEINFNR‘两函数在程序中加锁和解锁,第一个函数用于在程序操作数据库之前上锁,后一个是程序操作数据库后将锁释放。代码如下:
CALL FUNCTION ‘ENQUEUE_EZPSEINFNR‘
EXPORTING
mode_zpseinfnr = ‘E‘
mandt = sy-mandt
proname = p_maktg
* IDNRK =
werks = p_werks
* X_PRONAME = ‘ ‘
* X_IDNRK = ‘ ‘
* X_WERKS = ‘ ‘
_scope = ‘2‘
* _WAIT = ‘ ‘
* _COLLECT = ‘ ‘
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3
.
IF sy-subrc <> 0.
uname = sy-msgv1.
MESSAGE s001 WITH ‘用户‘ uname ‘正在修改此工厂的项目:‘ p_maktg.
STOP.
ENDIF.
select zpesinfnr....
...
CALL FUNCTION ‘DEQUEUE_EZPSEINFNR‘
EXPORTING
mode_zpseinfnr = ‘E‘
mandt = sy-mandt