如何停止 SAP GUI 脚本

本文关键字:脚本 GUI SAP 何停止 | 更新日期: 2023-09-27 18:31:50

借助在Stack Overflow上找到的代码示例,我成功地设法连接到SAP GUI的现有实例。

但是,我不知道如何脱离SAP GUI并停止脚本编写。

在我的代码完成后,在 SAP GUI 窗口中,我仍然可以看到小理发师杆旋转,表明我仍然连接到它。

注意:我不想终止用户的会话。

我在这里的目的只是连接到他们当前的联系,从他们的会话中获取一些信息,然后发布我对他们联系的参与。

我想以"正确"的方式去做......而不是猜测并让用户陷入混乱。

这是我用来建立连接的脚本(SapInfoSapInfoItem是我自己的结构):

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;
}

如何停止 SAP GUI 脚本

使用 Excel vba 运行脚本时遇到了同样的问题。

脚本结束后,"小理发杆"仍在运行,但我注意到停止宏会断开脚本与 SAP 的连接。

事实上,这是因为我使用了一个公共变量来保存"session"对象,所以它在脚本结束后仍然在内存中。我通过在脚本末尾销毁对会话对象的引用来解决此问题。

因此,请检查您是否在代码末尾销毁对公共对象的所有引用,它可以解决您的问题。

在 vba 中,执行此操作的代码是

Set session = Nothing

在 C# 中,它应该是

obj = Null;