EDIFACT Nachrichten nach PDF, XML, EDIFACT oder Text konvertieren

Kurzbeschreibung

Die EdifactTransformerAction führt XSL Transformationen auf Elemente des Nachrichtenkontextes aus und speichert das Resultat als Kontext-Element. Anders als die reguläre TransformerAction ist sie dazu in der Lage direkt auf EDIFACT Dateien zu arbeiten. Weiterhin erlaubt sie die Konvertierung von EDIFACT in zusätzliche Ausgabeformate PDF (mittels XSL-FO siehe W3C Spezifikation), Text, XML DOM Bäume für die spätere Weiterverarbeitung innerhalb der B2B und zuletzt andere EDIFACT Dateien.

Die breite Palette an Einsatzmöglichkeiten dieser Action erlaubt es dem Benutzer mit Hilfe einer Standardisierten Sprache nahezu beliebige Transformationen von XML (auch IDOC) oder EDIFACT Dokumenten zu beliebigen anderen Formaten zu definieren. Eigene Mappings, die Bearbeitung von EDIFACT Nachrichten und die Erstellung von PDF Dokumenten aus EDIFACT Dateien werden somit ermöglicht.

Das zu verwendende XSL Skript wird wie in der TransformerAction in der B2B als Content hinterlegt. Näheres dazu ist der Dokumentation der TransformerAction zu entnehmen.

Zur XSL-Transformation wird standardmäßig die in der Java VM integrierte Funktionalität genutzt.

Einrichtung

Die EdifactTransformerAction wird als Java-Action eingerichtet (siehe Actions Anlegen). Dabei müssen die folgenden Einstellungen der Action vorgenommen werden.

  • Klasse
    com.nextlevel.b2b.edifact.transform.actions.EdifactTransformerAction
  • Typ
    JAVA

Alle weiteren Einstellungen der Action, die nach Erstellen der Action gesetzt werden, finden sich in den nachstehenden Tabellen.

ActionEigenschaften (Erforderlich)

Hier genannte Eigenschaften müssen konfiguriert werden. Sonst wird bei der Ausführung der Action ein Fehler generiert.

Name der Eigenschaft erlaubte Werte Beschreibung
B3P_CONTENT_DESTINATION_FORMAT EDI, TEXT, XML, PDF Diese Einstellung gibt das Zielformat an, das in der Adminstrationsansicht unter dem Reiter 'Content' zur Identifikation des zu verwendenden Skriptes genutzt wird.Velocity Template-Ausdrücke sind erlaubt.
EDI
Die Ausgabe wird als EDIFACT abgelegt. Dafür muss das Ergebnis der Transformation dem unten beschriebenen Format für EDIFACT-XML entsprechen.
TEXT
Das Ergebnis der Transformation wird als Text ausgegeben. Das exakte Format wird durch die XSL Transformation bestimmt.
XML
Das Ergebnis der Transformation wird als XML Baum (DOM) Objekt abgelegt. Dieses Format ist nicht direkt serialisierbar und entspricht nicht etwa XML Text. Das Format ist dazu gedacht eine effiziente Weiterverarbeitung mittels mehrerer EdifactTransformerActions zu ermöglichen.
PDF
Die Ausgabe wird als PDF abgelegt. Dafür muss das Ergebnis der Transformation im XSL-FO Format sein.

ActionEigenschaften (Optional)

Neben der unter aufgeführten Eigenschaften existieren andere allegemeine Eingenschaften, die im Dokument TransformerAction beschrieben sind.

Name der Eigenschaft erlaubte Werte Beschreibung
B3P_EDI_PARSER_CONFIG Durch Semikolon getrennte Liste von Schlüssel-Wert-Paaren der Länge 1..1000. Beispiel: "schluessel1=wert1;schluessel2=wert2". Die reservierten Zeichen ‘;’, ‘=’ und ‘' müssen mit einem zusätzlichen Backslash (‘') als Präfix versehen werden, falls sie in einem Schlüsselnamen oder einem Wert vorkommen. Die hier definierten Eigenschaften werden an den Edifact-Parser weitergegeben. Die Einstellung allow.whitespace=false besagt, dass keine Zeilenumbrüche oder zusätzliche Leerzeichen im EDIFACT erlaubt sind. Ist allow.whitespace=true gesetzt werden Zeilenumbrüche ignoriert.

Service Eigenschaften (Experte)

Hier genannte Eigenschaften sollten nur in Ausnahmefällen oder durch Expertennutzer gesetzt werden, die mit dem Quellcode der EdifactTransformerAction vertraut sind. Siehe auch den entsprechenden Abschnitt unter TransformerAction

