Übersicht
Das Sammeln von initialen Informationen (sogenannte Formaterkennung) wird bei Edifacts automatisch durchgeführt.
Die Formaterkennung der XML-Dateien wird standardmäßig in der Extension DIALECT konfiguriert.
Einrichtung
Beispiel der Extension DIALECT:
#Alle bekannten XML-Dialekte (Arten), mit Komma getrennt
xml.dialect=IDOCXML,AUT
#Den SAX-Parser für höhere Performance nutzen
xml..useParser=CEP
#Erkennung für IDOCXML
xml.dialect.IDOCXML.id=<EDI_DC40 SEGMENT="1">
#Erkennung für AUT
xml.dialect.AUT.id=<Cancellation
#Über den Xml-Tag mit dem Namen IDOCTYP wird die Unterart bestimmt (IDOC Basistyp)
xml.IDOCXML.type2=IDOCTYP
#AUT hat nur eine Unterart, sie wird fest auf "INVOIC_CANC_AUT" gesetzt.
xml.AUT.type2="INVOIC_CANC_AUT"
#/IDXGC/APERAK_02
xml./IDXGC/APERAK_02.type="APERAK"
xml./IDXGC/APERAK_02.version=/_-IDXGC_-APERAK_02/IDOC/_-IDXGC_-E1_UNB_01/_-IDXGC_-E1_UNH_01/ASSOCIATION_ASSIGNED_CODE
xml./IDXGC/APERAK_02.referenceNumber=/_-IDXGC_-APERAK_02/IDOC/_-IDXGC_-E1_UNB_01/INTERCHANGE_CONTROL_REFERENCE
xml./IDXGC/APERAK_02.senderName=/_-IDXGC_-APERAK_02/IDOC/_-IDXGC_-E1_UNB_01/_-IDXGC_-E1_UNH_01/_-IDXGC_-E1_NAD_03[PARTY_FUNCTION_CODE_QUALIFIER='MS']/NAME_AND_ADDRESS_DESCRIPTION_1
xml./IDXGC/APERAK_02.sender=/_-IDXGC_-APERAK_02/IDOC/_-IDXGC_-E1_UNB_01/INTERCHANGE_SENDER_IDENT
xml./IDXGC/APERAK_02.partnerName=/_-IDXGC_-APERAK_02/IDOC/_-IDXGC_-E1_UNB_01/_-IDXGC_-E1_UNH_01/_-IDXGC_-E1_NAD_03[PARTY_FUNCTION_CODE_QUALIFIER='MR']/NAME_AND_ADDRESS_DESCRIPTION_1
xml./IDXGC/APERAK_02.partner=/_-IDXGC_-APERAK_02/IDOC/_-IDXGC_-E1_UNB_01/INTERCHANGE_RECIPIENT_IDENT
xml./IDXGC/APERAK_02.alternativeId=/_-IDXGC_-APERAK_02/IDOC/EDI_DC40/DOCNUM
xml./IDXGC/APERAK_02.additional=Date;UtilRef
xml./IDXGC/APERAK_02.Date=/_-IDXGC_-APERAK_02/IDOC/EDI_DC40/CREDAT
xml./IDXGC/APERAK_02.UtilRef=""
#INVOIC CANCELLATION AUT
xml.INVOIC_CANC_AUT.type="INVOIC_CANCEL"
xml.INVOIC_CANC_AUT.version=/Invoice/@SchemaVersion
xml.INVOIC_CANC_AUT.referenceNumber=/Cancellation/InvoiceNumber
xml.INVOIC_CANC_AUT.partnerName=""
xml.INVOIC_CANC_AUT.partner=/Cancellation/RoutingHeader/Receiver/MessageAddress
xml.INVOIC_CANC_AUT.senderName=/Cancellation/Supplier/NameAddress/Name/Name1
xml.INVOIC_CANC_AUT.sender=/Cancellation/RoutingHeader/Sender/MessageAddress
xml.INVOIC_CANC_AUT.alternativeId=""
xml.INVOIC_CANC_AUT.additional=Date;UtilRef
xml.INVOIC_CANC_AUT.Date=""
xml.INVOIC_CANC_AUT.UtilRef=""
Erklärung des Beispiels
Es können kommagetrennt mehrere Arten (Dialekte) von XML definiert werden, in der Eigenschaft xml.dialect
xml.dialect=IDOCXML,AUT
Mit xml..useParser=CEP
wird der hochperformante SAX-Parser verwendet.
Pro Dialekt wird angegeben, wie diese Xmls erkannt werden sollen. Als Wert soll ein Ausschnitt aus der Xml angegeben werden, der in allen Xmls dieser Art vorkommt (aber nicht in anderen Dialekts)
xml.dialect.IDOCXML.id=<EDI_DC40 SEGMENT="1">
xml.dialect.AUT.id=<Cancellation>
Wenn ein Dialekt mehrere Unterarten hat (z. B. Basistypen von Idocs), können diese Arten anhand eines in der Xml vorhandenen Tags erkannt. Der Tag wird angegeben über
xml.IDOCXML.type2=IDOCTYP
Wenn das Xml-Dialect nur eine Unterart besitzt, wird der Name in Anführungszeichen genommen:
xml.AUT.type2="INVOIC_CANC_AUT"
Im nächsten Block wird pro Unterart konfiguriert, wie die benötigten Informationen aus der Xml ausgelesen werden. Die Stelle wird in einem Xpath-Ausdruck angegeben. Erforderliche Informationen sind type, version, referenceNumber, sender, partner.
Es ist außerdem möglich, zusätzliche Informationen aus der Xml auszulesen um während der Nachrichtenverarbeitung darauf zuzugreifen. Dies geschieht über die Konfiguration im Schlüssel xml.<Untertyp>.additional.
Als Wert können Variablennamen festgelegt werden (getrennt mit Semikolon). Jede Variable wird danach einzeln konfiguriert:
xml./IDXGC/UTILMD_02.additional=Date;Category;Provider
xml./IDXGC/UTILMD_02.Date=/_-IDXGC_-UTILMD_02/IDOC/EDI_DC40/CREDAT
xml./IDXGC/UTILMD_02.Category=/_-IDXGC_-UTILMD_02/IDOC/_-IDXGC_-E1_UNB_01/_-IDXGC_-E1_UNH_01/_-IDXGC_-E1_BGM_02/DOCUMENT_NAME_CODE
xml./IDXGC/UTILMD_02.Provider="NLI"
Während der Nachrichtenverarbeitung kann darauf zum Beispiel über den dynamischen Ausdruck ${template(&(this.FORMAT.attributes.Category))}
zugegriffen werden.
Generieren einer neuen Referenznummer
Falls die Xml keine Referenznummer enthält, kann sie zufällig generiert werden. Dazu muss der Wert der Eigenschaft referenceNumber auf $GENERATE_RANDOM$
gesetzt werden:
xml./IDXGC/APERAK_02.referenceNumber="$GENERATE_RANDOM$"
Erkennung des Dialekts anhand mehrerer Wörter in beliebiger Reihenfolge
In einigen XML-Dateien, wie zum Beispiel in Schedule-Dokumenten, können einige Wörter in einer anderen Reihenfolge erscheinen und zwischen ihnen können Leerzeichen und Zeilenumbrüche enthalten sein. Um dieses Problem zu lösen, kann die Erkennung des Dialekts in xml.dialect.
xml.dialect.SCHEDULE_23.id.token=ScheduleMessage DtdVersion="2" DtdRelease="3"
Damit wird geprüft, ob die Tokens ScheduleMessage, DtdVersion=”2” und DtdRelease=”3” in beliebiger Reihenfolge und mit beliebigem Abstand dazwischen im Dokument enthalten sind. Nur wenn ALLE Tokens gefunden werden, wird das Dialekt zugeordnet.
Beachten Sie, dass spitze Klammern wie ‘<’ und ‘>’ beim Token-Mechanismus nicht ausgewertet werden, wenn sie am Anfang oder Ende der ID-Zeichenfolge stehen.
Alternative zur DIALECT
Die Pfad-Ausdrücke in DIALECT erlauben nur grundlegende XPath-Funktionalität. Komplett wird XPAth in der Formaterkennung XPathAnalyzer unterstützt. Sieh dazu die Dokumentation XPathAnalyzer
View Me Edit Me