Anfang des Inhaltsbereichs

Hintergrunddokumentation Konvertierung des Dateiinhalts im Sender-Adapter  Dokument im Navigationsbaum lokalisieren

Haben Sie das Message-Protokoll Konvertierung des Dateiinhalts ausgewählt, dann können Sie in diesem Modus eine Textdatei mit komplexeren Strukturen in ein XML-Ausgangsformat konvertieren. Die Datei enthält unterschiedliche Zeilenformate in logischen Strukturen.

Aufbau der Datei

Es wird eine Datei mit einer oder mehreren logischen Strukturen (Recordsets) erwartet. 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.

Ein Recordset kann mehrere Typen von Unterstrukturen enthalten, die durch logische Namen identifiziert werden. Die Anzahl solcher Unterstrukturen in einem Recordset kann fest oder variabel sein.

Das Format einer solchen Unterstruktur wird als fest vorausgesetzt und entspricht der Beschreibung des Zeilenformats in der unten angeführten Tabelle. Eine Validierung der Struktur findet nicht statt. Eine Unterstruktur muss immer in genau einer Zeile des Textdokuments dargestellt sein.

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>...

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:

      Parameter NameA.fieldFixedLengths ist nicht definiert

Die Anzahl der Felder in der Eingangsstruktur ist durch den in NameA.fieldSeparator angegebenen Wert festgelegt:

       Enthält die Eingangsstruktur mehr Felder als in NameA.fieldNamesangegeben, wird die Konvertierung mit einer Fehlermeldung abgebrochen.

       Enthält die Eingangsstruktur weniger Felder als in NameA.fieldNamesangegeben, wird die Konvertierung durchgeführt.

In der XML-Struktur fehlen die Felder ebenfalls.

      Parameter NameA.fieldFixedLengths ist definiert

       Enthält die Eingangsstruktur mehr Felder als in NameA.fieldNamesoder in NameA.fieldFixedLengths angegeben, wird die Konvertierung durchgeführt.

Zusätzliche Felder in der Struktur werden ignoriert

       Enthält die Eingangsstruktur weniger Felder als in NameA.fieldNamesangegeben, wird die Konvertierung mit einer Fehlermeldung abgebrochen.

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 Paramater 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.

Hinweis

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.

Angaben zum Dokument

Machen Sie zum Dokument folgende Angaben:

      Geben Sie unter Dokumentname den Namen des XML-Dokuments an.

Dieser Dokumentname wird in der Message als Haupt-XML-Tag eingefügt. Diese Angabe ist für das Mapping zwingend erforderlich.

      Geben Sie unter Dokumentnamensraum des Namensraum des Dokuments an.

Der Namensraum wird an den Namen des Dokuments angehängt. Diese Angabe ist für das Mapping zwingend erforderlich.

      Geben Sie unter Dokument-Offset die Anzahl der Zeilen an, die am Anfang des Dokuments ignoriert werden sollen.

So können Kommentarzeilen oder Spaltennamen bei der Bearbeitung übersprungen werden. Wenn Sie keine Angabe machen, dann ist der Vorgabewert null Zeilen.

      Geben Sie unter Recordset-Name den Namen der Struktur an.

Er wird in das XML-Schema übernommen.

      Geben Sie unter Recordset-Namensraum des Namensraum der Struktur an.

Er wird an den Namen der Struktur angehängt.

      Geben Sie unter Recordset-Struktur die Reihenfolge und die jeweilige Anzahl der Unterstrukturen wie folgt an: <NameA,nA,NameB,nB,...>.

Hierbei ist nA=1,2,3,... oder * (für eine variable, beliebige Anzahl einschließlich 0).

      Wählen Sie unter Recordset-Reihenfolge, wie der Anfang und das Ende von Recordsets, die eine variable Anzahl und Anordnung von Strukturen enthalten, bestimmt wird:

       Aufsteigend

Die Reihenfolge der Strukturen des Recordsets wird als eindeutig angenommen. Sobald eine frühere Struktur auftritt, bedeutet dies den Beginn eines neuen Recordsets.

       variabel

