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