Я использую тот же сценарий, который я нашел где-то на справочных форумах SAP.
Когда я сталкивался с этой проблемой раньше, обычно потому, что окно SAP GUI было загружено ПОСЛЕ строк
session.findById("wnd[0]/usr/txtRSYST-BNAME").text = "username"
session.findById("wnd[0]/usr/pwdRSYST-BCODE").text = "password"
Есть два способа исправить этот конкретный скрипт. Один из них - добавить MsgBox
, который приостановит выполнение сценария, но даст SAP GUI достаточно времени для загрузки. Другое - добавить WScript.Sleep(<a few seconds>)
, чтобы разрешить загрузку SAP GUI. Вот так ...
Обратите внимание, что приведенный ниже код имеет ОБА примеры, но необходим только 1. Я предпочитаю .Sleep()
, потому что он не требует внешнего ввода от пользователя.
If IsObject(WSHShell) Then
' Removed for clarity
End If
MsgBox "Click OK to continue" ' <-- MsgBox to pause script
WScript.Sleep(5000) ' <--- Wait 5 seconds for SAP GUI to load
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
session.findById("wnd[0]").resizeWorkingPane 164,40,false
session.findById("wnd[0]/usr/txtRSYST-BNAME").text = "username"
session.findById("wnd[0]/usr/pwdRSYST-BCODE").text = "password"
session.findById("wnd[0]/usr/pwdRSYST-BCODE").setFocus
session.findById("wnd[0]/usr/pwdRSYST-BCODE").caretPosition = 14
session.findById("wnd[0]").sendVKey 0
И, конечно, хранение имени пользователя и пароля в виде простого текста не является хорошей практикой. Однако запутывание паролей с помощью VBScript InputBox()
невозможно. Вам придется использовать командную строку или создать объект IE, который выходит за рамки этого вопроса