
用于设锁的 FM 为: ENQUEUE_<锁对象名>。它用于在锁表(Lock Table)中生成一个锁项(Lock Entry)。若设锁不成功的话,就会在 Return 中反映出来。
用于释放锁的 FM 为:DEQUEUE_<锁对象名>。它用于从锁表中删除一个锁项。
在 ABAP 程序中,只需使用 "CALL FUNCITION ..." 语句就可以调用它们。
这两个锁 FM 是在 SAP 系统的一个特殊工作进程中执行的,专门进行锁管理。它运行在一个单独的服务器上,而该服务器专门用于维护整个 SAP 系统的主锁表(Central Locak Table)。
有两种锁类型:
共享锁——只读锁,一个用户正在读数据时,阻止其他用户更改该数据。
独占锁——可写锁,一个用户正在修改数据时,阻止其他用户更改该数据。
在se11中创建锁对象Lock Object创建Lock Object后,激活,会产生两个Function,
如你的锁对象叫EZTEST,那么会生成ENQUEUE_EZTEST以及DEQUEUE_EZTEST
调用这两个function进行加锁及解锁,具体的上网查一下锁对象的内容
注意锁对象的三种类型,独占锁、累积锁和非累积锁的区别
需求是当系统更改了mm02 的长文本的时候做一个增强,找了半天,值是读到了,可长文本的条目也太多了,根本没法确定哪条是对的这个时候怎么办,先找个隐式增强,保证mm01 和 mm02 *** 作都会经给找个地方
SELECT SINGLE CLASSNAME
FROM RZLLITAB
INTO G_CLASSNAME "Server Group Name
WHERE APPLSERVER = G_APPLSERVER
AND GROUPTYPE = 'S'. "S:服务器组,空:登陆组
LV_MATNR = WMARA-MATNR.
CALL FUNCTION 'ZFM_SAP_SRM_011' STARTING NEW TASK LV_MATNR
DESTINATION IN GROUP G_CLASSNAME
PERFORMING FRM_SAP_CRM ON END OF TASK
EXPORTING
IV_MATNR = LV_MATNR.
FORM FRM_SAP_CRM USING NAME.
RECEIVE RESULTS FROM FUNCTION 'ZFM_SAP_SRM_011'.
ENDFORM.
DATA : GNAME LIKE SEQG3-GNAME VALUE 'MARA',
GARG LIKE SEQG3-GARG,
GUNAME LIKE SEQG3-GUNAME,
LT_ITAB TYPE ZFM_SAP_SRM_007_INS,
LS_ITAB LIKE LINE OF LT_ITAB,
IM_JSON_STR TYPE STRING,
EX_JSON_STR TYPE STRING,
LT_OUTS TYPE ZFM_SAP_SRM_007_OUTS,
LS_OUTS LIKE LINE OF LT_OUTS,
LV_KEY01 TYPE ZKEY01,
RAW_ENQ LIKE SEQG7 OCCURS 0 WITH HEADER LINE.
CONCATENATE SY-MANDT IV_MATNR INTO GARG.
BREAK GB05.
DO 10 TIMES.
CALL FUNCTION 'ENQUE_READ2'
EXPORTING
GNAME = GNAME
GARG = GARG
GUNAME = GUNAME
TABLES
ENQ = RAW_ENQ.
IF RAW_ENQ[] IS INITIAL.
EXIT.
ELSE.
WAIT UP TO 1 SECONDS.
ENDIF.
ENDDO.
IF RAW_ENQ[] IS NOT INITIAL.
ZTYPE = 'E'.
CONCATENATE '物料号码' IV_MATNR '被锁定,请稍后处理!' INTO ZMESSAGE.
EXIT.
ENDIF.
最终结果
原理是启用异步调用后,你程序执行 我和你是并行的,但是我读取物料号是否被你原来程序锁止了,如果你锁止放开了,我这个程序拿到物料号,当然完成一个长文本读取是so easy.
你耍流氓我也来,哈哈 等你mm01 或者mm02跑完了 我再去抓你保存好的数据,然后再进行 *** 作
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)