Appearance
其他
一、 ENQUEUE_READ 函数
如多个用户同时修改一个订单,在SAP系统中经常会发生修改同一个数据的情况。在开发程序中利用 ENQUEUE_READ函数可以检查该数据是否被加锁。标准程序修改数据时始终会加锁,因此要习惯用 ENQUEUE_READ函数对锁设置状态进行检查。
abap
CALL FUNCTION 'ENQUEUE_READ'
EXPORTING
GCLIENT =SY-MANDT
* GNAME =''
* GARG =''
* GUNAMME =SY-UNAME
* LOCAL =''
*IMPORTING
* NUMBER =
* SUBRC =
TABLES
eng =lt eng
ENQUEUE_READ函数返回被加锁的表数据列表。即使不使用锁对象,只要用ENQUEUE_READ函数就可以查询被加锁状态的所有列表对象。ENQUEUE_READ函数的参数请参照[表 8-1]。
ENQUEUE_READ在T-CODE:SE37 中执行,则显示现在被加锁的对象列表。
[例 8-4]是从生产订单表'AUFK'中读取被加锁的对象后检查tseqg 内表中是否存在相应生产订单的实例。若存在被加锁的订单,则等待1秒后执行5次循环。 [例 8-4]
abap
REPORT z08_04.
DATA lt_seqg LIKE seqg3 OCCURS 0 WITH HEADER LINE.
DATA lv_aufnr TYPE aufr VALUE '0000123456'.
DO 5 TIMES.
CALL FUNCTION 'ENQUEUE_READ'
EXPORTING
gname ='AUFK'
guname = space
TABLES
eng= lt_seqg
EXCEPTIONS
communication_failure=1
OTHERS =2.
IF NOT It_seqg[] IS INITIAL.
READ TABLE lt_segg WITH KEY garg+3(12)=lv_aufnr.
IF sy-subrc EQ 0.
WAIT UP TO 1 SECONDS.
ELSE.
EXIT.
ENDIF.
ELSE.
EXIT.
ENDIF.
ENDDO.
二、Editor Lock 解除
在 ABAP 编辑器中修改程序时,EditorLock可以防止其他人对此表进行修改。即,与本章的锁对象是不同的两个概念。
当其他开发者修改程序时,该程序会被加锁。将程序放到修改状态下,到T-CODE:SM12
中查询就可以显示相应程序的列表。
若在公休日需要紧急修改程序时要解除 EditorLock 状态。这种情况下可以执行下列例子程序来解除锁。TRDIR
表是存储程序名、创建日期、修改日期、EditorLock
设置与否信息<的视图。
[例 8-5]
abap
REPORT z08_05.
TABLES : trdir.
PARAMETERS: p_prog LIKE trdir-name OBLIGATORY.
START-OF-SELECTION.
SELECT SINGLE * FROM trdir WHERE name = p_prog.
IF sy-subrc = 0.
IF trdir-edtx = 'X'.
MOVE '' TO trdir-edtx.
MODIFY trdir.
WRITE: /'Editor Lock was removed from', p_prog.
ELSE.
WRITE: /'Program', p_prog, 'does not have an Editor Lock'.
ENDIF.
ELSE.
WRITE: /'No match found for program', p_prog.
ENDIF.