如何让SAP中自己开发的程序只运行一个实例?
自己在SAP中开发了一个程序,要求同时只有一个用户执行它,即执行前先检查是否已有其他用户已经在执行该程序了(不想用锁对象方法实现,因为要申请修改标准程序KEY,请求要放在...
自己在SAP中开发了一个程序,要求同时只有一个用户执行它,即执行前先检查是否已有其他用户 已经在执行该程序了(不想用锁对象方法实现,因为要申请修改标准程序KEY,请求要放在SAP包中, 太麻烦,也怕万一出什么问题)谁能给个解决方法啊,先谢谢了?
展开
2个回答
2012-03-18
展开全部
如果你的程序里没有类似'BAPI_TRANSACTION_COMMIT'会自动解当前事务所有锁的函数,在程序开 始放上这个函数就OK了,如果你的版本有事务STVARV倒是可以尝试一下不用锁的方法。 CALL FUNCTION 'ENQUEUE_ESINDX' EXPORTING * ? MODE_INDX = 'E' ? RELID = 'ZZ' ? SRTFD = sy-repid ? SRTF2 = 0 EXCEPTIONS ? FOREIGN_LOCK = 1 ? SYSTEM_FAILURE = 2. IF SY-SUBRC NE 0. ?MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO ? ? ? ? ?WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. * ?WRITE: 'ERROR:',PRG,'is already running'. * ?EXIT. ENDIF.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
FORM CHECK_RUN.
DATA : TH_OPCODE(1) TYPE X,
WITH_CPU TYPE X VALUE 0.
CONSTANTS: OPCODE_WP_LIST LIKE TH_OPCODE VALUE 1.
DATA: BEGIN OF WP_TABL OCCURS 10.
INCLUDE STRUCTURE WPINFO.
DATA: END OF WP_TABL.
DATA:WP_TABL2 LIKE WP_TABL OCCURS 0 WITH HEADER LINE.
FREE : WP_TABL.
CALL 'ThWpInfo'
ID 'OPCODE' FIELD OPCODE_WP_LIST
ID 'TAB' FIELD WP_TABL-*SYS*
ID 'CPU' FIELD WITH_CPU.
LOOP AT WP_TABL WHERE WP_REPORT = SY-REPID.
WP_TABL2-WP_REPORT = WP_TABL-WP_REPORT.
APPEND WP_TABL2.
ENDLOOP.
IF LINES( WP_TABL2 ) = 2.
MESSAGE S000(OO) WITH '已经有其他用户在运行该程序,请稍后再试!' DISPLAY LIKE 'E'.
STOP.
ENDIF.
ENDFORM. "check_run
DATA : TH_OPCODE(1) TYPE X,
WITH_CPU TYPE X VALUE 0.
CONSTANTS: OPCODE_WP_LIST LIKE TH_OPCODE VALUE 1.
DATA: BEGIN OF WP_TABL OCCURS 10.
INCLUDE STRUCTURE WPINFO.
DATA: END OF WP_TABL.
DATA:WP_TABL2 LIKE WP_TABL OCCURS 0 WITH HEADER LINE.
FREE : WP_TABL.
CALL 'ThWpInfo'
ID 'OPCODE' FIELD OPCODE_WP_LIST
ID 'TAB' FIELD WP_TABL-*SYS*
ID 'CPU' FIELD WITH_CPU.
LOOP AT WP_TABL WHERE WP_REPORT = SY-REPID.
WP_TABL2-WP_REPORT = WP_TABL-WP_REPORT.
APPEND WP_TABL2.
ENDLOOP.
IF LINES( WP_TABL2 ) = 2.
MESSAGE S000(OO) WITH '已经有其他用户在运行该程序,请稍后再试!' DISPLAY LIKE 'E'.
STOP.
ENDIF.
ENDFORM. "check_run
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询