如何使用c#自动化SAP GUI

我想使用C#语言自动化SAP GUI窗口。 我能够在VBScript中完成它,但代码重用是可怕的。 除了Id喜欢使用线程而不是运行80个或更多进程。 我在哪里可以找到有关如何执行此操作的任何文档和示例? 这是我正在使用的代码。 基本上,我面临的问题是 – 如何建立与SAP GUI的连接,然后动态创建SAP GUI,然后开始在某些字段中进行交易和输入文本。

using System; using System.Collections; using System.Collections.Generic; using System.Linq; using White.Core.Factory; using White.Core.UIItems.Finders; using White.Core.InputDevices; using System.Threading; using System.Diagnostics; using SAP.Connector; using SAP; namespace SAP_Automation { class Program { public static void Main(string[] args) { string ExeSourceFile = @"C:\Program Files\SAP\SapSetup\setup\SAL\SapLogon.s8l"; White.Core.Application _application; White.Core.UIItems.WindowItems.Window _mainWindow; var c = SAP.Connector.Connection.GetConnection("**"); var c = new SAPConnection("ASHOST=*; GWHOST=*; GWSERV=*; ASHOST=*; SYSNR=00;USER=user; PASSWD=**;"); c.Open(); } } } } 

如您所见,我可以创建连接,但我不知道如何创建GUI的会话并开始在字段中输入文本。 任何例子和样品将不胜感激。

这可能是坏死线程,但我处于类似的情况,我工作。 我们需要SAP GUI Automation进行测试,以便与我们用C#编写的本土自动化平台的其他部分集成。 我帮助创建了一个解决方案,该解决方案利用SAP提供的GUI自动化库,可以用作SAP自动化层的基础。

SAP文件安装中是否存在以下文件? x:\ Program Files \ SAP \ FrontEnd \ SAPGui \ sapfewse.ocx?

如果是这样,请将其添加到Visual Studio(或您正在使用的任何IDE)作为参考。 它基本上是一个类库,其中包含一组允许您与之交互的SAP特定对象。 它非常有效,因为它可以从SAP GUI中公开您需要的大部分内容。 我们在其他尝试中发现SAP中的许多对象都不可用。

