Systeme integrieren und Prozesse automatisieren

Für dieses Tutorial gibt es Beispieldiagramme in der INUBIT-Software.

Voraussetzungen

  • Sie haben den Installationssatz INUBIT Process Engine & Workbench der INUBIT-Software abgeschlossen.

  • Sie haben eine gültige Lizenz eingespielt.

  • Sie haben sich bei der INUBIT Workbench als Benutzer miller angemeldet, damit Sie auf die Beispieldiagramme zugreifen können.

Enterprise Application Integration

Die INUBIT-Software ermöglicht die Automatisierung von Geschäftsprozessen unter Einbeziehung der internen IT-Systeme, der Mitarbeiter und der externen Kunden und Partner. Zahlreiche Standardmodule und die Unterstützung vieler Kommunikationsprotokolle ermöglichen die direkte Integration von Systemen wie SAP und Datenbanken.

Die einzelnen Module werden in einem Workflow Designer per Drag-and-Drop zu Technical Workflows zusammengestellt. Error Branches, Ersatzkonnektoren und Error-Scopes ermöglichen dabei eine einfache Behandlung von Fehlersituationen – von einer Benachrichtigung per E-Mail, SMS oder SNMP bis hin zu komplexen Error Workflows. Die Technical Workflows können eng mit den Business Process Diagrammen verknüpft werden.

Daten konvertieren

Das Datenhandling innerhalb der Technical Workflows basiert durchgängig auf XML. Format-Adapter überführen Nicht-XML-Formate nach XML und zurück. Inhouse-Formate können in einem Flat File-Adapter frei definiert und genutzt werden. Die Datenstrukturen werden in einem Converter per Drag’n’Drop abgebildet, der als Ergebnis standardkonformes XSLT liefert. Der XSLT Converter bietet eine integrierte Test-Umgebung sowie Prüfungen gegen Schemata und DTDs.

Navigation und Debugging

Um eventuell im laufenden Betrieb auftretende Fehler fachlich einzuordnen, können Sie top-down vom fachlichen Business Prozess zur technischen Umsetzung in einem Technical Workflow navigieren. Die integrierte Testumgebung ermöglicht das komfortable Debugging der Technical Workflows, die Übertragung der Workflows vom Entwicklungs- auf das Produktivsystem wird durch den integrierten Deployment-Prozess unterstützt. Laufende Workflows können Sie im Watch-Modus in Echtzeit überwachen.

Anwendungsbeispiel

Ein Technical Workflow ist die technische Umsetzung eines Geschäftsprozesses. Er enthält ein oder mehrere Module, welche Nachrichten aus einem Quellsystem abholen oder von diesem erhalten, die Nachrichten konvertieren, modifizieren und schließlich an ein nachfolgendes Zielsystem übergeben.

Für die Kommunikation der Quell- und Zielsysteme mit der INUBIT-Software sorgen die sogenannten Systemkonnektoren. Zum Konvertieren und Modifizieren der Nachrichten steht eine Vielzahl von Adaptern und Konvertern zur Verfügung.

Die Reihenfolge, in der Module ausgeführt werden, wird durch Workflow Controls festgelegt. Mit diesen wird auch definiert, unter welchen Bedingungen ein Modul überhaupt ausgeführt wird und wie oft. Die Ausführung eines Workflows muss also nicht linear erfolgen, auch Verzweigungen und Schleifen sind möglich.

Neben einfachen 1:1-Transformationen, bei denen eine Eingangsnachricht zu einer Ausgangsnachricht verarbeitet wird, sind durch den Einsatz von Workflow Controls wie z.B. Multiplexern und Demultiplexern auch N:M-Transformationen möglich.

Beispiel

Der abgebildete Technical Workflow Order Supplier A sendet eine Bestellung der Assembler AG an den Zulieferer Supplier A. Der Zulieferer benötigt die Bestellung als CSV-Datei, damit diese in seinem Warehouse Management-System verarbeitet werden kann. Die beiden Geschäftspartner tauschen Daten über FTP aus.

Die Assembler AG gibt die Bestellung in ihrem ERP-System im openTRANS-Format auf. Das ERP-System ist an die INUBIT-Software angebunden. Die Bestellung wird im Workflow zunächst in ein CSV-XML-Format konvertiert, dann nach CSV und schließlich wird sie via FTP an den Zulieferer gesendet.

tutorial 115 1

