Wie kann ich im Projekt Konstanten definieren, die dann in verschiedenen Prozessen und Transformationen verwendet werden?

  • Beitrag
    In manchen Projekten kann es erforderlich sein, dass bestimmte Daten an verschiedenen Stellen benötigt werden. Idealerweise möchte ich diese Daten aber nur einmal an zentraler Stelle pflegen.

    Ich möchte hier an einem kleinen Beispiel zeigen, wie das umgesetzt werden kann.

    Beispiel: Aufruf einer REST-API mit je einem fixen Token für Produktiv- und Testsystem

    Ein Rest-API bietet verschiedene Services an, die alle mit einem Token im Header aufgerufen werden sollen. Es existieren zwei Instanzen zum Test und zur Produktion. Jedes System benötigt einen eigenen Token.

    Pflege der Daten

    Zuerst legt man eine XML-Ressource an. In dieser Ressource werden alle Konstanten gepflegt. Die Struktur kann frei gewählt werden.

    <ROOT>
      <Current-Environment>Dev</Current-Environment>
    
      <API-Acces-Token-Dev >w879f89f80ßd8diebfwle8ef08wefxs</API-Acces-Token-Dev>
      <API-Acces-Token-Prod>dhfweiofwlbfwiebfwle88uef08wefs</API-Acces-Token-Prod>
    </ROOT>

    Erstellen der Adapter

    Es werden zwei Adapter erstellt, ein Adapter für das Testsystem und ein Adapter für die Produktion.

    Modellierung des Prozesses

    Im Prozess wird die XML-Datei als Parameter eingebunden.

    Verwendung von Werten im Prozess

    Eine Möglichkeit ist, einen einfachen Wert in eine Variable auszulesen:

    In der Alternative könnte man auch direkt per XPath auf die Werte in der Konfiguration zugreifen:

    Verwendung von Werten in Transformationen

    Der jeweilige Token muss in der Transformation, welche die XML-Struktur für die Ausführung der Interaktion zusammenstellt, in den Header eingefügt werden.

    Zuerst wird der jeweilige Token aus der Konfigurations ausgelesen:

    In beiden Transformationen wird der Token als Parameter übergeben:

    In der Transformation wird der Parameter deklariert und benutzt:

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:param name="API-Acces-Token" select="'unknown'" /> <!-- default value will point to missing parameter value -->
    
    <xsl:template match="/">
      <ROOT>
        <REQUEST OPERATION="GET" URL="getList">
          <HEADER>
            <Authorization>Bearer: <xsl:value-of select="$API-Acces-Token" /></Authorization>
          </HEADER>
        </REQUEST>
      </ROOT>
    </xsl:template>
    </xsl:stylesheet>

    Verwendung von komplexen Daten

    Benötigt die REST-API gleich einen ganzen Satz an Header-Parametern, die in allen Aufrufen gleich sein sollen, dann ist es einfacher, die Werte direkt in der Transformation aus der Konfiguration auszulesen.

    Definition der Header in der Konfiguration

    <ROOT>
    <Current-Environment>Dev</Current-Environment>
    
      <API-Acces-Token-Dev >w879f89f80ßd8diebfwle8ef08wefxs</API-Acces-Token-Dev>
      <API-Acces-Token-Prod>dhfweiofwlbfwiebfwle88uef08wefs</API-Acces-Token-Prod>
    
      <API-Header>
        <X-Client-ID>1234</X-Client-ID>
        <X-App-ID>TRANSCONNECT</X-App-ID>
      </API-Header>
    </ROOT>

    Auslesen der Konfiguration in der Transformation

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:param name="API-Acces-Token" select="'unknown'" /> <!-- default value will point to missing parameter value -->
    
    <xsl:variable name="configuration" select="document( 'configuration.xml' )" />
    
    <xsl:template match="/">
      <ROOT>
        <REQUEST OPERATION="GET" URL="getList">
          <HEADER>
            <Authorization>Bearer: <xsl:value-of select="$API-Acces-Token" /></Authorization>
            <xsl:copy-of select="$configuration//API-Header/*" />
          </HEADER>
        </REQUEST>
      </ROOT>
    </xsl:template>
    </xsl:stylesheet>

    Beispieldaten

    Das komplette Beispiel können Sie als TRANSCONNECT Repository hier herunterladen (nicht auspacken, einfach ZIP im Manager als Repository-Datei auswählen).

    1
    0
Ansicht von 2 Antworten - 1 bis 2 (von insgesamt 2)
  • Antworten
    vikl
    Teilnehmer
    Hallo Herr Uhr,

    vielen Dank für das gute Beispiel bzgl. einer XML Datei mit Environment Konstanten und deren Nutzung an mehreren Stellen.

    Meine Frage dazu wäre, wie man so eine Konstante evlt. auch als Routingbedingung mit Hilfe von XPath auslesen/verwenden könnte? Haben Sie da Beispiele?

    Besten Dank und Grüße

    0
    0
    Hallo,

    in den Routingbedingungen kann man nur auf den Inhalt und die Attribute einer Nachricht zugreifen. Auf weitere Ressourcen kann man dort nicht zugreifen.

    Aber man kann man im Prozess die Konstante einlesen und dann in einer Alternative den Prozess vorzeitig beenden, wenn die Bedingung nicht erfüllt ist. Im Ende-Event kann auch eine individuelle Statusnachricht (z.B.: “Bedingung XYZ nicht erfüllt”) hinterlegt werden.

    Ihr TRANSCONNECT-Team

    0
    0
Ansicht von 2 Antworten - 1 bis 2 (von insgesamt 2)
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.