Я следую приведенному ниже примеру, чтобы работать над sapguiscripting из Java https://blogs.sap.com/2012/11/01/how-to-use-sap-gui-scripting-inside-java/.
Obj = new ActiveXComponent(Session.invoke("FindById",
"wnd[0]/usr/txtRSYST-BNAME").toDispatch());
Obj.setProperty("Text", "BCUSER");
//-Set GUIPasswordField Password------------------------------
//-
//- session.findById("wnd[0]/usr/pwdRSYST-BCODE").text = _
//- "minisap"
//-
//------------------------------------------------------------
Obj = new ActiveXComponent(Session.invoke("FindById",
"wnd[0]/usr/pwdRSYST-BCODE").toDispatch());
Obj.setProperty("Text", "minisap");
Несмотря на то, что я передал параметры username и password, я все еще не могу запустить приложение SAP из java. Что еще мне нужно изменить, чтобы он заработал?




Чтобы завершить процесс входа в систему с нуля, вам нужно добавить 2 действия:
запуск saplogon.exe как нового процесса
открытие соединения с желаемым sap-сервером. Для этого шага желаемое соединение уже должно быть настроено внутри saplogon.
теперь вы можете запустить свой код для выполнения входа в систему.
код для 1 .:
//Opening the SAP Logon
//this string should point to the saplogon.exe on your system.
String sapLogonPath = "C:\\Program Files (x86)\\SAP\\FrontEnd\\SAPgui\\saplogon.exe";
Process p;
try {
p = Runtime.getRuntime().exec(sapLogonPath);
//the sleep is to let the system wait until the sap logon has fully loaded. You might reduce the time of the sleep depending on the performance of your system
Thread.sleep(7000);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
код для 2 .:
//SAP Connection Name
//this string is the name of the connection configured in SAP Logon
String sapConnectionName = "SAPServer";
Connection = new ActiveXComponent(
GUIApp.invoke("OpenConnection",sapConnectionName).toDispatch());
код для полного автономного рабочего примера:
Ниже приведен код из вашей ссылки + все изменения, необходимые для запуска SAP Logon, открытия соединения и входа пользователя в систему.
package com.sapguiscripting;
import java.io.IOException;
//-Begin----------------------------------------------------------------
//-
//- How to use SAP GUI Scripting inside Java
//- Example: Logon to an SAP system
//-
//-
//----------------------------------------------------------------------
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
public class SAPGUIScriptingLogon {
public static void main(String[] args) {
//-Variables------------------------------------------------------
ActiveXComponent SAPROTWr, GUIApp, Connection, Session, Obj;
Dispatch ROTEntry;
Variant ScriptEngine;
ComThread.InitSTA();
//Opening the SAP Logon
String sapLogonPath = "C:\\Program Files (x86)\\SAP\\FrontEnd\\SAPgui\\saplogon.exe";
Process p;
try {
p = Runtime.getRuntime().exec(sapLogonPath);
Thread.sleep(7000);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//-Set SapGuiAuto = GetObject("SAPGUI")---------------------------
SAPROTWr = new ActiveXComponent("SapROTWr.SapROTWrapper");
try {
ROTEntry = SAPROTWr.invoke("GetROTEntry", "SAPGUI").toDispatch();
//-Set application = SapGuiAuto.GetScriptingEngine------------
ScriptEngine = Dispatch.call(ROTEntry, "GetScriptingEngine");
GUIApp = new ActiveXComponent(ScriptEngine.toDispatch());
//SAP Connection Name
String sapConnectionName = "SAPServer"; //this is the name of the connection in SAP Logon
Connection = new ActiveXComponent(
GUIApp.invoke("OpenConnection",sapConnectionName).toDispatch());
//-Set connection = application.Children(0)-------------------
//Connection = new ActiveXComponent(GUIApp.invoke("Children", 0).toDispatch());
//-Set session = connection.Children(0)-----------------------
Session = new ActiveXComponent(
Connection.invoke("Children", 0).toDispatch());
//-Set GUITextField Client------------------------------------
//-
//- session.findById("wnd[0]/usr/txtRSYST-MANDT").text = "000"
//-
//------------------------------------------------------------
Obj = new ActiveXComponent(Session.invoke("FindById","wnd[0]/usr/txtRSYST-MANDT").toDispatch());
Obj.setProperty("Text", "000");
//-Set GUITextField User--------------------------------------
//-
//- session.findById("wnd[0]/usr/txtRSYST-BNAME").text = _
//- "BCUSER"
//-
//------------------------------------------------------------
Obj = new ActiveXComponent(Session.invoke("FindById",
"wnd[0]/usr/txtRSYST-BNAME").toDispatch());
Obj.setProperty("Text", "SAP*");
//-Set GUIPasswordField Password------------------------------
//-
//- session.findById("wnd[0]/usr/pwdRSYST-BCODE").text = _
//- "minisap"
//-
//------------------------------------------------------------
Obj = new ActiveXComponent(Session.invoke("FindById",
"wnd[0]/usr/pwdRSYST-BCODE").toDispatch());
Obj.setProperty("Text", "Down1oad");
//-Set GUITextField Language----------------------------------
//-
//- session.findById("wnd[0]/usr/txtRSYST-LANGU").text = "DE"
//-
//------------------------------------------------------------
Obj = new ActiveXComponent(Session.invoke("FindById",
"wnd[0]/usr/txtRSYST-LANGU").toDispatch());
Obj.setProperty("Text", "EN");
//-Press enter------------------------------------------------
//-
//- session.findById("wnd[0]").sendVKey 0
//-
//------------------------------------------------------------
Obj = new ActiveXComponent(Session.invoke("FindById",
"wnd[0]").toDispatch());
Obj.invoke("sendVKey", 0);
}
catch (Exception e) {
}
finally {
ComThread.Release();
System.exit(0);
}
}
}
//-End------------------------------------------------------------------