Der Technical Workflow besteht aus folgenden Modulen (von links nach rechts):

  • File Connector Order openTRANS input

    Dieser Systemkonnektor lädt die zu bearbeitende Bestellung aus dem Dateisystem der Assembler AG.

  • XSLT Converter Order openTRANS - CSV-XML

    Konvertiert die Bestellung von einem XML-Format in ein anderes XML-Format.

  • XML-CSV Adapter Order XML - CSV

    Dieser Format Adapter transformiert die Daten aus dem XML-Format in das CSV-Format.

  • FTP Connector Order CSV output

    Ein weiterer Systemkonnektor, der die Datei auf den FTP-Server von Supplier A transferiert.

  • File Connector Order CSV outputFile

    Dient als Ersatzkonnektor und wird benutzt, falls z.B. der FTP-Server nicht verfügbar ist. Dann wird die Datei im Dateisystem der Assembler AG gespeichert.

Der abgebildete Technical Workflow ist ein Beispiel und wird nicht als ausführbarer Technical Workflow im Tutorial angeboten!

Technical Workflow erstellen 1: Datei aus Dateisystem lesen

Die Assembler AG erhält die Rechnungen von ihrem Zulieferer im CSV-Format, benötigt diese aber im openTRANS-Format.

Daher werden von einem Technical Workflow alle Rechnungen mit einem File Connector aus dem Dateisystem abgeholt, vom CSV-Format zuerst in das CSV-XML-Format und danach in das openTRANS-Format konvertiert:

tutorial 115 2

Ihre Aufgabe ist es, den abgebildeten Workflow funktionsfähig nachzubauen.

Diagramm anlegen

So gehen Sie vor

  1. Erstellen Sie ein leeres Diagramm vom Typ Technical Workflow:

    1. Zeigen Sie im Register Designer das Lokal-Verzeichnis an.

    2. Markieren Sie den Ordner Technical Workflows und öffnen Sie das Kontextmenü.

    3. Wählen Sie aus dem Kontextmenü Neu. Der Assistent zum Anlegen neuer Diagramme öffnet sich:

      tutorial 116 0
  2. Legen Sie die Eigenschaften des neuen Technical Workflows fest:

    1. Geben Sie als Name 1_Invoice Supplier A ein.

    2. Geben Sie als Gruppe 1_Supplier A Workflows ein.

      Die übrigen Einstellungen können Sie beibehalten.

  3. Klicken Sie auf Weiter. Die Seite Ausführung wird angezeigt.

  4. Markieren Sie im Bereich Workflow Status die Checkbox Aktiv.

  5. Klicken Sie so lange auf Weiter, bis die Seite Metadaten angezeigt wird. Auf den Seiten müssen Sie keine Änderungen vornehmen.

  6. Klicken Sie auf Fertig stellen.

→ Der Assistent schließt sich und ein leeres Diagramm wird in Ihrem lokalen Verzeichnis erstellt.

Module erstellen

So gehen Sie vor

  1. Klicken Sie rechts am Rand der Arbeitsfläche in der Sidebar auf Tools. Die Palette Tools öffnet sich.

  2. Klicken Sie auf System Connector und ziehen Sie einen File Connector auf die Arbeitsfläche des Diagramms.

    Ein Assistent öffnet sich, der Sie Schritt für Schritt durch die Konfiguration des Systemkonnektors führt. Füllen Sie im ersten Dialog folgende Felder aus:

    • Name: 1_invoice CSV input

    • Eingabe: csv

    • Ausgabe: csv

  3. Klicken Sie auf Weiter.

    Die Option Input Connector ist bereits korrekt vorausgewählt, da der File Connector Daten aus einem Verzeichnis aktiv holen soll.

    Der Connector Status kann Inaktiv bleiben, solange der Workflow nicht zeitgesteuert, sondern manuell gestartet wird.

    Ignorieren Sie alle weiteren Felder in diesem Dialog.

  4. Klicken Sie auf Weiter. Im Dialog Zeitgesteuerte Verarbeitung müssen Sie keine Änderungen durchführen.

  5. Klicken Sie auf Weiter.

    • Stellen Sie sicher, dass die Option Dateimodus ausgewählt ist.

    • Geben Sie als Verzeichnis <inubit-installdir>/client/tutorial/miller (absoluter Pfad) und als Dateinamen Invoice.csv an.

    • Entfernen Sie das Häkchen von der Option Dateien nach dem Lesen löschen. Wenn diese Option markiert ist, können Sie das Modul nur ein einziges Mal testen, weil danach die Testdatei fehlt.

  6. Klicken Sie auf Fertig stellen.

→ Der Assistent schließt sich und der konfigurierte File Connector wird auf der Arbeitsfläche angezeigt.

Workflow testen

Alle Workflows, die mindestens ein Modul enthalten, können bereits getestet werden.

Test durchführen

So gehen Sie vor

  1. Öffnen Sie das Kontextmenü des File Connectors Invoice CSV input und wählen Sie Startpoint setzen. Ein grüner Startpoint wird angezeigt:

    tutorial 117 0
  2. Klicken Sie in die Arbeitsfläche und wählen Sie aus dem Kontextmenü Test ohne Datei starten.

