Mit Java eine SAP Funktion aufrufen

Um mit Java eine Remote fähige Funktion aus einem SAP System aufzurufen. müsst Ihr euch den sapjco Connector von SAP herunterladen. Die Datei sapjco.jar muss in eurern CLASSPATH, also bei einer Webanwendung ins WEB-INF/lib Verzeichniss. Die System abhängigen Dateien, sapjcorfc.dll und librfc32.dll unter Windows, und libsapjcorfc.so und librfccm.so unter Linux müssen in eurem PATH verfügbar sein. Als nächstes könnt erstellt Ihr eine Klasse SAPConnect, von dieser Klasse lasst Ihr alle Klassen erben die eine Verbindung zu SAP aufbauen wollen.
import com.sap.mw.jco.IFunctionTemplate;
import com.sap.mw.jco.JCO;
 
public class SAPConnect {
private JCO.Client     mConnection;
private JCO.Repository mRepository;
private String         userid;
private String         password;
private String         mandant;
private String         appServer;
private String         systemNumber;
private boolean        connected = false;
 
protected SAPConnect(String user, String password, String mand, String server, String number) {
this.userid = user;
this.password = password;
this.mandant = mand;
this.appServer = server;
this.systemNumber = number;
}
 
public boolean connect()
{
try
{
mConnection = JCO.createClient(mandant, userid, password, "DE", appServer, systemNumber);
mConnection.connect();
mRepository = new JCO.Repository("MyRepository", mConnection);
connected = true;
}
catch (Exception ex)
{
ex.printStackTrace();
return false;
}
return true;
}
 
protected JCO.Function execute(JCO.Function function)
{
try
{
mConnection.execute(function);
 
if (function == null)
{
System.out.println(function.getName() + " nicht im SAP gefunden.");
System.exit(1);
}
 
}
catch (Exception e)
{
e.printStackTrace();
return null;
}
 
return function;
 
}
 
public void disconnect()
{
mConnection.disconnect();
connected = false;
}
 
protected JCO.Function createFunction(String name) throws Exception
{
try
{
IFunctionTemplate ft = mRepository.getFunctionTemplate(name.toUpperCase());
if (ft == null) return null;
return ft.getFunction();
}
catch (Exception ex)
{
throw new Exception("Problem beim erstellen des JCO.Function Objects.");
}
}
 
public JCO.Repository getRepository()
{
return mRepository;
}
 
public boolean isConnected()
{
return connected;
}
}
In diesem Beispiel wollen wir die Funktion TH_WPINFO aufrufen die uns alle aktuellen Prozesse im SAP zurückliefert.
import com.sap.mw.jco.JCO;
 
import de.esag.utils.SAPConnect;
 
public class Prozesse extends SAPConnect
{
 
public Prozesse(String userid, String password, String Mandant, String AppServer, String SystemNumber)
{
super(userid,password,Mandant,AppServer,SystemNumber);
connect();
 
try
{
JCO.Function function = createFunction("TH_WPINFO");
execute(function);
 
JCO.Table codes = function.getTableParameterList().getTable("WPLIST");
 
for (int i = 0; i < codes.getNumRows(); i++)
{
codes.setRow(i);
System.out.print(codes.getString("WP_NO") +", ");
System.out.print(codes.getString("WP_PID") +", ");
System.out.print(codes.getString("WP_BNAME") +", ");
System.out.print(codes.getString("WP_REPORT") +", ");
System.out.print(codes.getString("WP_STATUS") +", ");
System.out.print(codes.getString("WP_ELTIME") +", ");
System.out.print(codes.getString("WP_TYP") +", ");
System.out.println(codes.getString("WP_MANDT"));
}
}
catch (Exception ex)
{
ex.printStackTrace();
System.exit(1);
}
disconnect();
}
 
public static void main(String[] args)
{
new Prozesse("benutzer","passwort","mandant","server","systemnummer");
}
}
Beim ausführen der Klasse solltet Ihr jetzt alle laufenden Prozesse eures SAP Systemes sehen.

Leave a Reply