Name der Eigenschaft erlaubte Werte Beschreibung
B3P_EDI_SCHEMA_PROVIDER ein vollqualifizierter Klassenname Die Eigenschaft gibt die Klasse an, durch die die Struktur des EDIFACT Baumes definiert wird. Standardeinstellung ist der Provider com.nextlevel.b2b.edifact.unschema.UNMessageSchemaProvider, der auf den UNECE Formaten basiert.

Einlesen von EDIFACT Dateien

Für die Verarbeitung von EDIFACT Dateien mit XSL Transformationen werden EDIFACT Dateien als XML-äquivalent Bäume dargestellt. Die Dokumenthierarchie des XML-äquivalent Baumes orientiert sich dabei an der von der UNECE vorgegebenen Struktur der EDIFACT Dateien. Jede EDIFACT Datei hat dabei ein Grundelement <edi>. Unter diesem Hauptknoten befinden sich die Segmente der EDIFACT Datei in derselben Reihenfolge wie in der textuellen Darstellung. Existierende Segmentgruppen werden durch eine Verschachtelung der XML-äquivalent Knoten dargestellt.

Das Grundgerüst jeder EDIFACT Datei wird wie folgt transformiert:

UNA
UNB
  UNH

  UNT
  ...
  UNH

  UNT
UNZ
<EDI>
    <UNA>...</UNA>
    <UNB>
        <UNH>
            ...
        <UNT>...</UNT>
    </UNH>
    <UNB>
        <UNH>
            ...
        <UNT>...</UNT>
    </UNH>
</EDI>

Die Elemente und Felder eines Segments wird unter einem XML-äquivalenten Element <data> im Element eines Segmentes gespeichert. Dabei erhalten Kompositelemente einen Tag-Namen, der dem Namen des Komposits in den Spezifikationen der UNECE (bzw. des MIGs des BDEW) entspricht. Unterhalb des Komposits sind die einzelnen Felder mit einem Feldnamen der F<Feldnummer> entspricht. Felder, die keine Kompositbezeichner erhalten, da sie nur einen einzelnen Wert enhalten werden durch zwei ineinander verschachtelte Elemente dargestellt, die jeweils durch den Feldnamen bezeichnet sind. Der Zweck dieser Darstellung ist, dass dadurch alle Feldinhalte eines Segments in derselben Verschachtelungstiefe zu finden sind.

Ein UNH Segment wird daher wie folgt transformiert:

UNH+CBRASS14133787+INVOIC:D:06A:UN:2.6'

wird somit zu dem folgenden XML-äquivalent:

<UNH>
        <data>
                <F0062>
                        <F0062>CBRASS14133787</F0062>
                </F0062>
                <S009>
                        <F0065>INVOIC</F0065>
                        <F0052>D</F0052>
                        <F0054>06A</F0054>
                        <F0051>UN</F0051>
                        <F0057>2.6</F0057>
                </S009>
        </data>
            ...
</UNH>

Das folgende Beispiel zeigt das Transformationsergebnis einer vollständigen EDIFACT Datei in XML. Diese erhält man beispielsweise, wenn man das EDIFACT in TEXT (siehe unten) konvertiert.