Die Reihenfolge der Strukturen des Recordsets wird als nicht festgelegt angenommen. Ein neues Recordset beginnt erst dann, wenn erstmals wieder eine Struktur auftritt, die mit fester Anzahl definiert ist. Sind alle Strukturen als variabel definiert, dann wird das gesamte Dokument als ein einziges Recordset interpretiert.

      Geben Sie die Anzahl der Recordsets pro Message an, die zu einer Message gruppiert werden sollen. 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, so erstellt der Adapter mehrere Messages aus einem Dokument. Die letzte Message enthält dann womöglich weniger Recordsets als angegeben.

Hinweis

Wird unter Quality-of-Service (siehe unten) Exactly Onceangegeben, dann ist sichergestellt, 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.

      Schlüsselfeldname

Haben Sie unter Recordset-Struktur eine variable Anzahl von Unterstrukturen angegeben, also für mindestens eine Struktur den Wert *, müssen die Unterstrukturen über ihren Inhalt durch den Parser identifiziert werden. Es muss ein Schlüsselfeld mit verschiedenen Konstanten für die Unterstrukturen gesetzt werden. In diesem Fall ist die Angabe eines Schlüsselfelds zwingend und der Feldname muss in allen Unterstrukturen erscheinen.

      Geben Sie den Typ des Schlüsselfeldes an, auf dessen Basis der Vergleich mit den vorgegebenen Werten stattfindet. Diese Eingabe wird verwendet, wenn der Schlüsselfeldname definiert ist.

Setzen Sie Parameter für alle angegebenen Recordset-Strukturen NameA, NameB etc. in der folgenden Tabelle:

Angaben für Recordset-Strukturen

      ignoreRecordsetName

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.

      NameA.fieldFixedLengths

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.

Hinweis

Diese Angabe ist zwingend, wenn sie unter NameA.fieldSeparator keine Angabe machen.

      NameA.keepIncompleteFields

Der Parameter wird nur ausgewertet, wenn Sie eine Angabe zum Parameter NameA.fieldFixedLengths machen.

       Wenn Sie NO angeben und das letzte in der Struktur gefundene Feld der Struktur kürzer als in NameA.fieldFixedLengths angegeben ist, bricht die Verarbeitung der Struktur mit einer entsprechenden Fehlermeldung ab.

Dies ist der Vorgabewert.

       Wenn Sie YES angeben, wird das letzte gefundene Feld der Eingangsstruktur in die Ausgangsstruktur übernommen, auch wenn es kürzer ist als in NameA.fieldFixedLengths angegeben.

Achtung

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.

      NameA.fieldFixedLengthType

Gibt an, in welcher Form die die Angaben unter NameA.fieldFixedLengths gezählt werden:

       char (Vorgabewert)

Es wird die Anzahl der Zeichen gezählt.

       byte

Es wird die Byte-Länge der Zeichen gezählt.

      NameA.fieldSeparator

Wenn Sie hier eine Angabe machen, wird erwartet, dass die Struktur die angegebene Zeichenkette (ein oder mehrere Zeichen) als Trennzeichen zwischen den einzelnen Spalten enthält.

Haben Sie unter bei fieldFixedLengthskeine Angabe gemacht, ist dies die einzige Angabe zur Identifikation der einzelnen Spalten einer Reihe.

Haben Sie bei fieldFixedLengths eine Angabe gemacht, wird die zusätzliche Länge des Trennzeichens berücksichtigt, aber keine zusätzlichen Konsistenzprüfungen durchgeführt.

      NameA.lastFieldsOptional (veraltet)

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.

      NameA.enclosureSign

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).

      NameA.enclosureSignEnd

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.

      NameA.enclosureSignEscape

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.

      NameA.enclosureSignEndEscape

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.

      NameA.enclosureConversion

Soll der Textbegrenzer bei der Übernahme entfernt oder durch die Escape-Zeichen ersetzt werden, geben Sie YES ein. Dies ist der Vorgabewert.

Sollen die Zeichen unverändert übernommen werden, geben Sie NO ein.

Hinweis

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.

      NameA.endSeparator

