Ошибка COM при попытке выполнить действие в приложении SAP

#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() вне цикла. проверитьсапгиексисты = ложь