UNB+UNOC:3+9905282000003:500+9903324000006:500+140910:1334+CBRASS01855921'
UNH+CBRASS14133787+INVOIC:D:06A:UN:2.6'
BGM+380+CBRASS91625573BGM+9'
DTM+137:20140910:102'
DTM+9:20140910:102'
DTM+203:20140910:102'
IMD++WIM'
RFF+Z13:31003'
RFF+OI:DE123456'
DTM+171:20140910:102'
NAD+MS+9905282000003::293++Tester:::::Z01+Nattermannalle ::1+Köln++50829+DE'
RFF+VA:123456789'
NAD+MR+9903324000006::293++Anderer Tester:::::Z01+Nattermannalle ::1+Köln++50829+DE'
NAD+DP+1+++Nattermannalle::1+Köln++50829+DE'
LOC+172+DE123456789'
CUX+2:EUR:4'
PYT+3'
DTM+265:20140910:102'
LIN+1++2321321:Z01'
QTY+47:1000:PCS'
DTM+155:20140910:102'
MOA+203:100'
MOA+131:10'
PRI+CAL:100'
TAX+7+VAT+++:::19+S'
UNS+S'
MOA+77:1000'
MOA+9:1000'
TAX+7+VAT+++:::19+S'
MOA+125:1000'
MOA+161:1000'
UNT+30+CBRASS14133787'
UNZ+1+CBRASS01855921'
<?xml version="1.0" encoding="UTF-8"?>
<edi>
        <UNA>:+.? '</UNA>
        <UNB>
                <data>
                        <S001>
                                <F0001>UNOC</F0001>
                                <F0002>3</F0002>
                        </S001>
                        <S002>
                                <F0004>9905282000003</F0004>
                                <F0007>500</F0007>
                        </S002>
                        <S003>
                                <F0010>9903324000006</F0010>
                                <F0007>500</F0007>
                        </S003>
                        <S004>
                                <F0017>140910</F0017>
                                <F0019>1334</F0019>
                        </S004>
                        <F0020>
                                <F0020>CBRASS01855921</F0020>
                        </F0020>
                </data>
                <UNH>
                        <data>
                                <F0062>
                                        <F0062>CBRASS14133787</F0062>
                                </F0062>
                                <S009>
                                        <F0065>INVOIC</F0065>
                                        <F0052>D</F0052>
                                        <F0054>06A</F0054>
                                        <F0051>UN</F0051>
                                        <F0057>2.6</F0057>
                                </S009>
                        </data>
                        <BGM>
                                <data>
                                        <C002>
                                                <F1001>380</F1001>
                                        </C002>
                                        <C106>
                                                <F1004>CBRASS91625573BGM</F1004>
                                        </C106>
                                        <F1225>
                                                <F1225>9</F1225>
                                        </F1225>
                                </data>
                        </BGM>
                        <DTM>
                                <data>
                                        <C507>
                                                <F2005>137</F2005>
                                                <F2380>20140910</F2380>
                                                <F2379>102</F2379>
                                        </C507>
                                </data>
                        </DTM>
                        <DTM>
                                <data>
                                        <C507>
                                                <F2005>9</F2005>
                                                <F2380>20140910</F2380>
                                                <F2379>102</F2379>
                                        </C507>
                                </data>
                        </DTM>
                        <DTM>
                                <data>
                                        <C507>
                                                <F2005>203</F2005>
                                                <F2380>20140910</F2380>
                                                <F2379>102</F2379>
                                        </C507>
                                </data>
                        </DTM>
                        <IMD>
                                <data>
                                        <F7077>
                                                <F7077 />
                                        </F7077>
                                        <C272>
                                                <F7081>WIM</F7081>
                                        </C272>
                                </data>
                        </IMD>
                        <RFF>
                                <data>
                                        <C506>
                                                <F1153>Z13</F1153>
                                                <F1154>31003</F1154>
                                        </C506>
                                </data>
                        </RFF>
                        <RFF>
                                <data>
                                        <C506>
                                                <F1153>OI</F1153>
                                                <F1154>DE123456</F1154>
                                        </C506>
                                </data>
                                <DTM>
                                        <data>
                                                <C507>
                                                        <F2005>171</F2005>
                                                        <F2380>20140910</F2380>
                                                        <F2379>102</F2379>
                                                </C507>
                                        </data>
                                </DTM>
                        </RFF>
                        <NAD>
                                <data>
                                        <F3035>
                                                <F3035>MS</F3035>
                                        </F3035>
                                        <C082>
                                                <F3039>9905282000003</F3039>
                                                <F1131 />
                                                <F3055>293</F3055>
                                        </C082>
                                        <C058>
                                                <F3124 />
                                        </C058>
                                        <C080>
                                                <F3036>Tester</F3036>
                                                <F3036 />
                                                <F3036 />
                                                <F3036 />
                                                <F3036 />
                                                <F3045>Z01</F3045>
                                        </C080>
                                        <C059>
                                                <F3042>Nattermannalle </F3042>
                                                <F3042 />
                                                <F3042>1</F3042>
                                        </C059>
                                        <F3164>
                                                <F3164>Köln</F3164>
                                        </F3164>
                                        <C819>
                                                <F3229 />
                                        </C819>
                                        <F3251>
                                                <F3251>50829</F3251>
                                        </F3251>
                                        <F3207>
                                                <F3207>DE</F3207>
                                        </F3207>
                                </data>
                                <RFF>
                                        <data>
                                                <C506>
                                                        <F1153>VA</F1153>
                                                        <F1154>123456789</F1154>
                                                </C506>
                                        </data>
                                </RFF>
                        </NAD>
                        <NAD>
                                <data>
                                        <F3035>
                                                <F3035>MR</F3035>
                                        </F3035>
                                        <C082>
                                                <F3039>9903324000006</F3039>
                                                <F1131 />
                                                <F3055>293</F3055>
                                        </C082>
                                        <C058>
                                                <F3124 />
                                        </C058>
                                        <C080>
                                                <F3036>Anderer Tester</F3036>
                                                <F3036 />
                                                <F3036 />
                                                <F3036 />
                                                <F3036 />
                                                <F3045>Z01</F3045>
                                        </C080>
                                        <C059>
                                                <F3042>Nattermannalle </F3042>
                                                <F3042 />
                                                <F3042>1</F3042>
                                        </C059>
                                        <F3164>
                                                <F3164>Köln</F3164>
                                        </F3164>
                                        <C819>
                                                <F3229 />
                                        </C819>
                                        <F3251>
                                                <F3251>50829</F3251>
                                        </F3251>
                                        <F3207>
                                                <F3207>DE</F3207>
                                        </F3207>
                                </data>
                        </NAD>
                        <NAD>
                                <data>
                                        <F3035>
                                                <F3035>DP</F3035>
                                        </F3035>
                                        <C082>
                                                <F3039>1</F3039>
                                        </C082>
                                        <C058>
                                                <F3124 />
                                        </C058>
                                        <C080>
                                                <F3036 />
                                        </C080>
                                        <C059>
                                                <F3042>Nattermannalle</F3042>
                                                <F3042 />
                                                <F3042>1</F3042>
                                        </C059>
                                        <F3164>
                                                <F3164>Köln</F3164>
                                        </F3164>
                                        <C819>
                                                <F3229 />
                                        </C819>
                                        <F3251>
                                                <F3251>50829</F3251>
                                        </F3251>
                                        <F3207>
                                                <F3207>DE</F3207>
                                        </F3207>
                                </data>
                                <LOC>
                                        <data>
                                                <F3227>
                                                        <F3227>172</F3227>
                                                </F3227>
                                                <C517>
                                                        <F3225>DE123456789</F3225>
                                                </C517>
                                        </data>
                                </LOC>
                        </NAD>
                        <CUX>
                                <data>
                                        <C504>
                                                <F6347>2</F6347>
                                                <F6345>EUR</F6345>
                                                <F6343>4</F6343>
                                        </C504>
                                </data>
                        </CUX>
                        <PYT>
                                <data>
                                        <F4279>
                                                <F4279>3</F4279>
                                        </F4279>
                                </data>
                                <DTM>
                                        <data>
                                                <C507>
                                                        <F2005>265</F2005>
                                                        <F2380>20140910</F2380>
                                                        <F2379>102</F2379>
                                                </C507>
                                        </data>
                                </DTM>
                        </PYT>
                        <LIN>
                                <data>
                                        <F1082>
                                                <F1082>1</F1082>
                                        </F1082>
                                        <F1229>
                                                <F1229 />
                                        </F1229>
                                        <C212>
                                                <F7140>2321321</F7140>
                                                <F7143>Z01</F7143>
                                        </C212>
                                </data>
                                <QTY>
                                        <data>
                                                <C186>
                                                        <F6063>47</F6063>
                                                        <F6060>1000</F6060>
                                                        <F6411>PCS</F6411>
                                                </C186>
                                        </data>
                                </QTY>
                                <DTM>
                                        <data>
                                                <C507>
                                                        <F2005>155</F2005>
                                                        <F2380>20140910</F2380>
                                                        <F2379>102</F2379>
                                                </C507>
                                        </data>
                                </DTM>
                                <MOA>
                                        <data>
                                                <C516>
                                                        <F5025>203</F5025>
                                                        <F5004>100</F5004>
                                                </C516>
                                        </data>
                                </MOA>
                                <MOA>
                                        <data>
                                                <C516>
                                                        <F5025>131</F5025>
                                                        <F5004>10</F5004>
                                                </C516>
                                        </data>
                                </MOA>
                                <PRI>
                                        <data>
                                                <C509>
                                                        <F5125>CAL</F5125>
                                                        <F5118>100</F5118>
                                                </C509>
                                        </data>
                                </PRI>
                                <TAX>
                                        <data>
                                                <F5283>
                                                        <F5283>7</F5283>
                                                </F5283>
                                                <C241>
                                                        <F5153>VAT</F5153>
                                                </C241>
                                                <C533>
                                                        <F5289 />
                                                </C533>
                                                <F5286>
                                                        <F5286 />
                                                </F5286>
                                                <C243>
                                                        <F5279 />
                                                        <F1131 />
                                                        <F3055 />
                                                        <F5278>19</F5278>
                                                </C243>
                                                <F5305>
                                                        <F5305>S</F5305>
                                                </F5305>
                                        </data>
                                </TAX>
                        </LIN>
                        <UNS>
                                <data>
                                        <F0081>
                                                <F0081>S</F0081>
                                        </F0081>
                                </data>
                        </UNS>
                        <MOA>
                                <data>
                                        <C516>
                                                <F5025>77</F5025>
                                                <F5004>1000</F5004>
                                        </C516>
                                </data>
                        </MOA>
                        <MOA>
                                <data>
                                        <C516>
                                                <F5025>9</F5025>
                                                <F5004>1000</F5004>
                                        </C516>
                                </data>
                        </MOA>
                        <TAX>
                                <data>
                                        <F5283>
                                                <F5283>7</F5283>
                                        </F5283>
                                        <C241>
                                                <F5153>VAT</F5153>
                                        </C241>
                                        <C533>
                                                <F5289 />
                                        </C533>
                                        <F5286>
                                                <F5286 />
                                        </F5286>
                                        <C243>
                                                <F5279 />
                                                <F1131 />
                                                <F3055 />
                                                <F5278>19</F5278>
                                        </C243>
                                        <F5305>
                                                <F5305>S</F5305>
                                        </F5305>
                                </data>
                                <MOA>
                                        <data>
                                                <C516>
                                                        <F5025>125</F5025>
                                                        <F5004>1000</F5004>
                                                </C516>
                                        </data>
                                </MOA>
                                <MOA>
                                        <data>
                                                <C516>
                                                        <F5025>161</F5025>
                                                        <F5004>1000</F5004>
                                                </C516>
                                        </data>
                                </MOA>
                        </TAX>
                        <UNT>
                                <data>
                                        <F0074>
                                                <F0074>30</F0074>
                                        </F0074>
                                        <F0062>
                                                <F0062>CBRASS14133787</F0062>
                                        </F0062>
                                </data>
                        </UNT>
                </UNH>
                <UNZ>
                        <data>
                                <F0036>
                                        <F0036>1</F0036>
                                </F0036>
                                <F0020>
                                        <F0020>CBRASS01855921</F0020>
                                </F0020>
                        </data>
                </UNZ>
        </UNB>