Der Test wird gestartet. Die Testdatei wird anhand der Pfadangabe, die im File Connector hinterlegt ist, gefunden und eingelesen. Ein kleiner grüner Punkt bewegt sich durch den Workflow und zeigt den aktuellen Stand der Abarbeitung an.

Nach dem Test wird rechts ein gelber Punkt angezeigt, ein sog. Watchpoint. Sie können an jedem Watchpoint das aktuelle Zwischenergebnis der Nachrichtenverarbeitung anzeigen.

Nachdem der Workflow erfolgreich durchlaufen wurde, erscheint eine entsprechende Meldung. Wenn ein Fehler auftrat, dann wird die Bearbeitung des Workflows angehalten und eine rote Markierung sowie eine Fehlermeldung werden angezeigt.

Zwischenergebnisse anzeigen

So gehen Sie vor

  1. Markieren Sie den Watchpoint und öffnen Sie das Kontextmenü.

  2. Wählen Sie Ergebnisdatei(en) anzeigen.

→ Ein Dialog öffnet sich, in dem die eingelesene CSV-Datei angezeigt wird:

tutorial 118 0

Technical Workflow erstellen 2: CSV-Datei nach CSV-XML konvertieren

In diesem Abschnitt konvertieren Sie die CSV-Datei mithilfe des CSV-XML Adapters in ein XML-Zwischenformat. Dieses Zwischenformat ist nötig, damit im nächsten Schritt daraus das openTRANS-Format erzeugt werden kann, welches das ERP-System der Assembler AG erwartet.

So gehen Sie vor

  1. Öffnen Sie in der Sidebar den Ordner Tools > Format Adapter.

  2. Ziehen Sie den CSV-XML Adapter auf die Arbeitsfläche.

    Der Modul-Assistent öffnet sich.

  3. Füllen Sie folgende Felder aus:

    • Name: 1_Invoice CSV-XML

    • Eingabe: csv

    • Ausgabe: xml

  4. Klicken Sie auf Weiter. Die Seite Modul-Editor wird angezeigt:

    tutorial 119 1

    Ändern Sie folgende Felder:

    • Feld XML Root Tag

      Dies ist der Name des Wurzelknotens in der zu erzeugenden XML-Datei. Geben Sie Invoice ein.

    • Feld Segmentname

      Dies ist der Name des Kind-Elements, in diesem Fall die Rechnungsposition. Geben Sie Item ein.

  5. Markieren Sie die Checkbox Feldnamen.

  6. Klicken Sie neben Feldnamen aus CSV-Datei auf den Import-Button, um die Datei zu laden, aus der die CSV-Feldnamen gelesen werden sollen. Der Dateiexplorer öffnet sich.

  7. Navigieren Sie zu der CSV-Datei <inubit-installdir>/client/tutorial/miller/Invoice.csv und laden Sie die Datei. Ein Rückfragedialog wird angezeigt. Bestätigen Sie diesen mit Ja.

    Die Feldnamen werden aus der CSV-Datei in der Reihenfolge ihres Vorkommens übernommen und angezeigt. Aus jedem Feldnamen wird bei der Ausführung des Adapters ein XML-Element erzeugt.

    Damit ist die Konfiguration des CSV-XML Adapters abgeschlossen.

  8. Klicken Sie auf Fertig stellen. Der Modul-Assistent schließt sich, auf der Arbeitsfläche wird ein CSV-XML Adapter-Icon angezeigt.

  9. Verbinden Sie den File Connector mit dem CSV-XML Adapter.

Testen Sie die beiden Module erneut und lassen Sie sich das erzeugte XML-Zwischenformat anzeigen.

Technical Workflow erstellen 3: CSV-XML konvertieren nach openTRANS

In diesem Abschnitt konvertieren Sie das XML-Zwischenformat mithilfe eines XSLT Converters in das openTRANS-Format.

Der XSLT Converter bietet eine grafische Oberfläche, mit der Sie komfortabel per Drag’n’Drop ein XSLT-Stylesheet erstellen. Das XSLT-Stylesheet wird verwendet, um die XML-Eingangsnachricht in die (ebenfalls XML-basierte) openTRANS-Ausgangsnachricht zu überführen.

XSLT Converter erzeugen

