Skip to main content

xSuite Interface Windows Prism 5.x – Online-Hilfe

Indexdatenleser "Json"

Der Indexdatenleser "Json" ist ein generischer Indexdatenleser für JSON-Dateien mit weitgehend beliebigem Aufbau.

Eigenschaft

Beschreibung

ProcessReadIndex[].ItemProperty[]

Teilparameter zur Definition einer Eigenschaft im JSON-Objekt, die Unterobjekte enthält, die jeweils eine Zeile tabellarischer Daten darstellen:

  1. ItemProp*: betreffende Eigenschaft in JSONPath-Syntax

  2. FieldName: optionaler Tabellenname der Zielfelder im Feldkatalog

Die Eigenschaft .ItemProperty[] kann mehrfach mit unterschiedlichen FieldName-Parametern definiert werden, wenn mehrere JSON-Eigenschaften vorhanden sind, deren Werte verschiedenen Zieltabellen zugeordnet werden sollen. Bei Weglassung des Parameters gilt der Eintrag global für alle Tabellen.

Der Pfad auf die Quelleigenschaft, der in den Feldzuordnungen unter ProcessReadIndex[].Field[].InputName anzugeben ist, muss bei tabellarischen Daten relativ zu den über den Parameter ItemProp ermittelten Unterobjekten definiert werden.

ProcessReadIndex[].ConvertUtcDate

Umrechnungsart von Datumsangaben und Zeitangaben in die lokale Zeit

Datums-/Zeitangaben werden im JSON-Format als String-Werte übergeben. In der Regel kommt eine Syntax in koordinierter Weltzeit (UTC) zum Einsatz. Diese Konfigurationseigenschaft legt fest, ob und wie solche Werte in die lokale Zeit umgerechnet werden:

  • Never: nie in die lokale Zeit umrechnen

  • Always: immer in die lokale Zeit umrechnen

  • HasTime: nur in die lokale Zeit umrechnen, wenn der Zeitanteil nicht leer ist, d.h. nicht 00:00:00 (Standardwert)

    Hinweis

    HasTime basiert auf der Annahme, dass reine Datumsangaben ohne Zeitanteil in der Regel feste Werte sind, z. B. ein Belegdatum. Durch eine Umrechnung in eine andere Zeitzone könnten diese Datumsangaben ungewollt um einen Tag verschoben werden.

    Wenn hingegen ein Zeitanteil vorhanden ist, wird davon ausgegangen, dass dieser relevant ist und umgerechnet werden soll, z. B. bei einem Bearbeitungszeitpunkt.

Für die Definition des Pfades auf eine einzulesende JSON-Eigenschaft in der Eigenschaft .InputName wird eine Variante der JSONPath-Syntax genutzt. Diese Variante ist an die XPath-Syntax angelehnt ist, die im Kontext von XML-Dateien genutzt wird (siehe Indexdatenleser "Xml").

Folgend wird anhand einiger Beispiele auf die Grundlagen dieser JSONPath-Syntax eingegangen. Hierbei wird nur auf die JSONPath-Punkt-Notation eingegangen, bei der Eigenschaftsnamen durch Punkte voneinander getrennt werden.

Hinweis

Eine detaillierte Beschreibung der JSONPath-Syntax finden Sie beim Urheber dieser Syntax unter http://goessner.net/articles/JsonPath. Testsuiten sind online z. B. unter dem Suchbegriff "JSONPath Tester" verfügbar.

Um den Wert einer bestimmten Eigenschaft auszulesen, muss der Schlüsselname dieser Eigenschaft angegeben werden. Bei verschachtelten Objekten muss der Pfad von dem Wurzelobjekt bis hin zur gesuchten Eigenschaft angegeben werden. Das Wurzelobjekt trägt den Pseudonamen $ und das aktuelle Element hat (primär zur Verwendung in einem Filter) den Namen @. Array-Elemente können entweder über ihre Indexnummer adressiert oder über einen Filterausdruck ?(...) selektiert werden. Die Zählung der Indexnummern beginnt bei 0. Durch die Angabe * werden alle Array-Elemente ausgewählt, um z. B. multiple Werte für tabellarische Zielfelder auszulesen – wenn nicht über die obige Eigenschaft .ItemProperty[] bereits eine explizite Trennung in Unterobjekte pro Zeile erfolgt.

In den folgenden Beispielen soll das Kopfdatenfeld mit der "InvoiceNo" und das Positionsdatenfeld mit der "ItemNo" gelesen werden.

Hinweis

In der Praxis sollte für "ItemNo" bevorzugt $.Document.Items als .ItemProperty[]-Konfigurationseigenschaft definiert und das Quellfeld dann über ItemNo adressiert werden.

Hinweis

Die Verwendung des Wurzelobjekts $ ist optional. In den folgenden Beispielen ist das Wurzelobjekt der Vollständigkeit halber immer mit angegeben.

JSON-Fragment

JSONPath-Ausdruck

{
   "Document": {
      "Fields": {
         "InvoiceNo": "123456"
      }
   }
}

$.Document.Fields.InvoiceNo

{
   "Document": {
      "Fields": [{
            "Name": "InvoiceNo",
            "Value": "123456"
         }
      ]
   }
}

erstes Array-Element:

$.Document.Fields[0].Value

bestimmtes Array-Element über Namensfilter:

$.Document.Fields[?(@.Name=='InvoiceNo')].Value

{
   "Document": {
      "Items": [{
            "ItemNo": 1
         },{
            "ItemNo": 2
         }
      ]
   }
}

alle Array-Elemente:

$.Document.Items[*].ItemNo

Das JSON-Format unterstützt typisierte Werte. Das Programm übernimmt die typisierten Werte, sodass die Definition eines Datentyps unter ProcessReadIndex[].Field[].InputFormat zum Parsen der Eingabewerte in der Regel nicht erforderlich ist. Eine Ausnahme kann der Datumstyp sein, für den das JSON-Format String-Werte verwendet. Gängige Syntaxen, z. B. das ISO-Format, werden vom JSON-Parser dennoch implizit erkannt. Bei anderen Syntaxen muss für Datumswerte explizit die Eigenschaft .InputFormat konfiguriert werden.