#python #com #pywin32 #sap-gui
Вопрос:
Мы используем библиотеку Python pywin32 com для написания сценариев приложения SAP GUI, работающего в Windows.
Все работало до вчерашнего дня.
Теперь, пытаясь получить доступ к строке кода ниже , которая выполняет maximize()
, мы получаем
com_error: (-2147417851, ‘Сервер выдал исключение.’, Нет, Нет)
И получаю следующую ошибку при попытке доступа к любому объекту в окне SAP (последняя строка кода).
Ошибка атрибута: Свойство ‘.text’ не может быть установлено.
Кто-нибудь может помочь? Дайте мне знать, если потребуется дополнительная информация.
Ниже приведен фрагмент кода, который мы используем для создания нового сеанса сценариев, запуска SAP и выполнения действий:
from subprocess import call
import win32com.client
import time
GUIPath = 'C:/Program Files (x86)/SAP/FrontEnd/SAPgui/'
WinTitle = 'SAP'
SID = 'xxxxxx.sap.xxxxx.com'
InstanceNo = 'xx'
shell = win32com.client.Dispatch("WScript.Shell")
cmdString = os.path.join(GUIPath, 'SAPgui.exe') " " SID " " InstanceNo
call(cmdString)
while not shell.AppActivate(WinTitle):
time.sleep(1)
checkGUIExists = False
while not checkGUIExists:
try:
SAP = win32com.client.GetObject("SAPGUI").GetScriptingEngine
session = SAP.FindById("/app/con[0]/ses[0]") # session
checkGUIExists = True
except:
time.sleep(1)
continue
//The lines failing//
session.findById("wnd[0]").maximize()
session.findById("wnd[0]/tbar[0]/okcd).text = <transaction>
Комментарии:
1. Похоже, вы создаете сценарий экрана, который появляется после экрана входа в систему. Как вы входите в свою систему SAP через графический интерфейс SAP? (пользователь, пароль) Это делается через SSO или вы просто забыли эту часть? Но в любом случае, чтобы войти в систему, вы также должны указать номер SAP «mandant», которого я здесь не вижу.
2. ДА. У нас есть шаги для входа в систему. Я не публиковал эти строки здесь. Тем временем мне удалось устранить проблему, добавив функцию time.sleep() в течение 5 секунд внутри цикла while, не проверяя при этом параметры. Спасибо
3. @CassianRaja, поэтому опубликуйте свое решение здесь, чтобы оно могло помочь другим людям
4. @Suncatcher Ранее я использовал окно графического интерфейса sap в цикле, в котором я проверяю наличие окна графического интерфейса. Из-за некоторой задержки в появлении окна sap возникает задержка. Поэтому теперь мы добавили больше времени ожидания для существования графического интерфейса sap, а затем выполнили функцию maximize() вне цикла. проверитьсапгиексисты = ложь