XMLTemplateParserUnit
Gruppe |
|
Klassenname |
com.ebd.hub.datawizard.iu.XMLTemplateParserUnit |
Funktion |
Erzeugt eine XML-Datei aus einem Ausgangsbaum, unter Nutzung einer Template-Datei. |
Beschreibung
Wichtiger Hinweis: Bitte Verwenden Sie für Neuentwicklungen die XMLNoTemplateUnit.
Einleitung: Integration Units.
Die XMLTemplateParserUnit erzeugt eine XML-Datei aus einem Ausgangsbaum, unter Nutzung einer Template-Datei.
Beschreibung der Parameter
Parametername |
Erlaubte Werte |
Default-Wert |
Beschreibung |
Insert this DOCTYPE declaration |
|
|
Die DOCTYPE-Deklaration, die nach der Generierung des XML eingesetzt werden soll. Die DOCTYPE-Deklaration kann nicht Bestandteil des Templates sein, da der für die Generierung verwendete XML-Generator sonst mit einem Fehler abbricht. |
Replace orig. string by |
|
|
Des Name des Zeichensatzes, der in den XML-Header aufgenommen werden soll. Achtung: Der gleiche Zeichensatz muss beim entsprechenden Ausgangsweg in Phase 6 des Profils angegeben werden, damit die Datei auch tatsächlich damit ausgegeben wird. Ansonsten ist mit Fehlern auf Leseseite zu rechnen (Pflichtwert). |
Search for orig. string |
|
|
Text, nach dem gesucht und durch den in Replace orig. string by angegebenen Text ersetzt werden soll, nachdem das XML erzeugt wurde. |
Text mode (…) |
normalize, preserve, trim, trim-full-white |
trim |
Regelt die Art, wie Werte in das XML aufgenommen werden sollen.
|
Write xml in a single line |
true, false |
false |
true, wenn das resultierende XML nur in einer Zeile stehen soll. |
expand empty nodes |
true, false |
false |
true, wenn Tags bei leeren Werten in der Art <tag></tag>. false, wenn sie in der Art <tag/> ausgegeben werden sollen. |
file encoding |
|
UTF-8 |
|
template-file |
|
|
Der Name der zu verwendenden Template-Datei (Pflichtwert). Siehe folgenden Abschnitt. |
with empty fields |
true, false |
false |
true, wenn leere Felder im resultierenden XML verbleiben sollen. |
Erzeugen einer XML-Vorlage (Template)
Gegeben sei folgende Ausgangsstruktur.
Zu einem Auftrag (Order) gehört genau ein Auftragskopf (OrderHeader) und beliebig viele Auftragspositionen (OrderPosition). Zu jeder Auftragsposition gehört genau ein Datensatz des Typs Position, zu dem mehrere Texte (PosText) angegeben werden können. In einem Durchlauf können ein oder mehrere Aufträge erzeugt werden.
Eine Vorlage kann mit einem üblichen Text-Editor erzeugt werden. Sie muss sich lediglich an gewisse Vorgaben halten, um von der Unit korrekt mit Daten gefüllt zu werden. Im Normalfall kann man aus der Zielstruktur die XML-Vorlage automatisch erzeugen. In komplizierteren Fällen ist danach eine manuelle Bearbeitung der Vorlage notwendig.
Zum automatischen Erzeugen einfach im Zielstruktur-Menü den Eintrag XML-Vorlage für IU erzeugen drücken.
Hinweis: Nach jeder Änderung der Zielstruktur muss das XML-Template entweder neu generiert werden, oder man manuell korrigiert werden. Für unsere Beispiel-Ausgangsstruktur würde die automatisch erzeugte Vorlage folgendermaßen aussehen.
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
DataWizardDummyRoot
>
<!--This root element is used to ensure a valid XML file.
Valid means in this context: The file has one single root element.
Remove the dummy root element after you made sure that the generated data XML file will also have only one single root element.
That means, the top element of the XML tree will not be repeated while filling the template with data.-->
<
DataWizardSection
node
=
"Order"
>
<
Order
>
<
DataWizardSection
node
=
"OrderHeader"
>
<
OrderHeader
>
<
OrderNo
>@OrderNo@</
OrderNo
>
<
CustomerNo
>@CustomerNo@</
CustomerNo
>
</
OrderHeader
>
</
DataWizardSection
>
<
DataWizardSection
node
=
"OrderPosition"
>
<
OrderPosition
>
<
DataWizardSection
node
=
"Position"
>
<
Position
>
<
PosNo
>@PosNo@</
PosNo
>
<
ArticleNo
>@ArticleNo@</
ArticleNo
>
<
Quantity
>@Quantity@</
Quantity
>
<
DataWizardSection
node
=
"PosText"
>
<
PosText
>
<
PosTextNo
>@PosTextNo@</
PosTextNo
>
<
Text
>@Text@</
Text
>
</
PosText
>
</
DataWizardSection
>
</
Position
>
</
DataWizardSection
>
</
OrderPosition
>
</
DataWizardSection
>
</
Order
>
</
DataWizardSection
>
</
DataWizardDummyRoot
>
Erläuterung der Vorlage
Wurzelelement
Jedes XML-Dokument muss eine Wurzel haben, also ein Tag, das den kompletten Inhalt einschließt. In unserem Beispiel ist das das automatisch erzeugte Tag <DataWizardDummyRoot>, welches man zum Beispiel manuell ändern könnte zu <OrderList>.
Hinweis: Die XML-Deklaration in der erstellten XML-Datei wird nicht aus dem XML-Template entnommen.
DataWizardSection-Tags
Jedem Knoten der Datenstruktur muss ein solcher Abschnitt zugeordnet werden, und zwar entsprechend der Baumstruktur in Lobster_data. Für jedes Vorkommen dieses Knotens wird einmal alles ausgegeben, was sich innerhalb befindet. Für jeden Auftrag in unseren Daten wird der Knoten Order einmal durchlaufen, entsprechend wird alles, was zwischen den Tags <DataWizardSection node="Order"> und </DataWizardSection> steht, pro Auftrag einmal ausgegeben. Das Attribut node gibt hierbei an, zu welchem Knoten diese DataWizardSection gehört. Innerhalb dieses Blocks können wir nun entweder den Knoten OrderHeader, oder den Knoten OrderPosition betreten. Also finden sich hier nun die beiden Abschnitte (DataWizardSection), die diesen Knoten zugeordnet sind. Und innerhalb des OrderPosition-Abschnittes finden sich dann die Abschnitte für Position und PosText. So wird mittels der DataWizardSection-Tags die Struktur des Zielbaumes nachgebildet.
Daten-Felder
Den Inhalt von Datenfeldern kann man entweder als Inhalt von XML-Elementen einfügen, oder als Wert von Attributen. Ein Beispiel findet sich z. B. in der Zeile <PosNo>@PosNo@</PosNo>. Das Zeichen @ klammert den Namen des Feldes ein.
Verwendung von Variablen
Ausserhalb von DataWizardSections, also speziell im Wurzelelement kann man für Attributwerte, oder Feldwerte auch Variablen in der Notation @VAR_NAME@ verwenden, die im Profil definiert sind. Die Variablennamen müssen mit VAR_ in beliebiger Groß-/Kleinschreibweise beginnen. Es wird immer der letzte Wert der Variablen am Ende der Phase 3 verwendet. Wenn in den Profil-Eigenschaften die Schalter Pro Datenblatt Antwort beschreiten und IU mit einbeziehen gesetzt sind, wird jeweils der letzte Wert der Variablen im Datenblatt verwendet.
Ergebnis des Beispiels
Mit ein paar einfachen Testdaten wurde mit der oben angegebenen Datenstruktur und der obigen (leicht angepassten) Vorlage folgende Datei generiert.
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
OrderList
>
<
Order
>
<
OrderHeader
>
<
OrderNo
>0815</
OrderNo
>
<
CustomerNo
>11223344</
CustomerNo
>
</
OrderHeader
>
<
OrderPosition
>
<
Position
>
<
PosNo
>1</
PosNo
>
<
ArticleNo
>4711</
ArticleNo
>
<
Quantity
>10</
Quantity
>
</
Position
>
</
OrderPosition
>
<
OrderPosition
>
<
Position
>
<
PosNo
>2</
PosNo
>
<
ArticleNo
>4712</
ArticleNo
>
<
Quantity
>7</
Quantity
>
</
Position
>
</
OrderPosition
>
<
OrderPosition
>
<
Position
>
<
PosNo
>3</
PosNo
>
<
ArticleNo
>4713</
ArticleNo
>
<
Quantity
>15</
Quantity
>
</
Position
>
<
PosText
>
<
PosNoText
>1</
PosNoText
>
<
Text
>just any text</
Text
>
</
PosText
>
<
PosText
>
<
PosNoText
>2</
PosNoText
>
<
Text
>and another text</
Text
>
</
PosText
>
</
OrderPosition
>
</
Order
>
</
OrderList
>