背景:
当程序排了后台JOB,且正在运行时,用户又通过前台事务码去执行数据。
如下图:后台JOB正在运行着,用户又在前台去点击“生成归档号”,这样会导致同一笔数据错乱,或者update自建表时,没update成功等等一系列问题存在。
解决方案:
当后台在运行数据时,前台应该卡住,不允许手动运行程序,
刚好我这个报表在ALV下,在USER_COMMAND下添管控逻辑。
在SAP中TBTCP与TBTCO是保存JOB的表,可以通过这两张表判断。
其中TBTCO-STATUS:
-
"R"表示正在活动的;
-
"S"表示已释放,等待执行;
-
"F"表示完成,已结束。
FORM FRM_LOCK_BACKGRUND. DATA: L_SRTFD TYPE INDX-SRTFD VALUE SY-REPID, "定义程序名 L_DATE TYPE INDX-BEGDT. L_SRTFD = SY-REPID. L_DATE = SY-DATUM. CLEAR: GT_PLM_TBTCP[],GT_PLM_TBTCO[]. CLEAR: GW_PLM_TBTCP,GW_PLM_TBTCO. SELECT SINGLE * FROM TBTCP INTO GW_PLM_TBTCP WHERE PROGNAME = L_SRTFD AND SDLDATE = L_DATE. "#EC CI_NOORDER IF GW_PLM_TBTCP IS NOT INITIAL. SELECT * FROM TBTCO INTO TABLE GT_PLM_TBTCO WHERE JOBNAME = GW_PLM_TBTCP-JOBNAME AND STATUS = 'R'. ENDIF. IF GT_PLM_TBTCO[] IS NOT INITIAL. MESSAGE S000 WITH '后台系统正在处理,请稍后......!' DISPLAY LIKE 'E'. STOP. ENDIF. ENDFORM.