ABAP实战案例--获取当前数据由哪个用户锁住
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-MANDTDB_KEY = <FS_KEY>EXCEPTIONSFOREIGN_LOCK = 1SYSTEM_FAILURE = 2OTHERS = 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'EXPORTINGGCLIENT = SY-MANDT "当前客户端"此处用户名必须置空,默认为当前用户名(导致只能查出当前用户上锁的数据)GUNAME = ''GNAME = 'ZRRE_D_SETPLAN' "上锁对应的表GARG = LV_GARGTABLESENQ = LT_ENQ.IF SY-SUBRC <> 0.
* Implement suitable error handling hereENDIF.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为该表对应全部被上锁的数据。