So gehen Sie vor

  1. Öffnen Sie in der Sidebar den Ordner Tools > Data Converter.

  2. Ziehen Sie den XSLT Converter auf die Arbeitsfläche.

    Der Modul-Assistent öffnet sich.

  3. Füllen Sie folgende Felder aus:

    • Name: 1_Invoice - CSV-XML - openTRANS

    • Eingabe: xml

    • Ausgabe: xml

  4. Klicken Sie auf Weiter. Die nächste Seite wird angezeigt. Hier müssen Sie keine Änderungen vornehmen.

  5. Klicken Sie auf Weiter. Die Seite Modul-Editor wird angezeigt:

    tutorial 120 0

    Der XSLT Converter hat eine dreiteilige Oberfläche:

    • Oben: Anzeige des Stylesheets

    • Unten links: Anzeige der Quelldatei und der Werte

    • Unten rechts: Anzeige der Zieldatei

      Quell- und Zieldatei dienen als Vorlagen für die Struktur der Ausgangsnachricht.

      Das XSLT-Stylesheet wird auf die XML-Eingangsnachricht angewendet und erzeugt die XML-Ausgangsnachricht entsprechend der Struktur der XML-Zieldatei.

Quell- und Zieldatei angeben

So gehen Sie vor

  1. Klicken Sie links unten auf den tutorial 121 1-Button und wählen Sie Öffnen > Datei:

    tutorial 121 2

    Navigieren Sie zu der Nachricht CSV-XML_Invoice.xml und laden Sie diese.

    Die Nachricht finden Sie im Verzeichnis <inubit‑installdir>/client/tutorial/miller/.

    Alternativ können Sie die benötigte Eingangsnachricht selbst erstellen, indem Sie den Workflow bestehend aus File Connector und CSV-XML Converter testen und die Ergebnisdatei aus dem letzten Watchpoint auf Ihrem Rechner speichern.

  2. Verfahren Sie genauso, um rechts unten die Zieldatei openTRANS_Invoice.xml zu laden. Die Datei liegt in demselben Verzeichnis.

    Nach dem Öffnen der Dateien werden die jeweiligen XML-Wurzelknoten angezeigt. Um die gesamte Struktur der Quell- und Zieldatei einzusehen, wählen Sie aus dem Kontextmenü über dem jeweiligen Wurzelknoten den Eintrag Alle aufklappen:

    tutorial 121 3

    Nach dem Aufklappen beider XML-Dateien sehen Sie, dass die Zieldatei im openTRANS-Format eine verschachtelte, deutlich komplexere Struktur hat als die Eingangsnachricht:

    tutorial 122 0
    • Quelldatei (links)

      In der CSV-XML-Datei entspricht eine Rechnungsposition einem <Item>. Die Daten werden anhand ihrer Semikolon-getrennten Positionen innerhalb einer Zeile zugeordnet und entsprechen den XML-Elementen unterhalb von <Item>.

      Jedes <Item>-Element hat die gleichen Kinder, d.h. die Elemente <Invoice_Id> bis <Tax>. Das bedeutet, dass jedes <Item> die gleichen Basisinformationen enthält und daher ein großer Teil der Daten redundant ist.

    • Zieldatei (rechts)

      Ist auf oberster Ebene in <INVOICE_HEADER>, <INVOICE_ITEM_LIST> und <INVOICE_SUMMARY> untergliedert. <INVOICE_ITEM_LIST> enthält mehrere <INVOICE_ITEM>, d.h. die einzelnen in Rechnung zu stellenden Positionen. Das Element <INVOICE_HEADER> enthält die Rechnungs-Basisinformationen, die im openTRANS-Format genau einmal und nicht zu jeder Rechnungsposition auftauchen.

      Nun bilden Sie die Elemente aus der Eingangsnachricht auf die Elemente in der Zieldatei ab. Bei den vorliegenden Dateien können Sie schon aufgrund der ähnlichen Namen auf Entsprechungen zwischen Quell- und Zieldatei schließen, z.B.:

Element in Eingangsnachricht Element in Zieldatei

Invoice_Id

INVOICE_ID

Invoice_Date

INVOICE_DATE

Position_Id

LINE_ITEM_ID

Currency

PRICE_CURRENCY

Item

INVOICE_ITEM

Zieldatei vorbereiten

So gehen Sie vor

  1. In der Zieldatei sind lediglich die Strukturen wichtig, nicht aber die enthaltenen Daten. Für eine bessere Übersicht klicken Sie daher im Bereich XML-Zieldatei auf tutorial 121 1 und wählen Daten aus der Struktur löschen.

  2. Die Zieldatei enthält mehrere <INVOICE_ITEM>-Elemente. Die Anzahl der Rechnungspositionen in der Ausgangsnachricht soll sich aber dynamisch an die Anzahl der Positionen in der Eingangsnachricht anpassen. Sie benötigen als Strukturvorlage also nur ein <INVOICE_ITEM>-Element. Klicken Sie erneut auf tutorial 121 1 und aktivieren Sie die Option Mehrfache Knoten ausblenden.

Zielstruktur abbilden

Im oberen Bereich ist das Grundgerüst des XSLT-Stylesheets bereits vorgegeben:

tutorial 123 0

