Skip to main content

xSuite Interface Windows Prism 5.x – Online-Hilfe

Indexdatenleser "UblInvoice"

Der Indexdatenleser "UblInvoice" ist eine allgemeinere Variante eines Indexdatenlesers für alle E-Rechnungsformate, die XML-Dateien in UBL-Syntax verwenden. Dieser Indexdatenleser umfasst alle Felder der UBL-Version 2.4 für die Dokumentarten "Invoice" und "CreditNote" und eignet sich insbesondere zum Auslesen von UBL-basierten Rechnungsformate, für die kein spezialisierter Indexdatenleser verfügbar ist.

Eigenschaft

Beschreibung

ProcessReadIndex[].BreakDownSubItems

Die UBL-Spezifikation bietet die Möglichkeit, über mehrere Ebenen hinweg Unterpositionen zu den Positionsdaten zu definieren. Die von xSuite Interface angesprochenen Ausgabesystem unterstützen jedoch nur flache Tabellen. Aus diesem Grund ist noch keine eingabeseitige Unterstützung für die Verarbeitung geschachtelter Tabellenkonstrukte implementiert. Standardmäßig werden nur die Positionen der obersten Ebene gelesen.

Wenn der Wert dieser Konfigurationseigenschaft true ist, werden die Positionsdaten bis auf die unterste Ebene heruntergebrochen (Standardwert: false). Es wird eine flache Tabelle erzeugt, die nur aus den Positionen der untersten Ebene besteht. Dies kann mit einem Informationsverlust einhergehen, wenn z .B. Datenfelder nur auf den übergeordneten Ebenen gesetzt sind. In begrenztem Umfang findet eine automatische Aggregation der Daten über alle Positionsdatenebenen statt. Dazu kommt die folgende Logik zum Einsatz:

Hinweis

Diese Logik wird nur auf die Elemente angewandt, die sich direkt unterhalb eines Positionsdatenelementes (InvoiceLine oder SubInvoiceLine) befinden. Auf tiefer geschachtelte Unterelemente wird die Logik nicht angewandt.

  • Listenelemente, d.h. solche, die gemäß Spezifikation mehrfach enthalten sein dürfen, werden über sämtliche Ebenen hinweg zu einer Gesamtliste zusammengefasst, die dann jeweils der heruntergebrochenen Position der untersten Ebene zugeordnet wird.

  • Bei allen anderen Elementen wird, ausgehend von den heruntergebrochenen Positionen der untersten Ebene, bei leeren oder nicht vorhandenen Werten so lange im jeweils übergeordneten Positionsdatenelement gesucht, bis ein Wert gefunden wird. Dieser Wert wird der Position der untersten Ebene zugeordnet. Wenn der Wert gleichzeitig auf mehreren Ebenen gesetzt ist, bleibt zumindest der Wert der tiefsten Ebene erhalten, auf der der Wert gefunden wurde. Ausgenommen von dieser Logik sind Elemente der Typen "Preis" und "Betrag". Diese Elemente stellen in der Regel in übergeordneten Positionen einen Summenwert über die untergeordneten Positionen dar.

ProcessReadIndex[].ReadValuesTree

Wahrheitswert, ob Werte als Baumstruktur eingelesen werden (Standardwert: false)

Wenn diese Eigenschaft aktiviert ist, übersteuert dies die Eigenschaft .ReadMultiValues. .ReadMultiValues liest multiple Werte, die in ein einzelnes Zielfeld übernommen werden sollen, als flaches Array ein. .ReadValuesTree generiert hingegen auch hierarchisch ineinander verschachtelte Arrays, die die Struktur widerspiegeln, in der die Werte im XML-Dokument angeordnet sind, wenn gemäß UBL-Spezifikation auf mehreren Ebenen des XML-Pfades multiple Knoten zulässig sind.

Die Eigenschaft .ReadValuesTree greift nur, wenn unter .InputName kein XPath-Ausdruck zur Definition des auszulesenden Knotens verwendet wird. Die Programmfunktionen zur Auswahl von Knoten via XPath liefern nur Einzelwerte oder flache Wertelisten.

Beispiel:

<Invoice>
   <AdditionalDocumentReference>
      <DocumentType>DocType1</DocumentType>
   </AdditionalDocumentReference>
   <AdditionalDocumentReference>
      <DocumentType>DocType2a</DocumentType>
      <DocumentType>DocType2b</DocumentType>
   </AdditionalDocumentReference>
   <AdditionalDocumentReference>
   </AdditionalDocumentReference>
</Invoice>

In diesem Beispiel sind AdditionalDocumentReference und DocumentType multiple XML-Knoten. Das Auslesen der Dokumenttypen führt zu dem folgenden Ergebnis:

[["DocType1"], ["DocType2a", "DocType2b"], []]

Für jede Ebene, auf der multiple Knoten erlaubt sind, wird grundsätzlich ein Array generiert. Dies geschieht unabhängig davon, ob und wie viele Werte vorhanden sind. Ebenen, auf denen nur einzelne Knoten zulässig sind, werden in der Rückgabestruktur jedoch nicht abgebildet. Wenn der Pfad ausschließlich einzelne Knoten umfasst, wird kein Array generiert. Stattdessen wird der Wert direkt zurückgeliefert.

Diese Eigenschaft unterscheidet sich von der Eigenschaft .ReadMultiValues, bei der abhängig vom Inhalt des Dokuments kein Wert, ein Einzelwert oder ein Werte-Array ausgelesen wird. Dieses Vorgehen kann in der Weiterverarbeitung eine Fallunterscheidung erfordern. .ReadValuesTree liefet hingegen für einen konkreten Pfad unabhängig vom Inhalt immer ein vorhersehbares Ergebnis (einen Einzelwert, ein Array oder ein geschachteltes Array).

Beim Auslesen von Tabellenfeldern wird unabhängig von .ReadValuesTree immer unterschieden zwischen den Positionsdaten (Knoten InvoiceLine und CreditNoteLine) und sonstigen Knoten, die mehrfach im Dokument vorkommen dürfen. Bei Positionsdaten erfolgt das Lesen der Werte separat für jeden vorhandenen Positionsdatenknoten. Die Werte können dadurch der betreffenden Position eindeutig zugeordnet werden. Wenn die Eigenschaft .ReadValuesTree aktiviert ist, können die pro Position gelesenen Werte in einer Array-Struktur dargestellt werden. Im Gegensatz dazu wird bei sonstigen Tabellendaten zunächst über das gesamte Dokument gelesen und das Ergebnis dann auf der obersten Array-Ebene in seine Elemente aufgetrennt, die jeweils einer Tabellenzeile zugewiesen werden.