Events
Der Connector NAV/BC stellt für die XRechnung-Erzeugung einen Integration-Event bereit, mit dem das generierte XML vor dem Schreiben in die Ausgabedatei programmatisch angepasst werden kann.
OnAfterGenerateXML
Codeunit: 5402584 CON Exp. Sales Inv. XRechnung
Wird nach der XML-Generierung über die XMLPorts 5402510–5402513 ausgelöst und stellt das vollständige XML als Blob zur Verfügung. Änderungen am Parameter XmlBlob werden direkt in die Ausgabedatei übernommen.
| Parameter | Typ | Beschreibung |
|---|---|---|
CONJoblist |
Record 5402511 | Der zugehörige Joblisten-Datensatz (nur lesend) |
XmlBlob |
Record 99008535 | Das erzeugte XML als Blob (VAR – änderbar) |
Beispiel: BuyerReference und Note per Subscriber setzen
Das folgende Beispiel zeigt einen vollständigen Subscriber in einer eigenen Codeunit. Der Subscriber liest das XML aus dem Blob, modifiziert zwei Elemente per XPath und schreibt das Ergebnis zurück.
Hinweis: Für CII-Dokumente (XPort 5402513) gelten andere XML-Namespaces.
CONJoblist."PEPPOL CIUS"kann verwendet werden, um UBL und CII im Subscriber zu unterscheiden.
[EventSubscriber(Codeunit,5402584,OnAfterGenerateXML)]
LOCAL PROCEDURE OnAfterGenerateXML@1(CONJoblist@1000 : Record 5402511;VAR XmlBlob@1001 : Record 99008535);
VAR
XmlDoc@1002 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlDocument";
XmlNsMgr@1003 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNamespaceManager";
XmlNode@1004 : DotNet "'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Xml.XmlNode";
InStream@1005 : InStream;
OutStream@1006 : OutStream;
XmlText@1007 : Text;
BEGIN
// XML aus Blob lesen
XmlBlob.Blob.CREATEINSTREAM(InStream, TEXTENCODING::UTF8);
InStream.READ(XmlText);
// In XmlDocument laden
XmlDoc := XmlDoc.XmlDocument;
XmlDoc.LoadXml(XmlText);
// UBL-Namespaces fuer XPath registrieren
XmlNsMgr := XmlNsMgr.XmlNamespaceManager(XmlDoc.NameTable);
XmlNsMgr.AddNamespace('cbc', 'urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2');
XmlNsMgr.AddNamespace('cac', 'urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2');
// Beispiel 1: Vorhandenes Element ueberschreiben (BT-22 Note)
XmlNode := XmlDoc.SelectSingleNode('//cbc:Note', XmlNsMgr);
IF NOT ISNULL(XmlNode) THEN
XmlNode.InnerText := 'Interner Hinweis aus Subscriber';
// Beispiel 2: Wert aus CONJoblist uebernehmen (BT-10 BuyerReference)
XmlNode := XmlDoc.SelectSingleNode('//cbc:BuyerReference', XmlNsMgr);
IF NOT ISNULL(XmlNode) THEN
XmlNode.InnerText := CONJoblist."Ident-ID";
// Geaendertes XML zurueck in den Blob schreiben
CLEAR(XmlBlob.Blob);
XmlBlob.Blob.CREATEOUTSTREAM(OutStream, TEXTENCODING::UTF8);
OutStream.WRITE(XmlDoc.OuterXml);
END;