So gehen Sie vor

  1. Zuerst legen Sie fest, welche Elemente erzeugt werden sollen. Dazu ziehen Sie aus dem Bereich XML-Zieldatei das Element <INVOICE> nach oben in den gelb hinterlegten Bereich XML-Ziel und lassen es auf das Element xsl:template fallen.

    tutorial 123 1
  2. Klappen Sie im Stylesheet das Element <INVOICE> auf. Sie sehen, dass das Element mit allen Kind-Elementen an das Element xsl:template gehängt wurde:

    tutorial 124 0

→ Damit haben Sie die openTRANS-Struktur im XSLT-Stylesheet hinterlegt.

Elemente aus Eingangsnachricht auf Zielstruktur abbilden

So gehen Sie vor

  1. Beginnen Sie mit den Basisinformationen der Rechnung. Ziehen Sie das Element <Invoice_Id> aus dem Bereich XML-Quelldatei nach oben in den Bereich XML-Quelle. Lassen Sie das Element in der Zeile <INVOICE_ID> fallen.

    Das folgende Menü öffnet sich:

    tutorial 124 1
  2. Wählen Sie Wert zuweisen (value-of). Das Ergebnis sieht so aus:

    tutorial 125 1

    Mit dem Befehl xsl:value-of legen Sie fest, dass der Inhalt des Quell-Elements als Inhalt des Ziel-Elements verwendet werden soll.

  3. Das Element Invoice/Item/Invoice_Id kommt in der Eingangsnachricht mehrfach vor. Um festzulegen, das nur die Invoice_ID des ersten Item-Elements gemeint ist, müssen Sie den XPath wie folgt ergänzen:

    tutorial 125 2

    Sie können jeden Arbeitsschritt testen, indem Sie in der Werkzeugleiste auf tutorial 125 3 klicken. Der XSLT-Prozessor generiert dann eine Ausgangsnachricht, die rechts unten im Register Ergebnis des Mappings angezeigt wird. Sie werden feststellen, dass ein Test mit dem aktuellen XSLT-Stylesheet erwartungsgemäß für das Element <INVOICE_ID> den Wert R112233 liefert.

  4. Verfahren Sie genauso mit den nachfolgenden Elementen bis einschließlich <Currency>:

    Ziehen Sie den Wert aus dem Bereich XML-Quelle in den Bereich XML-Ziel auf das passende Element, wählen Sie Wert zuweisen (value-of) und legen Sie danach fest, dass nur das erste Item-Element genutzt werden soll.

Schleife erstellen

So gehen Sie vor

  1. Die Knoten von <Position_Id> bis <Tax> enthalten Daten, die in jedem <Item>-Element unterschiedlich sind. Zusätzlich kann jede Rechnung mehrere Artikel (hier: 5 <Item>-Elemente) enthalten. Daher bietet es sich an, die immer wiederkehrenden Kind-Elemente mit unterschiedlichen Elementen über eine Schleife abzubilden:

  2. Ziehen Sie aus dem Bereich XML-Quelldatei ein <Item>-Element nach oben und lassen Sie es in der Zeile <INVOICE_ITEM> (unter <INVOICE_ITEM_LIST>) fallen. Das Auswahl-Menü öffnet sich.

  3. Wählen Sie Über diesen Knoten iterieren (for-each). Damit legen Sie fest, dass alle Anweisungen unterhalb dieses Befehls wiederholt werden. Es wird also für jedes Item-Element, das in der Eingangsnachricht gefunden wird, ein <INVOICE_ITEM>-Element inkl. aller Kind-Elemente erzeugt.

    Testen Sie das XSLT-Stylesheet, um den Schleifen-Effekt nachzuvollziehen.

  4. Bilden Sie die Elemente von <Position_Id> bis <Tax> ab. Nutzen Sie dazu wieder den Befehl <xsl:value-of>.

Statische Attribut-Werte zuweisen

Einige Knoten des Zieldokumentes enthalten Attribute, z.B. enthält das <INTERNATIONAL_AID>-Element das Attribut type und weist damit auf den Typ der Artikel-Id hin.

Das passende Element in der Eingangsnachricht ist <Article_EAN>, aus dem sich schließen lässt, dass der Typ der Artikel-Id EAN (Europäische Artikelnummer) ist.

So gehen Sie vor

Doppelklicken Sie in die Zeile des Attributs type und geben Sie den Wert EAN ein.

XSL-Variablen verwenden

In der XML-Zieldatei befinden sich unterhalb des Knotens <ARTICLE_PRICE> u.a. die Elemente <PRICE_LINE_AMOUNT>, <TAX> und <TAX_AMOUNT>.

Für das Element <TAX_AMOUNT> gibt es keine Entsprechung in der XML-Quelldatei. Der Wert kann aber durch Multiplikation der Elemente <PRICE_LINE_AMOUNT> und <TAX> berechnet werden. Dazu wird im Grunde keine Variable benötigt, trotzdem soll diese Stelle zur Demonstration der Verwendung von Variablen dienen.

