1

我正在尝试自动化 SAP GUI。我使用了 SAPFEWSELib 库,我可以使用它启动我的 SAP GUI 并进行连接。现在,我创建了一个桌面快捷方式进程(使用 SAP 中的内置实用程序)。因此,我无需每次都启动和连接,而是可以直接转到特定屏幕并从那里自动执行下一步。为了实现这一点,我需要——

  1. 触发桌面快捷方式以启动 SAP
  2. 附加当前 SAP 会话并使用 SAPFEWSELib 库在 C# 中执行自动化

我试过了 -var session = SapGuiApp.ActiveSession;但我得到的会话为空。有没有其他方法可以将 SAP 会话附加到 SapGuiApp?

Note-SapGuiApp是一种GuiApplication可使用 SAPFEWSELib 访问的对象。

参考-

  1. 如何使用 C# 自动化 SAP GUI
  2. https://scn.sap.com/thread/159742
4

2 回答 2

1

您可以使用以下代码在 C# 中实现:

SapROTWr.CSapROTWrapper sapROT = new SapROTWr.CSapROTWrapper();
object objSapGui = sapROT.GetROTEntry("SAPGUI");

object objEngine = objSapGui.GetType().InvokeMember("GetScriptingEngine", System.Reflection.BindingFlags.InvokeMethod, null, objSapGui, null);

for (int x = 0; x < (objEngine as GuiApplication).Children.Count; x++)
{
    GuiConnection sapConnection = ((objEngine as GuiApplication).Children.ElementAt(x) as GuiConnection);
    string strDescr = (sapConnection.Description);
}
于 2017-08-16T13:46:27.793 回答
0

我已经在 VBA 中完成了此操作,我想您可以在 C# 中进行一些编辑,此功能会给您一些想法。您必须从头开始创建会话

Function create_session() As Variant
    Set SapGuiAuto = GetObject("SAPGUI")
    Set sapApplication = SapGuiAuto.GetScriptingEngine
    Set Connection = sapApplication.Children(0)
    Set session = Connection.Children(0)
    Set create_session = session
End Function

如何使用此代码段

mysession as object
set myesssion =  create_session()
sessionname = myession.id

不要忘记使用会话杀手

Function kill_session(session as object)
    Set SapGuiAuto = nothing
    Set sapApplication = nothing
    Set Connection = nothing
    Set session = nothing 
End Function

如何使用它。

kill_session(mysession)
于 2017-06-12T15:17:00.893 回答