Tipps & Tricks - Rest-Services-Integration

Allgemeines

In diesem Beitrag finden Sie ein Beispiel für die Integration von REST-Services. Dabei wird der Übersetzungsservice DeepL verwendet. Beim Speichern wird automatisch aus dem Deutschen nach Englisch und Französisch übersetzt.

Installation

Laden Sie hier die Beispielapplikation herunter. Importieren Sie die Download-Datei "tipps-tricks-rest-services-integration.zip" und wählen Sie für den Import die enthaltene Applikation und den enthaltenen Prozess aus. Wechseln Sie dann in das Modul Prozesse, öffnen Sie den Prozess "Tipps & Tricks - Rest-Services Integration" und aktivieren Sie ihn.

API-Key eintragen

Für den Einsatz der Übersetzungs-App wird ein API-Key benötigt, den Sie auf der Website von DeepL beziehen können.

Wenn Sie die Beispiel-Applikation im Browser öffnen, können Sie den API-Key auf der API-Key-Seite eintragen. Klicken Sie anschließend auf "Speichern".

Übersetzen

Wechseln Sie auf die Eingabeseite und tragen Sie einen beliebigen Text für die Übersetzung ein. Klicken Sie dann auf "Speichern".

Die Übersetzung in die verschiedenen Sprachen wird daraufhin angezeigt.

Prozessaufbau

Der Beispiel-Prozess reagiert mit einem Datengruppen-Ereignisbehandler auf das Einfügen von Datensätzen auf der Eingabeseite der Beispiel-Applikation. Anschließend wird der DeepL-Aufruf mit dem folgenden Skript in einer Groovy-Aktion ausgeführt.

import de.uplanet.scripting.groovy.util.Safely
import org.apache.http.*
import org.apache.http.entity.*
import org.apache.http.util.*
import org.apache.http.client.*
import org.apache.http.client.methods.*
import org.apache.http.client.utils.*
import org.apache.http.impl.client.*
import org.json.simple.JSONObject;
import org.json.simple.JSONArray;
import org.json.simple.parser.JSONParser;

def key    = g_sysDg.getValueHolderByFieldGuid('AE0F3F49EDAB0B3381ADD35815E7E8E81CAB7DDF') //API Key

assert key.hasValue()  : "No DeepL API-Key specified."

def deText = g_record["34078FB863412A7C561F0C8335EAAB5C3EAFAEAD"].value /* datafield DE <text> */

def translations   = translateJson(deText, "EN", key.getValue().toString())
g_sharedState.enText = translations.translations[0].text

translations   = translateJson(deText, "FR", key.getValue().toString())
g_sharedState.frText = translations.translations[0].text


def translateJson(textToTranslate, targetLang, key)
{
	URI uri = new URIBuilder()
	        .setScheme("https")
	        .setHost("api.deepl.com")
	        .setPath("v1/translate")
	        .setParameter("auth_key", key)
	        .setParameter("source_lang", "DE")
	        .setParameter("target_lang", targetLang)
	        .setParameter("text", textToTranslate)
	        .setParameter("split_sentences", "1")
	        .setParameter("preserve_formatting", "1")
	        .build();

	g_json.httpGet(url: uri, readTimeout: 20000)
}

Die englische und französische Übersetzung wird in den Variablen "enText" und "frText" an den sharedState übergeben.

In der darauf folgenden Datengruppenaktion werden diese beiden Variablen als benutzerdefinierte Systemwerte mit dem Typ "Verarbeitungskontext" den entsprechenden Feldern der Beispiel-Applikation zugeordnet.