如何在C#中将当前会话附加到SAP GUI

时间:2016-08-30 08:46:29

标签: c# sap-gui

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

  1. 触发桌面快捷方式以启动SAP
  2. 附加当前SAP会话并使用SAPFEWSELib库在C#中执行自动化
  3. 我试过 - apply plugin: 'com.android.library' apply plugin: 'com.neenbedankt.android-apt' apply plugin: 'com.jakewharton.butterknife' android { compileSdkVersion 23 buildToolsVersion "23.0.3" defaultConfig { minSdkVersion 9 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.4.0' compile 'com.android.support:design:23.4.0' compile 'com.android.support:cardview-v7:23.4.0' compile 'com.android.support:recyclerview-v7:23.4.0' //Dagger apt 'com.google.dagger:dagger-compiler:2.2' compile 'com.google.dagger:dagger:2.2' provided 'javax.annotation:jsr250-api:1.0' // ButterKnife compile 'com.jakewharton:butterknife:8.4.0' apt 'com.jakewharton:butterknife-compiler:8.4.0' } 但我将会话视为空。有没有其他方法可以将SAP会话附加到SapGuiApp?

    注意 - var session = SapGuiApp.ActiveSession;是一种SapGuiApp对象,可以使用SAPFEWSELib访问。

    引用 -

    1. How do I automate SAP GUI with c#
    2. https://scn.sap.com/thread/159742

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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)