1、业务场景:
A用户正在打开订单,订单已上锁;B用户打开时只允许查看并提醒由哪个用户正在操作该笔订单。
2、函数使用:ENQUEUE_READ
代码示例:
DATA:LV_MESSAGE TYPE SY-MSGV1,
LV_UNAME TYPE UNAME.
DATA:LV_GARG TYPE SEQG3-GARG.
DATA:LT_ENQ TYPE STANDARD TABLE OF SEQG3,
LS_ENQ LIKE LINE OF LT_ENQ.
ASSIGN COMPONENT 'DB_KEY' OF STRUCTURE GS_SETPLAN TO FIELD-SYMBOL(<FS_KEY>).
CHECK SY-SUBRC = 0.
"判断主键是否上锁
CALL FUNCTION 'ENQUEUE_EZRRE_D_SETPLAN'
EXPORTING
* MODE_ZRRE_D_SETPLAN = 'E'
MANDT = SY-MANDT
DB_KEY = <FS_KEY>
EXCEPTIONS
FOREIGN_LOCK = 1
SYSTEM_FAILURE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
GV_LOCK = 'X'."已上锁
CLEAR:LV_GARG.
LV_GARG = SY-MANDT && <FS_KEY>. "当前客户端编号+Gname表主键
CONDENSE LV_GARG NO-GAPS."移除空格
CALL FUNCTION 'ENQUEUE_READ'
EXPORTING
GCLIENT = SY-MANDT "当前客户端
"此处用户名必须置空,默认为当前用户名(导致只能查出当前用户上锁的数据)
GUNAME = ''
GNAME = 'ZRRE_D_SETPLAN' "上锁对应的表
GARG = LV_GARG
TABLES
ENQ = LT_ENQ.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
READ TABLE LT_ENQ INTO LS_ENQ INDEX 1.
CLEAR:LV_UNAME.
LV_UNAME = LS_ENQ-GUNAME.
LV_MESSAGE = '用户' && LV_UNAME && '正在编辑该合同结算策划单,仅允许查看!'.
MESSAGE LV_MESSAGE TYPE 'W'.
ENDIF.
此处注意参数:
GCLIENT : 当前客户端;
GUNAME : 此处用户名必须置空,默认为当前用户名(导致只能查出当前用户上锁的数据);
GNAME :数据上锁对应的表;
GARG :由当前客户端编号+Gname表主键拼接而成,此处为空时,结果LT_ENQ为该表对应全部被上锁的数据。