如何停止 SAP GUI 脚本
本文关键字:脚本 GUI SAP 何停止 | 更新日期: 2023-09-27 18:31:50
借助在Stack Overflow上找到的代码示例,我成功地设法连接到SAP GUI的现有实例。
但是,我不知道如何脱离SAP GUI并停止脚本编写。
在我的代码完成后,在 SAP GUI 窗口中,我仍然可以看到小理发师杆旋转,表明我仍然连接到它。
注意:我不想终止用户的会话。
我在这里的目的只是连接到他们当前的联系,从他们的会话中获取一些信息,然后发布我对他们联系的参与。
我想以"正确"的方式去做......而不是猜测并让用户陷入混乱。
这是我用来建立连接的脚本(SapInfo
和SapInfoItem
是我自己的结构):
public static Dictionary<string, SapInfoItem> get_sapInfo()
{
Dictionary<string, SapInfoItem> sapInfo = new Dictionary<string, SapInfoItem>();
GuiApplication sapGuiApp;
SapROTWr.CSapROTWrapper sapROTWrapper = new SapROTWr.CSapROTWrapper();
object SapGuilRot = sapROTWrapper.GetROTEntry("SAPGUI");
object engine = SapGuilRot.GetType().InvokeMember("GetSCriptingEngine", System.Reflection.BindingFlags.InvokeMethod,
null, SapGuilRot, null);
sapGuiApp = engine as GuiApplication;
GuiConnection connection = sapGuiApp.Connections.ElementAt(0) as GuiConnection;
foreach (GuiSession child_session in connection.Children)
{
GuiSession session = child_session as GuiSession; //connection.Children.ElementAt(0) as GuiSession;
SapInfoItem sii = new SapInfoItem();
sii.system_name = session.Info.SystemName;
sii.client = session.Info.Client;
sii.client = session.Info.Program;
sii.screen_number = session.Info.ScreenNumber;
sii.handle = session.ActiveWindow.Handle;
sii.transaction = session.Info.Transaction;
sapInfo.Add(sii.handle.ToString("X"), sii);
}
connection.CloseConnection();
return sapInfo;
}
使用 Excel vba 运行脚本时遇到了同样的问题。
脚本结束后,"小理发杆"仍在运行,但我注意到停止宏会断开脚本与 SAP 的连接。
事实上,这是因为我使用了一个公共变量来保存"session"对象,所以它在脚本结束后仍然在内存中。我通过在脚本末尾销毁对会话对象的引用来解决此问题。
因此,请检查您是否在代码末尾销毁对公共对象的所有引用,它可以解决您的问题。
在 vba 中,执行此操作的代码是
Set session = Nothing
在 C# 中,它应该是
obj = Null;