这个时候怎么办,先找个隐式增强,保证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跑完了 我再去抓你保存好的数据,然后再进行 *** 作1、cmod首先进入的是项目的编辑界面,要么创建一个新项目,要么修改原有的项目,然后将项目分配给增强文件rsap0001和激活出口函数以后,才能通过出口函数进入到function module界面进行abap代码编辑,而smod直接进入的就是增强文件rsap0001的输入界面,无需再次进行项目编辑,然后点进去以后可以双击相应的出口函数,直接进入到function module界面进行abap代码编辑,完成功能增强的 *** 作。
2、权限问题,smod的权限很大,通常情况下在项目上我们只有cmod的权限,而没有smod的权限,虽然smod和cmod都可以调用增强文件rsap0001,最终也都可以实现功能增强的 *** 作,但是smod是对所有的出口函数的 *** 作,而cmod只可以为部分特定的出口函数做一个项目,也就是说在一个建立好的项目中所用到的出口函数就不能再被另外一个项目用了,比如我再建立一个新项目,用到rsap0001的时候,就会提示一行德文,它的意思是已经被某某项目用掉了。ABAP增强里面是有限制的,具体要看增强的位置。有些增强不能报MESSAGE,有可能是增强对应的函数或接口方法有消息传出参数
如:IF_EX_LE_SHP_DELIVERY_PROC->DELIVERY_FINAL_CHECK这个接口方法的参数CT_FINCHDEL就是用来将消息传出给标准程序的,这样添加进来的消息就会以标准的形式报给用户
还有的增强是在CALL FUNCTION IN UPDATE TASK中的,在这种增强中报I或者W等非错误的消息是会被忽略的,而报E、A等错误类的消息则会导致一个更新失败,是因为它是异步触发的,它会在CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'的时候才去执行这些更新功能的。所以会出现这种情况。而且这种增强里面打的断点也不会有效,实际上它是执行的,但是不能调试。
所以增强里面报MESSAGE要看具体的增强点,不能随意去写。
希望对你有帮助!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)