Möchten Sie eine zusätzliche Zeichenkette als Trennzeichen nach der letzten Spalte einer Reihe definieren, geben Sie sie hier an. Die Zeichenkette wird beim Verarbeiten der letzten Spalte übersprungen (andernfalls würde sie als Teil der letzten Spalte behandelt).

      NameA.beginSeparator

Wenn Sie eine zusätzliche Zeichenkette als Trennzeichen vor der ersten Spalte einer Reihe definieren möchten, machen Sie hier eine Angabe. Es wird beim Verarbeiten dieser Spalte übersprungen (anderenfalls würde es als Teil der ersten Spalte behandelt).

       Sonderzeichen in den Zeichenketten für Trennzeichen

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.

       Zeichenketten für Trennzeichen in das XML-Dokument einfügen:

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=<fieldname>

und/oder

NameA.addEndSeparatorAsField=<fieldname>

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.

      NameA.fieldNames

Geben Sie die Namen der Spalten der Struktur an. Das Eingabeformat hängt von folgenden Angaben ab:

       Haben Sie für NameA.fieldFixedLengths einen Wert angegeben, wird eine Zeichenkette erwartet, die die Namen der Dateispalten als Argumente enthält, die durch Kommata getrennt sind.

Dies gilt auch, wenn Sie zusätzlich einen Wert für NameA.comlumnSeparator angegeben haben.

       Wenn Sie nur einen Wert für NameA.fieldSeparator angeben, erwartet das System eine Zeichenkette, in der die Namen der Dateispalten im gleichen Format wie die Dateireihen enthalten sind.. Dies bedeutet, dass das gleiche Trennzeichen sowie alle zusätzlich angegebenen Zeichenketten für NameA.endSeparatorund/oder NameA.beginSeparator erwartet werden.

      NameA.keyFieldValue

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.

      NameA.fieldContentFormatting

       Um alle führenden und nachfolgenden Leerzeichen eines gefundenen Wertes zu entfernen, geben Sie trim an. Dies ist der Vorgabewert.

       Damit der Wert unverändert bleibt, geben Sie nothing an.

      NameA.keyFieldInStructure

       Falls das Schlüsselfeld der Unterstruktur dem XML-Dokument hinzugefügt werden soll, geben Sie add an.

       Wenn das Schlüsselfeld ignoriert werden soll, geben Sie ignore ein.

Verwenden Sie folgende Parameter, wenn Sie das Verhalten der Konvertierungsroutine für Eingangsstrukturen, die von der Konfiguration abweichen, beeinflussen möchten:

      NameA.missingLastfields

Hat die Eingangsstruktur weniger Felder als in der Konfiguration angegeben, wird die XML-Ausgangsstruktur wie folgt erstellt:

       ignore

Die Ausgangsstruktur enthält nur die in der Eingangsstruktur vorhandenen Felder.

       add

Die Ausgangsstruktur enthält alle Felder aus der Konfiguration; die in der Eingangsstruktur nicht vorhandenen Felder sind leer.

       Fehler

Die Konvertierung wird aufgrund der unvollständigen Eingangsstruktur abgebrochen. Eine Fehlermeldung wird angezeigt.

      NameA.additionalLastFields

Hat die Eingangsstruktur mehr Felder als in der Konfiguration angegeben, wird die XML-Ausgangsstruktur wie folgt erstellt:

       ignore

Die Ausgangsstruktur enthält nur die in der Eingangsstruktur vorhandenen Felder.

       Fehler

Die Konvertierung wird aufgrund der unvollständigen Eingangsstruktur abgebrochen. Eine Fehlermeldung wird angezeigt.

Der Vorschlagswert ist ignore. Haben Sie den Parameter NameA.NameA.fieldFixedLengths definiert, ist der Vorschlagswert error.

Hinweis

Wenn Sie den Parameter NameA.fieldFixedLengths definiert haben und keinen der beiden oben beschriebenen Parameter setzen, arbeitet die Konvertierungsroutine wie oben unter Behandlung von Strukturabweichungen beschrieben, 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.

 

 

 

 

 

Ende des Inhaltsbereichs