Как установить текущую ячейку на SAP GUIContainerShell в C #? - PullRequest
0 голосов
/ 02 мая 2018

В настоящее время я автоматизирую свою работу с помощью сценария 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

Я прочитал pdf-файл API-интерфейса сценариев SAP GUI и пытаюсь понять, как я действую в части .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 голосов
/ 02 мая 2018

Если честно, я не могу помочь вам с 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
...