Поиск по этому блогу

понедельник, 5 сентября 2011 г.

SAP gui scripting. Элементы оконного интерфейса.

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




Чтобы понять структуру приложения напишем небольшой скрипт, который покажет нам идентификаторы окна:

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, в нашем случае окно, - "Вход в систему".

Комментариев нет:

Отправить комментарий