Es ist in eEvolution möglich über ein Skriptings das XML zu manipulieren, was bei der Erzeugung einer elektronischen Rechnung in den Formaten "ZUGFeRD 1.0"," ZUGFeRD 2.1" und "XRechnung" von eEvolution generiert wird, um so kundenspezifische Anforderungen an die elektronische Rechnung umzusetzen.
Die Umsetzung in dem folgenden Beispiel erfolgt über eine DLL, die in eEvolution eingebunden wird und beinhaltet folgende Beispiele:
Manipulation im Rechnungskopf (hier: Zusatzinfo des Kunden)
Manipulation in den Rechnungspositionen (hier: Artikelbezeichung 5 des Artikels)
Das komplette Beispiel inklusive WTS ist unter dem Namen "ERechnung.EEvo.Extensions.Angauf" im Ordner "eEvolution SDK" im Ausführungsverzeichnis von eEvolution zu finden.
Beispiel 1: Anpassung des Models einer elektronischen Rechnung - Ergänzen der KUNDE.ZUSATZINFO
Beispiel 2: Anpassung des XMLs einer elektronischen Rechnung - Setzen der ARTIKEL.ABEZ5
Wir empfehlen, dass die Anpassungen von elektronischen Rechnungen in einer eigenen DLL vorgenommen werden. Ein Beispielprojekt welches die Einbindung über den Auftrag von eEvolution vornimmt, können Sie im Zip-Archiv „ERechnung.EEvo.Extensions.Angauf.zip“ finden, welches sich im Ausführungsverzeichnis von eEvolution im Ordner „eEvolution SDK“ befindet. Dieses Projekt können Sie wie gewohnt mit Visual Studio öffnen und erstellen.
Bitte beachten Sie:
Denken Sie daran, dass Sie ggf. die Verweispfade in Visual Studio anpassen müssen:
![]()
Das Aktivieren der DLL findet über die ebenfalls im Zip-Archiv enthaltene “callout.wts”-Datei im Ordner „ERechnung.EEvo.Extensions.Angauf\WTS“ statt.
Mit den folgenden Beispielen werden die beiden Möglichkeiten für die Manipulation der E-Rechnung dargelegt:
Das Beispiel "Beispiel 1: Anpassung des Models einer elektronischen Rechnung - Ergänzen der KUNDE.ZUSATZINFO" zeigt die Manipulation des Models ausgehend von dem für die elektronische Rechnungen erstellten Datenobjektes. Das Model orientiert sich in diesem Zusammenhang an der XML-Struktur der elektronischen Rechnung der Formate ZUGFeRD 1.0"," ZUGFeRD 2.1" und "XRechnung".
Das Beispiel "Beispiel 2: Anpassung des XMLs einer elektronischen Rechnung - Setzen der ARTIKEL.ABEZ5" erklärt, wie man das aus dem Model generierte XML anpassen kann.
Beide Möglichkeiten können genutzt werden, um eine Änderung der Daten vor der Versendung der elektronischen Rechnung in den Formaten "ZUGFeRD 1.0"," ZUGFeRD 2.1" und "XRechnung" vorzunehmen. Im Folgenden werden die beiden Möglichkeiten noch einmal näher an den Code-Beispielen erläutert.
In der Anpassungs-DLL muss ein Einstiegspunkt angelegt werden, über welchen gesteuert wird , ob das Model oder das XML selbst erweitert werden soll. In dem folgenden Code-Beispiel wird sich einmal an das „ERechnung_Post_CreateModel“-Event gehangen, um dort das Model um die ZUSATZINFO des Kunden zu erweitern und damit die Kopfinformationen einer elektronischen Rechnung zu manipulieren. Darüber hinaus wird sich auch an das „ERechnung_Post_CreateXml“-Event gehangen, um die Rechnungspositionen um die ABEZ5 des Artikels zu erweitern und damit die Positionen in einer elektronischen Rechnung zu manipulieren.
Zeitlich gesehen wird zuerst das Model generiert und anschließend das XML erzeugt, dabei gibt es folgende Manipulationsmöglichkeiten:
Mit der Manipulation des Models kann man bestehende Knoten abändern, was im "Beispiel 1: Anpassung des Models einer elektronischen Rechnung - Ergänzen der KUNDE.ZUSATZINFO" beschrieben wird.
Bei der Manipulation des XML kann man die Struktur selbst ändern, Knoten hinzufügen, verschieben oder entfernen, was im "Beispiel 2: Anpassung des XMLs einer elektronischen Rechnung - Setzen der ARTIKEL.ABEZ5" beschrieben wird.
Für den Fall, dass man bestehende Werte im elektronischen Rechnungsmodel ändern möchte, bietet sich diese Möglichkeit der Anpassung an. Um diese Änderungen durchzuführen, sollte man das „ERechnung_Post_CreateModel”-Event mit den folgend dargestellten Eigenschaften nutzen.
In den Argumenten des Callout-Events ist das entsprechende Locals-Objekt vom Typ „DBAnbindung.ScriptingLocals”, in welchem sich das Model-Datenobjekt vom Typ “CrossIndustryDocumentType” befindet und nach eigenem Bedarf abgeändert werden kann.
Der folgende Codeausschnitt zeigt die Möglichkeit, wie die Spalte ZUSATZINFO aus der Tabelle KUNDE in die „BuyerTraderParty“ eingebunden wird:
Falls im Model die "ID" des Kunden gesetzt wurde, wird diese mit der KDNR1 in der Tabelle KUNDE auf der DB abgeglichen, die ZUSATZINFO des passenden Datensatzes gesucht und gespeichert. Anschließend wird der Name des Kunden um die ZUSATZINFO ergänzt, so dass nicht mehr nur der Name 1- 4 des Kunden, sondern zusätzlich auch die ZUSATZINFO ausgegeben wird.
Sollte die "ID" nicht vergeben sein, sondern stattdessen die "GlobalID", so wird diese mit der Spalte ILN in der Tabelle KUNDE abgeglichen, die ZUSATZINFO des passenden Datensatzes gesucht und gespeichert. Anschließend wird der Name des Kunden um die ZUSATZINFO ergänzt, so dass nicht mehr nur der Name 1- 4 des Kunden, sondern zusätzlich auch die ZUSATZINFO ausgegeben wird.
Im XML wird die <ram:Name> um die ZUSATZINFO des Kunden ergänzt:
Für den Fall, dass man das XML einer elektronischen Rechnung ändern möchte, bietet sich diese Möglichkeit der Anpassung an. Um diese Änderungen durchzuführen, sollte man das „ERechnung_Post_CreateXml“-Event mit den folgenden dargestellten Eigenschaften nutzen:
In den Argumenten des Callout-Events ist das entsprechende Locals Objekt vom Typ „ZugferdDokument.ScriptingLocals”, in welchem sich das XML-Objekt vom Typ “XmlWithVersion” befindet und nach eigenem Bedarf abgeändert werden kann.
Der folgende Codeausschnitt zeigt die Möglichkeit, wie die Spalte ABEZ5 aus der Tabelle ARTIKEL in die „IncludedSupplyChainTradeLineItem“ eingebunden wird:
Hier werden alle Knoten auf ein XML-Element “IncludedSupplyChainTradeLineItem“ untersucht und für jeden gefundenen Knoten wird dann die „SellerAssignedID“ gesucht, um daraus die ARTNR1 aus der Tabelle ARTIKEL zu bestimmen. Sobald diese gefunden wurde, wird der entsprechende Artikel geladen, seine ABEZ5 gesucht und gespeichert, so dass diese anschließend an den Namen des Artikels im XML gehangen werden kann.
Im XML wird die <ram:Name> um die ABEZZ5 des Artikels ergänzt: