如何在C#中使用SAP GUIContainerShell设置当前单元格?

时间:2018-05-02 08:59:55

标签: c# sap sap-gui

我现在正在使用SAP GUI脚本自动完成工作,在尝试重新创建录制的宏时,我在一个特定点上遇到问题,我不知道如何翻译。

session.findById("wnd[0]/shellcont/shell/shellcont[1]/shell").setCurrentCell 1,"MAKTX2"
session.findById("wnd[0]/shellcont/shell/shellcont[1]/shell").doubleClickCurrentCell
session.findById("wnd[1]/tbar[0]/btn[0]").press

我已经阅读了SAP GUI Scripting API pdf,并且很难看到我如何操作.setCurrentCell 1,“MAKTX2”部分。我正在使用以下内容访问容器单元格:

GuiContainerShell materials = (GuiContainerShell)session.FindById("wnd[0]/shellcont/shell/shellcont[1]/shell");

如何制作“材料”双击“MAKTX2”?

编辑:完整的sap脚本:

SapROTWr.CSapROTWrapper sapROTWrapper = new SapROTWr.CSapROTWrapper();
                    object SapGuilRot = sapROTWrapper.GetROTEntry("SAPGUI");
                    object engine = SapGuilRot.GetType().InvokeMember("GetScriptingEngine", System.Reflection.BindingFlags.InvokeMethod, null, SapGuilRot, null);
                    GuiApplication GuiApp = (GuiApplication)engine;
                    GuiConnection connection = (GuiConnection)GuiApp.Connections.ElementAt(0);
                    GuiSession session = (GuiSession)connection.Children.ElementAt(0);
                    GuiFrameWindow frame = (GuiFrameWindow)session.FindById("wnd[0]");
                    GuiTextField jobsite = (GuiTextField)session.FindById("wnd[0]/usr/subSA_0100_1:SAPMZCX_CSDSLSBM5001_OFS_OTS:2410/subSA_2410_1:SAPMZCX_CSDSLSBM5001_OFS_OTS:2510/ctxtKUWEV-KUNNR");
                    jobsite.Text = "I033";
                    frame.SendVKey(0);
                    GuiLabel aggregates = (GuiLabel)session.FindById("wnd[1]/usr/lbl[12,3]");
                    aggregates.SetFocus();
                    GuiFrameWindow frame2 = (GuiFrameWindow)session.FindById("wnd[1]");
                    frame2.SendVKey(1);
                    GuiContainerShell materials = (GuiContainerShell)session.FindById("wnd[0]/shellcont/shell/shellcont[1]/shell");

1 个答案:

答案 0 :(得分:1)

老实说,我无法帮助你使用C#,但无论如何,SAP接口可能都是通用的。事实是,session.findById("wnd[0]/shellcont/shell/shellcont[1]/shell")为您提供了对GuiShell或GuiContainerShell类型的对象或其所谓的对象的引用。在此引用上,您可以调用为此类型定义的方法。所以,以同样的方式,当你做

session.findById("wnd[0]/shellcont/shell/shellcont[1]/shell").setCurrentCell 1,"MAKTX2"

您只是先获取引用,然后在其上应用方法setCurrentCell,所有这些都在同一行。

当你在C#中做的时候

GuiContainerShell materials = (GuiContainerShell)session.FindById("wnd[0]/shellcont/shell/shellcont[1]/shell");

您为此引用提供了名称materials,如果该行正常工作,我想您现在可以说:

materials.setCurrentCell(1, "MAKTX2")
materials.doubleClickCurrentCell