Die Werte der Elemente <Position_Price> und <Tax> aus der Eingangsnachricht sollen an Variablen übergeben werden.

So gehen Sie vor

  1. Klicken Sie in der Zeile des Elements <ARTICLE_PRICE> auf den Button in der Mitte.

  2. Der XSLT-Kommandoassistent öffnet sich. Der Kommandoassistent unterstützt Sie beim Verwenden aller gängigen XSLT-Befehle. Sie können den gewünschten Befehl auswählen, konfigurieren und in das XSLT-Skript einfügen.

  3. Klicken Sie auf den Befehl variable. Eine Erklärung zu diesem Befehl wird angezeigt und darunter eine Liste seiner Attribute.

  4. Geben Sie als Wert des name-Attributs varLineAmount ein und klicken Sie auf OK.

  5. Der Kommandoassistent schließt sich und die Variable wird unterhalb von <ARTICLE_PRICE> angezeigt.

  6. Schieben Sie die Variable mit Alt+tutorial 126 0 vor das Element <PRICE_LINE_AMOUNT>.

  7. Da der Variablenwert dem Element <PRICE_LINE_AMOUNT> zugewiesen werden soll, muss die Deklaration oberhalb dieses Elementes erfolgen.

  8. Ordnen Sie der Variablen den Wert von <Position_Price> mit dem Befehl value-of zu.

  9. Ordnen Sie dem Element <PRICE_LINE_AMOUNT> mit value-of den Wert der Variablen varLineAmount zu. Beim Aufruf einer Variablen müssen Sie dem Variablennamen ein $-Zeichen voranstellen: $varLineAmount.

  10. Verfahren Sie genauso mit dem Element <TAX>.

    Das XML-Ziel sollte nun so aussehen:

    tutorial 126 1

Wert berechnen mit XSLT-Operatoren

Weil das Element <TAX_AMOUNT> keine Entsprechung in der Eingangsnachricht hat, muss dessen Wert berechnet werden. Dazu multiplizieren Sie die Variablen, die den Positionspreis und den Steuersatz enthalten.

So gehen Sie vor

  1. Fügen Sie unterhalb von <TAX_AMOUNT> den Befehl value-of ein.

  2. Geben Sie in der entsprechenden Zeile der XML-Quelle die Berechnung ein: $varLineAmount * $varTax

  3. Testen Sie das Stylesheet.

    Zeigen Sie das Ergebnis der eben durchgeführten Berechnung an. Sie werden feststellen, dass der Steuerbetrag nur eine Nachkommastelle hat.

XSLT-Funktionen anwenden

Zahlen formatieren

  • Zum Formatieren von Zahlen stellt XSLT die Funktion format-number() bereit. Verwenden Sie den Befehl format-number($varLineAmount * $varTax,'0.00'), um das Ergebnis mit zwei Dezimalstellen und einem Punkt als Dezimaltrennzeichen zu erzeugen:

    tutorial 127 1

Elemente zählen

  • Auch die Elemente unterhalb von <INVOICE_SUMMARY> haben keine Entsprechung in der Eingangsnachricht und müssen berechnet werden.

    Das Element <TOTAL_ITEM_NUM> soll angeben, wie viele Rechnungspositionen in der Rechnung vorhanden sind. Der Wert entspricht der Anzahl der Elemente in der Eingangsnachricht. Um die Anzahl der Elemente zu zählen, gibt es die Funktion count().

    Verwenden Sie count(Invoice/Item), um die Elemente zu zählen.

Summe berechnen

  • Das Element <TOTAL_AMOUNT> gibt den Gesamtnettobetrag der Rechnung an und berechnet sich aus der Summe aller Positionsnettobeträge in den <Position_Price>-Elementen. Die Summe aller Werte einer Knotenmenge wird mit der Funktion sum() berechnet.

    Die Summe wird als Zahl (number) angegeben, falls andere Werte als Zahlen in den Elementen vorhanden sind, dann wird als Summe NaN (Not a Number) ausgegeben!

    Die berechnete Summe muss zusätzlich formatiert werden, so dass sich folgender Eintrag ergibt:

    format-number(sum(Invoice/Item/Position_Price), '0.00')

