2
借助在stackoverflow上找到的代码示例,我成功地设法连接到SAP的EXISTING实例。如何停止脚本?
但是,我不知道如何脱离SAP并停止脚本。
我的代码完成后,在SAP窗口中,我仍然可以看到小理发师旋转起来,表明我仍然连接到它。
注意:我不想为用户终止会话。
我的意图是简单地勾住他们当前的连接,从他们的会话中获取一些信息,然后释放我的参与与他们的连接。
我想以'正确'的方式做到这一点..而不是猜测并将用户弄得一团糟。
下面是我使用进行连接(SapInfo
和SapInfoItem
是我自己的结构)的脚本:运行与Excel VBA脚本时,我有同样的问题
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;
}
它已经很长一段时间,因为我已经处理了C#SAP自动化。我不记得,如果你杀掉了这个进程,你会弃用'GuiApplication'。我会从那里开始,也许尝试处理'engine'来查看它是否停止Gui自动化并将控制权释放回给用户。 – tyh 2014-11-24 20:25:55