使用SAP GUI脚本停止长时间运行的事务

2020-08-31 04:19发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)嗨,伴侣, 我在努力处理一个案...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,伴侣,

我在努力处理一个案件可能很简单,但是却使我的生活陷入了困境。

方案:我从Excel中的VBA通过GUI脚本访问tcode。 我应用了一些过滤器,然后执行该过滤器,最终使我得到了带有数据集的ALV网格表。

挑战很简单。 我有一个能够处理运行时仍然可以的条件的代码,但是应该使用诸如"停止事务"之类的命令,该命令很容易手动使用,但永远不会在录音中占据一席之地。 或者,至少,我无法记录这个简单的步骤。

只是为了清楚地看到它,下面是代码的重要片段:

昏暗的sap_application,连接数,已过去的秒数,fityirc

设置sapGuiAuto = GetObject(" SAPGUI")
设置sap_application = SapGuiAuto.GetScriptingEngine
设置连接= sap_application.Children(0)
设置会话= Connection.Children(0)

'这里我使用一个对象来应用执行按钮-这种方式与SAP运行时并行,可以继续执行VBA脚本。
perec = session.FindById(" wnd [0]/tbar [1]/btn [8]")。press

',我们在此处设置一个循环以检查系统是否在特定时间内繁忙,然后我们可能会中断:
Do
Application.Wait(Now + TimeValue(" 0:00:05"))
SecondsElapsed = SecondsElapsed + 5
fityirc = session.Busy()

循环直到秒过去> = 100


如果fityirc = True,那么
',麻烦就来了。 我无法弄清楚应该使用什么命令来简单地使Stop Transaction命令起作用。
'下面的此解决方案将不起作用,因为它仅在会话不忙时才起作用-Stop Transaction可以在这里做得很好。 > session.FindById(" wnd [0]/tbar [0]/okcd")。Text ="/img/ns000"
Application.Workbooks.Add
ActiveWorkbook.SaveAs文件名:= _
TargetPath1&" FAILED_"和ExtractName _
,文件格式:= xlUnicodeText,CreateBackup:= False
如果


结束

预先感谢您将此操作转移到某个地方。

1条回答
黑丝骑士
2020-08-31 04:57 .采纳回答

对此没有任何帮助,我发现可以修改以达到目的的解决方案-我与其他成员共享的解决方案可能也有类似的问题。

感谢Script Man发布他的提示:

https://stackoverflow.com/questions/51172626/stop-transaction-in-sap-with-vba/58413446#58413446

这是我编写的代码,包括以编程方式关闭长时间运行的会话的解决方案以及计时器功能。 可以。

'检查是否已打开额外的会话以关闭长时间运行的会话
 '如果需要打开一个
 关于错误继续
 设置session1 = Connection.Children(1)
 如果Err.Number <> 0然后
    session.CreateSession
     Application.Wait(现在+ TimeValue(" 0:00:05"))
     重新设置会话,确保您将第一个会话用于实际工作,并将session1保持在后台
     设置会话= Connection.Children(0)
     设置session1 = Connection.Children(1)
     错误清除
 出错时转到0
 万一

 '获取第一个会话的ID,因此您可以在需要时输入正确的终止交易代码
 sessionID = Mid(session.ID,(InStrRev(session.ID," [")+ 1),1)
 终结符="/img/i"&sessionID + 1
 session.FindById(" wnd [0]")。最大化

 '一些代码来了

 '在这里,我使用一个对象来应用执行按钮-这种方式与SAP运行时并行,VBA脚本可以继续进行。
 perec = session.FindById(" wnd [0]/tbar [1]/btn [8]")。press

 '在这里,我们设置了一个循环来检查系统在特定时间内是否繁忙,然后我们可能会中断:
 做
 Application.Wait(现在+ TimeValue(" 0:00:05"))
 秒已逝=秒已逝+ 5
 fityirc = session.Busy()
 如果fityirc = False,则
 退出做
 万一
 循环直到秒已过去> = 100


 如果fityirc = True,则
 session1.FindById(" wnd [0]/tbar [0]/okcd")。Text =终结符
 session1.FindById(" wnd [0]")。sendVKey 0
 万一

 '...等等。 此解决方案应用于循环中,无需人工干预即可大规模提取数据集。

一周热门 更多>