Konstanten verwenden

  • Um das Element <TOTAL_TAX_AMOUNT> abzubilden, müssten die Werte von <Position_Price> und <Tax> innerhalb jeder Position multipliziert und anschließend addiert werden. Die Funktion sum() darf als Argument jedoch nur eine Knotenmenge, aber keinen mathematischen Ausdruck enthalten.

    Daher gehen wir davon aus, dass die Steuersätze innerhalb einer Rechnung identisch sind und verwenden eine Konstante:

    format-number(sum(Invoice/Item/Position_Price) * Invoice/Item[1]/Tax, '0.00')

    Der XPath-Ausdruck Invoice/Item[1] bewirkt, dass der <Tax> Wert aus dem ersten <Item> gelesen wird. Dieser Wert wird mit der Summe der Werte des Elements <Position_Price> multipliziert. Das Ergebnis wird mit der Funktion format-number() formatiert.

  • Klicken Sie auf Fertig stellen.

→ Der Modul-Assistent schließt sich, auf der Arbeitsfläche wird ein XSLT Converter-Icon angezeigt.

Testen Sie Ihr Stylesheet und verbinden Sie das XSLT-Converter-Modul mit dem CSV-XML-Modul.

Exkurs: XSLT

Wichtige XSLT-Befehle

  • xsl:value-of

    Eine Wertzuweisung. Der Wert des Elements in der Eingangsnachricht wird dem korrespondierenden Element der Ausgangsnachricht zugewiesen.

  • xsl:for-each

    Für das ausgewählte Element wird, entsprechend der Häufigkeit, mit der dieses Element in der Eingangsnachricht enthalten ist, in der Zielstruktur die gleiche Anzahl von Elementen angelegt.

    Beispiel:

    Wird der Wert des Elements <Item> aus der Eingangsnachricht dem Element <Artikel> in der Ausgangsnachricht zugeordnet, so wird diese Transformation genau so oft durchgeführt, wie `<Item>-`Elemente in der Eingangsnachricht gefunden werden. Dabei müssen die `<Item>-`Elemente immer genau unter dem XPath gefunden werden, der im Mapping angegeben ist.

  • xsl:copy-of

    Kopiert einen Knoten samt Kindknoten und Attributen aus der Quelldatei in das Ergebnis.

  • xsl:if

    Gibt eine Bedingung an. Wenn diese erfüllt ist, wird die korrespondierende Struktur auf der rechten Seite angelegt. Die Bedingung ist ein XPath-Ausdruck.

    Beispiel: Wenn es in der Quellstruktur ein Element <Price_Currency> gibt, dann kann der Wert dieses Elements ausgewertet werden: Price_Currency='Eur'.

  • xsl:choose-when

    Mit dieser Anweisung sind mehrere Fälle unterscheidbar. Auf der rechten Seite wird ein xsl:choose eingefügt. Darunter werden ein xsl:when und ein xsl:otherwise eingefügt. Das Element xsl:when kann anschließend so oft eingefügt werden, wie es gebraucht wird. Das Element xsl:otherwise ist optional. Zu jedem Element xsl:when wird auf der linken Seite eine Bedingung angegeben, wie in der if-Anweisung beschrieben. Der Zielknoten liegt jetzt noch unterhalb von xsl:choose und muss nun unter xsl:when oder xsl:otherwise verschoben werden.

  • xsl:result-document href='myVar' (XSLT 2.0)

    Diese Anweisung schreibt das Ergebnis der XSLT-Transformation in die Workflowvariable myVar. Damit nachfolgende Module auf diese Variable zugreifen können, muss die Workflowvariable myVar im Workflow definiert worden sein.

  • {$Variablenname}

    Innerhalb eines Attributwertes werden XPath-Ausdrücke in geschweiften Klammern ausgewertet und durch den zurückgegebenen Wert ersetzt.

XSLT-Stylesheets optimieren

Zur Verbesserung der Performance sind zwei Aspekte entscheidend:

  • Effizienter Code

  • Effiziente Verwendung des Codes

Die folgenden Regeln wurden von Dr. Michael Kay erstellt. Dieser anerkannte XSLT-Experte ist Entwickler des Saxon XSLT Prozessors und arbeitet beim World Wide Web Consortium (W3C) in der XSLT-Arbeitsgruppe.

Effizientes XSLT schreiben:

  • Zur Ausgabe eines Textes bei einem einfachen #PCDATA-Element benutzen Sie besser <xsl:value-of> als <xsl:apply-templates>.

  • Sortieren Sie die gleiche Knotenmenge nicht mehr als einmal. Wenn nötig, speichern Sie es als Fragment des Ergebnisbaums und greifen Sie mit der Erweiterungsfunktion node-set() darauf zu.

  • Evaluieren Sie dieselbe Knotenmenge nicht mehr als einmal. Speichern Sie diese in einer Variablen.

  • Vermeiden Sie komplexe Patterns in Template-Regeln. Benutzen Sie besser <xsl:choose> innerhalb einer Regel.

  • Vermeiden Sie den Gebrauch von //item.

  • Vermeiden Sie die Nutzung von -- oder -→ innerhalb von Kommentaren, da dies zu einem syntaktischen Fehler führt.

  • Vermeiden Sie <xsl:number> wenn es geht, durch den Einsatz von position().

  • Verwenden Sie <xsl:key> für Gruppierungen.

  • Seien Sie beim Gebrauch von vorangehenden oder nachgestellten Achsen von Geschwisterknoten vorsichtig. Dies weist häufig auf einen Algorithmus mit n-quadratischer Performance hin.

