Versuchen Sie, über die SAP Cloud Platform - JAVA App Edition auf das On-Premise-System zuzugreifen

1. Zuallererst

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.

2. Antrag auf diese Zeit

Ich werde kurz auf die Funktionsweise der Anwendung eingehen.

2.1. Authentifizierungsbildschirm

Dies ist der Authentifizierungsbildschirm der SAP Cloud Platform. image.png

2.2 Erster Bildschirm

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. image.png

2.3 Zweiter Bildschirm

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. image.png

3. So greifen Sie auf ABAP zu

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;
	}
}

4. Zusammenfassung

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.

Nebenbei: Authentifizierung

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

Versuchen Sie, über die SAP Cloud Platform - JAVA App Edition auf das On-Premise-System zuzugreifen
[JDBC] Ich habe versucht, von Java aus auf die SQLite3-Datenbank zuzugreifen.
Der Weg von JavaScript nach Java
Versuchen Sie, Werte von Java Servlet mit JSON an die iPhone-App zu übergeben
Stellen Sie Java-Programme auf der SAP Cloud Platform bereit
Versuchen Sie, Watson NLU, die Japanisch zu unterstützen scheint, vom Java SDK aus aufzurufen
Versuchen Sie, den CORBA-Dienst von Spring (Java) aus aufzurufen.
Versuchen Sie, mit JZOS von Java aus auf das Dataset zuzugreifen
Einrichten von SAP Cloud Platform Tools für Java
[Java] Versuchen Sie, das Fizz Buzz-Problem zu lösen
3. Erstellen Sie eine Datenbank für den Zugriff über das Webmodul
[Java] Ich möchte die Differenz zum Datum berechnen
[Java] So extrahieren Sie den Dateinamen aus dem Pfad
Rufen wir IBM Watson Assistant 2018-07-10 aus dem Java SDK auf.
Kotlin kann die Welt von der App ins Web bringen
Greifen Sie über Java auf API.AI zu
Von Java zu Ruby !!
Kommen Sie zu den Abkürzungen aus den fünf Beispielen für kursive Java-Listen
Android App, die Bilder aus der Galerie auswählt und anzeigt
[Java] Stellen Sie die Spring Boot-Anwendung für den Azure App Service bereit
[Docker] Zugriff auf den Host aus dem Container heraus. http: //host.docker.internal:
[Code Pipeline x Elastic Beanstalk] Aktualisieren Sie die Laufzeitversion von Java 8 auf Corretto 11 auf der Java SE-Plattform
Lesen Sie die Daten der Shizuoka Prefecture Point Cloud DB mit Java und versuchen Sie, die Baumhöhe zu ermitteln.