Ich habe versucht, über eine Anwendung in der SAP Cloud Platform vor Ort auf das System zuzugreifen.
Erstellen wir eine einfache JAVA-Anwendung, um die Funktion zu überprüfen und über die SAP Cloud Platform auf das lokale ABAP-System zuzugreifen.
Ich werde kurz auf die Funktionsweise der Anwendung eingehen.
Dies ist der Authentifizierungsbildschirm der SAP Cloud Platform.
Geben Sie einen beliebigen Text ein und drücken Sie die Senden-Taste, um den Funktionsbaustein "STFC_CONNECTION" aufzurufen.
Die im Eingabetext eingegebene Zeichenfolge wird beim Aufruf an den Parameter REQUTEXT
übergeben.
Der vom Funktionsbaustein STFC_CONNECTION
zurückgegebene Wert wird angezeigt.
RESPTEXT
zeigt die Veröffentlichung von SAP Netweaver, das aktuelle Datum und die aktuelle Uhrzeit sowie Informationen über den Benutzer, der den Zugriff verwendet hat.
Um eine Verbindung mit JCo herzustellen, übergeben Sie den in SAP Cloud Platform festgelegten Zielnamen an das Argument "JCoDestinationManager # getDestination" und rufen Sie das Objekt "JCoDestination" ab. Von diesem Objekt aus können Sie über den SAP Cloud Connector eine Verbindung zum lokalen ABAP-Server herstellen.
Das folgende Beispiel zeigt, wie der in SAP Cloud Platform festgelegte Zielname mit "p.getProperty (JCO_DESTINATION)" abgerufen werden kann.
return JCoDestinationManager.getDestination(p.getProperty(JCO_DESTINATION));
Insbesondere wurde es in der folgenden Form implementiert. Eigentlich sollte es einfacher sein, es zu verwenden, indem man Interface erstellt und erbt, aber ich werde es weglassen, weil es eine Testversion ist.
StfcConnection.java
public class StfcConnection {
public static final String PRAM_REQUTEXT = "REQUTEXT";
public static final String PRAM_ECHOTEXT = "ECHOTEXT";
public static final String PRAM_RESPTEXT = "RESPTEXT";
private static final String FUNCTION_NAME = "STFC_CONNECTION";
private static final String JCO_DESTINATION = "jco.destination";
private static final String JCO_PROPERTIES = "jco.properties";
private String propFilePath;
private String requText;
private String echoText;
private String respText;
public StfcConnection(String propDirPath, String requText) {
this.propFilePath = Paths.get(propDirPath, JCO_PROPERTIES).toString();
this.requText = requText;
}
public void execute() throws JCoException, FileNotFoundException, IOException {
JCoDestination d = getDestiation();
JCoFunction f = d.getRepository().getFunction(FUNCTION_NAME);
//Einstellungen der Funktionsmodulaufrufparameter
f.getImportParameterList().setValue(PRAM_REQUTEXT, requText);
//Allgemeine Modulausführung
f.execute(d);
//Erfassung der Ergebnisse der Funktionsbausteinausführung
JCoParameterList exports = f.getExportParameterList();
echoText = exports.getString(PRAM_ECHOTEXT);
respText = exports.getString(PRAM_RESPTEXT);
}
private JCoDestination getDestiation() throws FileNotFoundException, IOException, JCoException {
InputStream is = new FileInputStream(propFilePath);
Properties p = new Properties();
// load jco destination name
p.load(is);
is.close();
return JCoDestinationManager.getDestination(p.getProperty(JCO_DESTINATION));
}
public String getEchoText() {
return echoText;
}
public String getRespText() {
return respText;
}
}
Ich konnte von der SAP Cloud Platform über den SAP Cloud Connector erfolgreich auf das lokale ABAP-System zugreifen. Ich hatte das Gefühl, dass die Implementierung auf der JAVA-Seite, einschließlich der Authentifizierung, einfach geworden ist.
Ich habe die programmatische Authentifizierung mithilfe der folgenden Hilfeseite implementiert.
Für die Implementierung haben wir eine dedizierte Klasse vorbereitet und von jedem Servlet aufgerufen.
Authenication.java
public class Authenication {
private final static Logger logger = LoggerFactory.getLogger(Authenication.class);
protected static void login(String user) throws LoginException {
if (user == null) {
logger.debug("User is not logged in.");
//authenticate the User
LoginContext loginContext = LoginContextFactory.createLoginContext("FORM");
loginContext.login();
}
}
protected static void logout(String user) throws LoginException {
if (user != null) {
logger.debug("User is logged in.");
//logout
LoginContext loginContext = LoginContextFactory.createLoginContext("FORM");
loginContext.logout();
}
}
protected static boolean isLoggedin(HttpServletRequest request) {
if (request.getRemoteUser() == null) {
return false;
} else {
return true;
}
}
}
Der Quellcode wurde auf GitHub hochgeladen. Als Referenz. GitHub - ScpJcoTest1
Recommended Posts