XSLT effizient benutzen

  • Wenn Sie das gleiche Quelldokument wiederholt benutzen, behalten Sie es im Speicher.

  • Wenn Sie dieselbe Transformation wiederholt ausführen müssen, benutzen Sie besser gleich das Ergebnis.

  • Halten Sie die Quelldokumente klein. Wenn nötig, teilen Sie die Dokumente auf.

  • Validieren Sie dieselbe Quelle nicht mehr als einmal.

  • Halten Sie das Ergebnisdokument klein.

  • Teilen Sie komplexe Transformationen in mehrere Abschnitte auf.

Technical Workflow erstellen 4: Datei in Dateisystem ablegen

Nun liegen die Rechnungen im richtigen Format vor und sollen mithilfe eines weiteren File Connectors in das Dateisystem der Assembler AG geschrieben werden.

File Connector anlegen

So gehen Sie vor

  1. Ziehen Sie aus der Sidebar aus der Gruppe System Connector einen File Connector auf das Diagramm. Der Modul-Assistent öffnet sich.

  2. Geben Sie Folgendes ein:

    • Name: 1_Invoice openTRANS output

    • Eingabe/Ausgabe: xml

  3. Klicken Sie auf Weiter und wählen Sie im nächsten Dialog den Typ Output Connector aus, da der Konnektor die Rechnungen ausgeben soll.
    Der Konnektorstatus kann inaktiv bleiben, solange der Workflow nicht zeitgesteuert gestartet werden soll.

    Übergehen Sie alle weiteren Optionen und wechseln Sie mit Weiter zum übernächsten Dialog. Den Dialog Zeitgesteuerte Verarbeitung können Sie ebenfalls übergehen.

  4. Geben Sie im Dialog Zu schreibende Datei, Bereich Datei, Feld Name den Eintrag Invoice*.xml ein.

    Wenn Sie den Dateinamen ohne Pfad eingeben, dann schreibt der File Connector die Datei in das Export-Verzeichnis des Workflows <inubit-installdir>/server/ibis_root/tutorial/inubit IS Team/miller/workflow/invoice supplier a/export

  5. Beenden Sie den Dialog mit Fertig stellen.

  6. Verbinden Sie den File Connector mit dem vorhergehenden Modul.

    Publizieren Sie Ihre Module nach wichtigen Konfigurationsschritten, um einzelne Arbeitszustände zu sichern. Der Test des kompletten Workflows ist nur erfolgreich, wenn alle Elemente und der Technical Workflow selbst vor dem Test publiziert wurden.

Testen Sie den Technical Workflow erneut. Wenn der Test erfolgreich war, haben Sie jetzt erfolgreich Ihren ersten kompletten Workflow erstellt!

Durchgängige Navigation: Technische Ebene mit fachlicher verbinden

In diesem Abschnitt verlinken Sie Ihren Technical Workflow mit seiner fachlichen Definition als Business Process Diagramm.

Mithilfe dieses Links können Sie top-down vom fachlichen Business Prozess zur technischen Umsetzung im Technical Workflow navigieren. Auf diese Weise können Sie im laufenden Betrieb auftretende Fehler fachlich einordnen.

So gehen Sie vor

  1. Zeigen Sie das Business Process Diagramm Main-Order-Transaction zum Bearbeiten im lokalen Register an.

  2. Öffnen Sie in der Sidebar die Palette Verlinkung.

  3. Navigieren Sie zu dem Technical Workflow 1_Invoice Supplier A.

  4. Ziehen Sie den Technical Workflow auf das Nachrichten-Zwischenereignis Receive invoice. Ein Dialog öffnet sich, in dem der Technical Workflow angezeigt wird.

  5. Markieren Sie die Verbindungslinie zwischen dem ersten und dem zweiten Modul, um das Modul Invoice CSV-XML zu überwachen.

  6. Öffnen Sie das Kontextmenü und wählen Sie Linkpoint setzen.

  7. Klicken Sie auf OK, um den Dialog zu schließen.

  8. Publizieren Sie das BPD.

→ An dem Zwischenereignis Receive invoice wird ein farbiger Linkpoint angezeigt, der die Verbindung zu dem Technical Workflow signalisiert:

tutorial 130 1

Klicken Sie auf den Linkpoint, um den verlinkten Technical Workflow anzuzeigen. In den Technical Workflow wurde an der ausgewählten Verbindung ein Link für den Rücksprung ins BPD eingefügt.