这是我做过的概念的早期certificate。 使用连接字符串启动SAP,输入凭据,导航到事务代码。

 using System; using System.Collections.Generic; using System.Collections; using System.Linq; using System.Text; using SAPFEWSELib; namespace SAPGuiAutomated { //created a class for the SAP app, connection, and session objects as well as for common methods. public class SAPActive { public static GuiApplication SapGuiApp { get; set; } public static GuiConnection SapConnection { get; set; } public static GuiSession SapSession { get; set; } public static void openSap(string env) { SAPActive.SapGuiApp = new GuiApplication(); string connectString = null; if (env.ToUpper().Equals("DEFAULT")) { connectString = "1.0 Test ERP (DEFAULT)"; } else { connectString = env; } SAPActive.SapConnection = SAPActive.SapGuiApp.OpenConnection(connectString, Sync: true); //creates connection SAPActive.SapSession = (GuiSession)SAPActive.SapConnection.Sessions.Item(0); //creates the Gui session off the connection you made } public void login(string myclient, string mylogin, string mypass, string mylang) { GuiTextField client = (GuiTextField)SAPActive.SapSession.ActiveWindow.FindByName("RSYST-MANDT", "GuiTextField"); GuiTextField login = (GuiTextField)SAPActive.SapSession.ActiveWindow.FindByName("RSYST-BNAME", "GuiTextField"); GuiTextField pass = (GuiTextField)SAPActive.SapSession.ActiveWindow.FindByName("RSYST-BCODE", "GuiPasswordField"); GuiTextField language = (GuiTextField)SAPActive.SapSession.ActiveWindow.FindByName("RSYST-LANGU", "GuiTextField"); client.SetFocus(); client.text = myclient; login.SetFocus(); login.Text = mylogin; pass.SetFocus(); pass.Text = mypass; language.SetFocus(); language.Text = mylang; //Press the green checkmark button which is about the same as the enter key GuiButton btn = (GuiButton)SapSession.FindById("/app/con[0]/ses[0]/wnd[0]/tbar[0]/btn[0]"); btn.SetFocus(); btn.Press(); } } //--------------------------// //main method somewhere else public static void Main(string[] args) { SAPActive.openSAP("my connection string"); SAPActive.login("10", "jdoe", "password", "EN"); SAPActive.SapSession.StartTransaction("VA03"); } 

你是对的,没有很多关于这个主题的文档。 以下是一些帮助我入门的资料

– 我们计划的原始来源http://scn.sap.com/thread/1729689

– 关于API的文档(对于VB和javascript,但一般规则和对象是相同的)。 绝对阅读SAP GUI Runtime层次结构上的部分。 它会回答很多问题。 http://www.synactive.com/download/sap%20gui%20scripting/sap%20gui%20scripting%20api.pdf

在这里了解UI自动化可以做什么以及它的局限是非常重要的。 它旨在自动化用户界面的function。 您可以单击按钮,在文本框中输入文本,移动窗口等等,无论用户使用鼠标和键盘做什么。

不能做的是桥接操作系统在进程之间建立的高墙。 阻止进程访问另一个进程的内存的墙。 这是一个非常重要的安全和安全function。 它可以防止进程访问应该对进程私有的数据。 像密码一样。 另一方面,它会阻止崩溃进程影响在计算机上运行的其他进程。 你可以使用任务管理器杀死一个进程,一切都保持愉快的运转,好像什么也没发生。

这样做的结果是在程序中创建SAPConnection对象是只有您的程序才能使用的连接。 没有机制以某种方式将此对象传递给具有UI自动化的另一个进程。 充其量,您可以使用从连接中检索的数据来影响您单击的按钮。

允许在进程之间共享数据的进程互操作类型在.NET中得到很好的支持。 低级方法是套接字和命名管道,高级方法是远程处理和WCF。 较旧的程序具有COM自动化支持,Office就是一个很好的例子。 然而,这需要两个探戈,必须编写这两个程序以利用它。

因此,如果您尝试自动化现有SAP应用程序,并且此应用程序没有明确支持自动化,Office程序支持的类型,那么您几乎只会填充文本框和单击按钮。

您可以使用UiPath自动执行任何类型的应用程序(浏览器,桌面,Java等)。 这是一个关于如何在SAP上自动执行数据输入,菜单导航和屏幕抓取的教程。

您可以

  • 从代码(SDK)中使用它。 它有一个自动生成C#代码的工具
  • 直接从UiPath Studio创建和运行工作流程(可视化自动化)。

以下是C#自动生成代码的示例:

  // Attach window menu UiNode wnd3 = UiFactory.Instance.NewUiNode().FromSelector(""); // Click 'Business Pa...' menu UiNode uiClickBusinessPamenu_3 = wnd3.FindFirst(UiFindScope.UI_FIND_DESCENDANTS, ""); uiClickBusinessPamenu_3.Click(88, 9, UiClickType.UI_CLICK_SINGLE, UiMouseButton.UI_BTN_LEFT, UiInputMethod.UI_HARDWARE_EVENTS); // Attach window 'SAP Business' UiNode wnd4 = UiFactory.Instance.NewUiNode().FromSelector(""); // Click 'Add' button UiNode uiClickAddbutton_4 = wnd4.FindFirst(UiFindScope.UI_FIND_DESCENDANTS, ""); uiClickAddbutton_4.Click(13, 24, UiClickType.UI_CLICK_SINGLE, UiMouseButton.UI_BTN_LEFT, UiInputMethod.UI_HARDWARE_EVENTS); 

以下是SAP Business One菜单,按钮或键入的工作流程自动化如下所示:

在此处输入图像描述

最后,SDK文档位于此处 …以防您不想使用工作流程。

注意:我在UiPath工作。 您还应该尝试其他自动化工具,如Automation Anywhere,WinAutomation,Jacada,Selenium,Ranorex并排使用它们,并选择更适合您需求的工具。