Как показано в предыдущем посте, у пользователя есть доступ к управлению элементами оконного интерфейса SAP FrontEnd. Для полного понимания картины рассмотрим подробнее из каких элементов состоит интерфейс и как эти элементы структурированы.
Так как все окна имеют одинаковую структуру, остановимся на одном - "Вход в систему":

Чтобы понять структуру приложения напишем небольшой скрипт, который покажет нам идентификаторы окна:
Результат запуска скрипта покажет нам структуру окна "Вход в систему" из которого видно что приложение имеет одно окно - /app/con[0]/ses[0]/wnd[0], а окно в свою очередь содержит 6 элементов:
/app/ = приложение
/con[0]/ = первое подключение
/ses[0]/ = первая сессия
Теперь попробуем запустить этот скрипт при другом состоянии приложения - "Смена пароля":

Так как появилось второе модальное окно, в результате получим идентификаторы 2-х окон приложения, каждый со своими элементами:
/app/con[0]/ses[0]/wnd[0] и /app/con[0]/ses[0]/wnd[1]
Из всего вышесказанного, полная структура приложения выглядит:

При написании скриптов, чтобы добраться до любого элемента приложения SAP, достаточно найти необходимый элемент по его идентификатору, функцией - FindById("идентификатор").
Скорректируем скрипт таким образом, чтобы увидеть идентификаторы всех элементов (кнопок, текст-боксов и т.д.), для этого будем обращаться к каждому дочернему элементу:
Вот приблизительно и есть вся структура приложения SAP, в нашем случае окно, - "Вход в систему".
Так как все окна имеют одинаковую структуру, остановимся на одном - "Вход в систему":
Чтобы понять структуру приложения напишем небольшой скрипт, который покажет нам идентификаторы окна:
If Not IsObject(application) Then Set SapGuiAuto = GetObject("SAPGUI") Set application = SapGuiAuto.GetScriptingEngine End If If Not IsObject(connection) Then Set connection = application.Children(0) End If If Not IsObject(session) Then Set session = connection.Children(0) End If If IsObject(WScript) Then WScript.ConnectObject session, "on" WScript.ConnectObject application, "on" End If ' Создадим объект для работы с файлами Set FileObj = CreateObject("Scripting.FileSystemObject") ' Определим текстовый файл, в который выведем результаты Set File = FileObj.CreateTextFile("C:\result_elements_win.txt") ' Определим кол-во всех дочерних элементов приложения (окон приложения) winCount = session.Children.Count For i=1 To winCount ' Определим идентификатор дочернего элемента (окна приложения) winElement = session.Children(i-1).Id ' Запишем идентификатор в файл File.WriteLine(winElement) ' Определим количество всех дочерних элементов окна приложения objCount = session.FindById(winElement).Children.Count For j = 1 To objCount ' Определим идентификаторы дочерних элементов окна objElement = session.FindById(winElement).Children(j-1).Id ' Записываем их в файл, отделяя строки табуляцией File.WriteLine(Chr(9) & objElement) Next Next ' Закрываем файл File.Close MsgBox "Результат записан в файл C:\result_elements_win.txt"
Результат запуска скрипта покажет нам структуру окна "Вход в систему" из которого видно что приложение имеет одно окно - /app/con[0]/ses[0]/wnd[0], а окно в свою очередь содержит 6 элементов:
/app/con[0]/ses[0]/wnd[0] (окно) /app/con[0]/ses[0]/wnd[0]/mbar (меню) /app/con[0]/ses[0]/wnd[0]/tbar[0] (первая панель с кнопками) /app/con[0]/ses[0]/wnd[0]/titl (заголовок) /app/con[0]/ses[0]/wnd[0]/tbar[1] (вторая панель с кнопками) /app/con[0]/ses[0]/wnd[0]/usr (пользовательский регион) /app/con[0]/ses[0]/wnd[0]/sbar (строка состояния)Где:
/app/ = приложение
/con[0]/ = первое подключение
/ses[0]/ = первая сессия
Теперь попробуем запустить этот скрипт при другом состоянии приложения - "Смена пароля":
Так как появилось второе модальное окно, в результате получим идентификаторы 2-х окон приложения, каждый со своими элементами:
/app/con[0]/ses[0]/wnd[0] и /app/con[0]/ses[0]/wnd[1]
Из всего вышесказанного, полная структура приложения выглядит:
При написании скриптов, чтобы добраться до любого элемента приложения SAP, достаточно найти необходимый элемент по его идентификатору, функцией - FindById("идентификатор").
' Текст заголовка окна txtZagolovok = session.findById("/app/con[0]/ses[0]/wnd[0]/titl").Text
Скорректируем скрипт таким образом, чтобы увидеть идентификаторы всех элементов (кнопок, текст-боксов и т.д.), для этого будем обращаться к каждому дочернему элементу:
If Not IsObject(application) Then Set SapGuiAuto = GetObject("SAPGUI") Set application = SapGuiAuto.GetScriptingEngine End If If Not IsObject(connection) Then Set connection = application.Children(0) End If If Not IsObject(session) Then Set session = connection.Children(0) End If If IsObject(WScript) Then WScript.ConnectObject session, "on" WScript.ConnectObject application, "on" End If Set FileObj = CreateObject("Scripting.FileSystemObject") Set File = FileObj.CreateTextFile("C:\result_elements_all.txt") winCount = session.Children.Count For i=1 To winCount winElement = session.Children(i-1).Id File.WriteLine(winElement) objCount = session.FindById(winElement).Children.Count For j = 1 To objCount objElement = session.FindById(winElement).Children(j-1).Id File.WriteLine(Chr(9) & objElement) allCount = session.FindById(objElement).Children.Count For k = 1 To allCount-1 allElements = session.FindById(objElement).Children(k-1).Id File.WriteLine(Chr(9) & Chr(9) & allElements) Next Next Next File.Close MsgBox "Результат записан в файл C:\result_elements_all.txt"
Вот приблизительно и есть вся структура приложения SAP, в нашем случае окно, - "Вход в систему".
Комментариев нет:
Отправить комментарий