Appearance
锁程序实例
一、调用锁实例
下面练习在程序中调用前面生成的锁函数ENOUEUE EZ ZEMP'的程序
二、实例操作
实例1
abap
REPORT Z08 01.
CALL FUNCTION 'ENQUEUE_EZ_ZEMP
EXPORTING
MODE_ZEMP = 'E'
MANDT =SY-MANDT
EMP_NO ='0001'
X_EMP_NO =''
_SCOPE ='2'
_WAIT =''
_COLLECT =''
IF sy-subrc eq 0.
WRITE 'Data is Locked'
ENDIF.
执行[例 8-1],则会显示数据被锁的信息。若在新程序中没有使用ENQUEUE_EZ_ZEMP
函数后直接执行UPDATE ZEMP
语句,则会更新表数据。即表示若要使SAP 锁机构有效运行就需要在所有程序中都要设置加/解锁函数。 在设置锁的状态下,从别的程序对相同数据提出锁请求。为了确认是否正确设置了锁,重新创建了一个执行锁的程序[例 8-2]。 实例2
abap
REPORT z08_02.
CALL FUNCTION 'DEQUEUE_EZ_ZEMP'
EXPORTING
mode_zemp ='E'
mandt =sy-mandt
emp_no ='0001'
x_emp_no =''
_scope ='3'
_synchron =''
_collect =''.
CALL FUNCTION ENQUEUE EZ ZEMP
EXPORTING
mode_zemp ='E'
mandt = sy-mandt
emp_no ='0001'
x_emp_no =''
_scope ='2'
_wait =''
_collect =''.
IF sy-subrc NE 0.
WRITE 'Data is Locked'.
ENDIF.
锁只有在相同程序中进行加/解锁,因此在A程序中设置的锁不能在B程序中解锁。即在[例 8-1]中已经设置了锁,因此在[例8-2]中无法重新设置锁且也无法用DEQUEUE_EZ_SFLIGHT
函数解别的程序的锁。DEQUEUE函数执行后不返回系统变量,因此无法确认成功与否。 换句话说,如ENQUEUE_EZ_SFLIGHT
函数一样无法用系统变量SY-SUBRC
进行检查。因此在一个程序中始终要同时使用ENQUEUE
、DEQUEUE
函数。调用ENQUEUE
函数后再调用DEQUEU_ALL
函数也是个不错的方法。DEQUEU_ALL
函数一次性释放多个锁对象。[例8-3]是设置锁以后,当程序结束前解除所有锁的功能。 实例3
abap
REPORT z08 03.
CALL FUNCTION 'ENQUEUE_EZ_ZEMP'
~ 中间省略~
CALL FUNCTION 'DEQUEUE_ALL'
EXPORTING
SYNCHRON =''