Skip to content

锁程序实例

一、调用锁实例

  下面练习在程序中调用前面生成的锁函数ENOUEUE EZ ZEMP'的程序 alt text

二、实例操作

实例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 进行检查。因此在一个程序中始终要同时使用ENQUEUEDEQUEUE函数。调用ENQUEUE函数后再调用DEQUEU_ALL函数也是个不错的方法。DEQUEU_ALL函数一次性释放多个锁对象。[例8-3]是设置锁以后,当程序结束前解除所有锁的功能。 实例3

abap
REPORT z08 03.

CALL FUNCTION 'ENQUEUE_EZ_ZEMP'
~ 中间省略~
CALL FUNCTION 'DEQUEUE_ALL'
    EXPORTING
    SYNCHRON    =''