
Sie können eine Textdatei mit komplexeren Strukturen in ein XML-Ausgangsformat konvertieren. Diese Datei kann unterschiedliche Zeilenformate in logischen Strukturen enthalten.
Behandlung von Strukturabweichungen
Die Konvertierungsroutine geht grundsätzlich von konstanten Strukturen aus. Die Anzahl der Felder entspricht der Angabe im Parameter NameA.fieldNames oder der Anzahl und Länge der Felder der Angabe im Parameter NameA.fieldFixedLengths.
Es findet keine Validierung der Strukturen statt. Es werden Ihnen jedoch einige unten beschrieben Parameter zur Verfügung gestellt, mit denen Sie das Verhalten der Konvertierungsroutine bei Strukturabweichungen beeinflussen können.
Wenn Sie zulassen möchten, dass die zur Laufzeit gefundene Struktur von der konfigurierten Struktur abweichen kann, konfigurieren Sie die Parameter NameA.missingLastFields und NameA.additionalLastFields. Verwenden Sie die Parameter nicht, wird abhängig davon, ob Sie den Parameter NameA.fieldFixedLengths konfiguriert haben, das Ergebnis der Konvertierung wie folgt aussehen:
Die Anzahl der Felder in der Eingangsstruktur ist durch den in NameA.fieldSeparator angegebenen Wert festgelegt:
In der XML-Struktur fehlen die Felder ebenfalls
NameA.fieldFixedLengths
Zusätzliche Felder in der Struktur werden ignoriert
Wenn nur das letzte Feld kürzer ist als definiert oder ganz fehlt, wird die Konvertierung durchgeführt. Der Inhalt des letzten Feldes wird wie vorgefunden in das XML-Element eingestellt. Der Wert kann also unvollständig oder leer sein.
Sie können dieses Verhalten ändern, indem Sie die Parameter NameA.missingLastFields und NameA.additionalLastFields. Wenn Sie diesen Parameter verwenden, können Sie eine definierte Überprüfung der Eingangstrukturen durchführen und es werden wohldefinierte Ausgangsstrukturen erzeugt.
Einen Teil der Funktion dieser Parameter können Sie auch durch den Parameter NameA.lastFieldsOptional implementieren.
NameA.lastFieldsOptional ist veraltet; verwenden Sie ihn nicht mehr.
Wenn Sie den Parameter dennoch gemeinsam mit den Parametern NameA.missingLastFields und NameA.additionalLastFields verwenden, wird eine Fehlermeldung zur Laufzeit ausgegeben.
Eine beliebige Anzahl dieser Recordsets (eine, mehrere oder alle, die in der Datei gefunden werden) können als unabhängige Message an den Integration Server/an das PCK verschickt werden.
Dokumentparameter definieren
Der Dokumentname wird als Haupt-XML-Tag in die Message eingefügt. Diese Angabe ist für das Mapping zwingend erforderlich.
So können Kommentarzeilen oder Spaltennamen bei der Bearbeitung übersprungen werden. Wenn Sie keine Angabe machen, ist der Vorgabewert null Zeilen.
Recordset-Parameter definieren
Er wird in das XML-Schema übernommen.
Er wird an den Namen der Struktur angehängt.
Die Reihenfolge der Strukturen des Recordsets wird als eindeutig angenommen. Sobald eine frühere Struktur auftritt, bedeutet dies den Beginn eines neuen Recordsets.
Die Reihenfolge der Strukturen des Recordsets wird als nicht festgelegt angenommen. Ein neues Recordset beginnt erst, wenn erstmals wieder eine Struktur auftritt, die mit fester Anzahl definiert ist. Sind alle Strukturen als variabel definiert, wird das gesamte Dokument als ein einziges Recordset interpretiert.
Diese Angabe ist optional. Vorgabewert ist *. Durch diese Vorgabe werden alle Recordsets in eine Message übernommen.
Ist die Anzahl der Recordsets in dem Dokument größer als die angegebene, erstellt der Adapter mehrere Messages aus einem Dokument. Die letzte Message enthält dann womöglich weniger Recordsets als angegeben.
Geben Sie unter Quality-of-Service Exactly Once an, um sicherzustellen, dass jede dieser Messages (also jeder Teil eines Dokuments, aus dem eine Message erstellt wird) genau einmal an den Integration Server/an das PCK geschickt wird. Dies ist auch der Fall, wenn die Anwendung während der Erstellung der Messages unterbrochen und später wieder neu gestartet wird.
Die Unterstrukturen werden über ihren Inhalt vom Parser identifiziert. Dies geschieht über das Schlüsselfeld mit verschiedenen Konstanten für die Unterstrukturen. In diesem Fall ist die Angabe eines Schlüsselfelds zwingend und der Feldname muss in allen Unterstrukturen erscheinen.
Diese Eingabe wird verwendet, wenn der Schlüsselfeldname definiert ist.
Parameter und Werte für Recordset-Strukturen definieren
In der XML-Struktur wird ein Element <Recordset> pro Recordset-Struktur eingeführt. Diese Ebene ist nicht immer notwendig, insbesondere wenn das Recordset nur eine Strukturdefinition enthält.
Wenn Sie den Parameter auf true setzen, dann wird das <Recordset>-Element nicht eingefügt.
Wenn Sie hier eine Angabe machen, wird eine Zeichenkette erwartet, die die Längen der Spalten der Struktur als durch Kommata getrennte Argumente enthält.
Geben Sie für die Spalten auch ein Trennzeichen an, darf die Länge des Trennzeichens nicht zur Spaltenlänge hinzuaddiert werden.
Diese Angabe ist zwingend, wenn sie unter NameA.fieldSeparator keine Angabe machen.
Der Parameter wird nur ausgewertet, wenn Sie eine Angabe zum Parameter NameA.fieldFixedLengths machen.
Dies ist der Vorgabewert.
Mit diesem Parameter steuern Sie nur das Verhalten der Konvertierungsroutine für das letzte Feld einer Struktur.
Legen Sie das Verhalten zur Laufzeit für den Fall, dass die Struktur insgesamt weniger Felder enthält als in NameA.fieldFixedLengths angegeben, über den Parameter NameA.missingLastFields fest.
Gibt an, in welcher Form die die Angaben unter NameA.fieldFixedLengths gezählt werden:
Es wird die Anzahl der Zeichen gezählt.
Es wird die Byte-Länge der Zeichen gezählt.
Mit diesem Parameter geben Sie an, ob bei einer Struktur mit fester Feldlänge die letzten Felder fehlen dürfen (YES) oder nicht (NO), wie in Parameter fieldFixedLengths definiert Machen Sie keine Angabe, ist der Wert NO vorbelegt.
Dieser Parameter bezieht sich nicht auf durch Kommata getrennte Strukturen, fehlende Felder werden ignoriert.
Geben Sie eine Zeichenkette an, die als Textbegrenzer wirkt. Text innerhalb solcher Textbegrenzer wird unverändert in die Zielstruktur übernommen, wobei im Standardfall die Textbegrenzer entfernt werden. In solchen Texten enthaltene Trennzeichen werden ignoriert.
Dieser Parameter ist optional. Voreingestellt ist der leere Wert (kein Textbegrenzer).
Bei unterschiedlichen Textbegrenzern für Beginn und Ende des Textes geben Sie hier den Textbegrenzer für das Textende an.
Machen Sie keine Angabe, wird die Angabe unter NameA.enclosureSign verwendet.
Geben Sie hier eine Zeichenkette an, die den Textbegrenzer ersetzt, wenn dieser innerhalb eines von ihm begrenzten Textes vorkommt.
Bei der Übernahme des Textes wird diese Zeichenkette durch den bei NameA.enclosureSign angegebenen Wert ersetzt.
Hier können Sie eine Zeichenkette angeben, die den Textbegrenzer für das Textende ersetzt, wenn dieser innerhalb eines von ihm begrenzten Textes vorkommt.
Bei der Übernahme des Textes wird diese Zeichenkette durch den bei NameA.enclosureSignEnd angegebenen Wert ersetzt.
Haben Sie xml.enclosureSign="und xml.enclosureSignEsc=""angegeben, wird in Anführungszeichen vorhandener Text im Dokument unverändert übernommen und die Anführungszeichen werden entfernt.
Kommt im Text selbst das Escape-Zeichen ("") für ein Anführungszeichen vor, wird es bei der Übernahme durch das Anführungszeichen ersetzt.
Wenn Sie eine zusätzliche Zeichenkette als Trennzeichen nach der letzten Spalte einer Reihe definieren möchten, geben Sie es hier an.
Es wird beim Verarbeiten der letzten Spalte übersprungen (andernfalls würde es als Teil der letzten Spalte behandelt).
Machen Sie hier eine Angabe, wenn Sie eine zusätzliche Zeichenkette als Trennzeichen vor der ersten Spalte einer Reihe definieren möchten.
Es wird beim Verarbeiten dieser Spalte übersprungen (anderenfalls würde es als Teil der ersten Spalte behandelt).
In allen Zeichenketten für Trennzeichen (NameA.fieldSeparator, NameA.beginSeparator, NameA.endSeparator) ist die Angabe von nicht druckbaren ASCII-Zeichen möglich. Diese Zeichen können in der Form ´0xHH´ (einschließlich der Hochkommata) jeweils einzeln in die Zeichenketten eingefügt werden, wobei HH das als Hexadezimalwert kodierte Zeichen darstellt.
Die mit NameA.beginSeparator und NameA.endSeparatorangegebenen Trennzeichen können auch als Felder in die Struktur des erzeugten XML-Dokuments eingefügt werden. Hierzu spezifizieren Sie Feldnamen mit den Angaben:
NameA.addBeginSeparatorAsField=<Feldname>
und/oder
NameA.addEndSeparatorAsField=<Feldname>
Die Zeichenketten werden dann mit dem angegebenen Feldnamen am Beginn bzw. am Ende der Struktur eingefügt, so wie sie unter NameA.beginSeparator und NameA.endSeparator angegeben wurden, also einschließlich der Definitionen von Sonderzeichen. Eine Konvertierung der Sonderzeichen wird nicht vorgenommen, da solche Zeichen in XML-Dokumenten nicht erlaubt sind.
Geben Sie die Namen der Spalten der Struktur an. Das Eingabeformat hängt von folgenden Angaben ab:
Geben Sie den Wert des Schlüsselfeldes für die Struktur an.
Die Angabe ist zwingend erforderlich, wenn der Schlüsselfeldname gesetzt ist. Ansonsten wird die Angabe ignoriert.
add
Hat die Eingangsstruktur weniger Felder als in der Konfiguration angegeben, wird die XML-Ausgangsstruktur wie folgt erstellt:
Die Ausgangsstruktur enthält nur die in der Eingangsstruktur vorhandenen Felder.
Die Ausgangsstruktur enthält alle Felder aus der Konfiguration; die in der Eingangsstruktur nicht vorhandenen Felder sind leer.
Die Konvertierung wird aufgrund der unvollständigen Eingangsstruktur abgebrochen. Eine Fehlermeldung wird angezeigt.
Hat die Eingangsstruktur mehr Felder als in der Konfiguration angegeben, wird die XML-Ausgangsstruktur wie folgt erstellt:
Die Ausgangsstruktur enthält nur die in der Eingangsstruktur vorhandenen Felder.
Die Konvertierung wird aufgrund der unvollständigen Eingangsstruktur abgebrochen. Eine Fehlermeldung wird angezeigt.
Der Vorschlagswert ist ignore. Haben Sie den Parameter NameA.fieldFixedLengths definiert, ist der Vorschlagswert error.
Haben Sie den Parameter NameA.fieldFixedLengths definiert und Sie setzen keinen der beiden oben beschriebenen Parameter, arbeitet die Umwandlungs-Routine wie oben unter Behandlung von Strukturabweichungenbeschrieben, abweichend von den Vorschlagswerten der beiden oben beschriebenen Parameter.
Erst wenn Sie einen der beiden Parameter setzen, wird auch der andere Parameter mit seinem Vorschlagswert ausgewertet.
SAP empfiehlt, dass Sie für ein wohldefiniertes Laufzeitverhalten bei variablen Eingangsstrukturen immer diese beiden Parameter setzen.
Das Dokument hat die folgende Struktur:
<documentName>...
<recordset>
<NameA>
<field-nameA1>field-value</field-nameA1>
<field-nameA2>field-value</field-nameA2>
<field-nameA3>field-value</field-nameA3>
</NameA>
<NameB>
<field-nameB1>column-value</field-nameB1>
<field-nameB2>column-value</field-nameB2>
<field-nameB3>column-value</field-nameB3>
</NameB>
</recordset>
...
<recordset>
...
</recordset>
</documentName>...