</edi>

Ein Transformationsergebnis im obenstehenden XML Format kann durch die EdifactTransformerAction ebenfalls wieder nach EDIFACT zurücktransformiert werden. Dadurch wird es möglich, den Dokumentbaum einer EDIFACT zu bearbeiten und ihn anschließend wieder in eine EDIFACT Nachricht umzuwandeln.

Konfiguration für eine Umwandlung der Edifact in Xml

Um eine Edifact in die oben gezeigte Xml umzuwandelt, muss die Action so konfiguriert werden:

TRANSFORMER_FACTORY_CLASSNAME = com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl
B3P_USE_EXTENSION = true
B3P_CONTENT_FORMAT_TYPE = EDIXML.xslt
B3P_CONTENT_DESTINATION_FORMAT = TEXT

Als Extension EDIXML.xslt muss folgendes Template hochgeladen werden:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

Ausgabe von PDF

Die Ausgabe von PDF Dateien erfordert zunächst eine Transformation des Eingangsformates (XML oder EDIFACT) in das Übergangsformat XSL-FO. Dieses Format ist vom W3C dokumentiert. Um dieses Übergangsformat zu generieren muss der Benutzer eine entsprechende XSL-Transformation mit einem gewöhnlichen XSL Stylesheet definieren. Das Transformationsergebnis der XSL Transformation (dann XSL-FO) wird mit Hilfe der FOP-Bibliothek der Apache Software Foundation in ein PDF umgewandelt, dass binär im Nachrichtenkontext abgelegt wird.

Soll das Zieldokument Grafikobjekte enthalten (z. B. Logos) müssen diese im XSL-FO adressiert werden. Die Spezifikation des W3C sieht hierfür vor, dass Grafikobjekte als URLs adressiert werden können:

<xsl:template match="photo">
  <fo:block text-align="center">
    <fo:external-graphic src="'url({@image})'"/>
  </fo:block>
</xsl:template>

Um diese Grafikobjekte ebenfalls aus der Datenbank laden zu können wurde der folgende Syntax für die Adressierung von als Content or als Extension hinterlegte Grafikobjekte entwickelt:

  • Extension
    b2b://extension/<type>/<provider>/<version>
  • Content

    b2b://content/<provider>/<version>/<format>/<format-version>/<destination-format>/<type>

View Me   Edit Me