Как показано в предыдущем посте, у пользователя есть доступ к управлению элементами оконного интерфейса 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, в нашем случае окно, - "Вход в систему".
Комментариев нет:
Отправить комментарий