Show TOC

Textformat im File-/FTP-Sender-Adapter in XML umwandelnLocate this document in the navigation structure

Verwendung

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:

  • Parameter NameA.fieldFixedLengths ist nicht konfiguriert.

    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 konfiguriert.
    • Enthält die Eingangsstruktur mehr Felder als in NameA.fieldNames oder 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 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.

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.

Voraussetzungen
  • Sie haben im File-/FTP-Sender-Adapter unter Message-Protokoll Umwandlung des Datei-Inhalts gewählt.
  • 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 Unterstruktur wird als fest vorausgesetzt und entspricht der Beschreibung des Zeilenformats , die in der Tabelle unten festgelegt wird.
  • Eine Unterstruktur muss immer in genau einer Zeile des Textdokuments dargestellt sein.
Vorgehensweise

Dokumentparameter definieren

  1. Geben Sie den Namen des XML-Dokuments an.

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

  2. Der Dokumentnamensraum wird an den Namen des Dokuments angehängt. Diese Angabe ist für das Mapping zwingend erforderlich.
  3. 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, ist der Vorgabewert null Zeilen.

Recordset-Parameter definieren

  1. Geben Sie den Namen des Recordset an.

    Er wird in das XML-Schema übernommen.

  2. Geben Sie den Recordset-Namensraum an.

    Er wird an den Namen der Struktur angehängt.

  3. Geben Sie unter Recordset-Struktur die Reihenfolge und die jeweilige Anzahl der Unterstrukturen wie folgt an: <NameA,nA,NameB,nB,...>, wenn nA=1,2,3,... oder * (für eine variable, beliebige Anzahl einschließlich 0).
  4. Den Anfang und das Ende von Recordsets, die eine variable Anzahl und Anordnung von Strukturen enthalten, geben Sie folgendermaßen an:
    • Aufsteigend:

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

    • Variable:

      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.

  5. 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, erstellt der Adapter mehrere Messages aus einem Dokument. Die letzte Message enthält dann womöglich weniger Recordsets als angegeben.

    Hinweis

    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.

  6. Geben Sie einen Schlüsselfeldnamen an, wenn Sie unter Recordset-Struktur eine variable Anzahl von Unterstrukturen angegeben haben, also für mindestens eine Struktur den Wert *.

    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.

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

Parameter und Werte für Recordset-Strukturen definieren

  1. Setzen Sie Parameter für alle angegebenen Recordset-Strukturen NameA, NameB, ... in der Tabelle.
    • 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.

      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.

        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 fieldFixedLengthseine Angabe gemacht, wird die zusätzliche Länge des Trennzeichens berücksichtigt, es werden 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
      • Geben Sie YES an, wenn der Textbegrenzer bei der Übernahme entfernt oder die Escape-Zeichen ersetzt werden sollen. Dies ist der Vorgabewert.
      • Geben Sie NO ein, wenn die Zeichen unverändert übernommen werden sollen.

      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

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

    • NameA.beginSeparator

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

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

    • 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 angegeben haben, 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 und eine eventuell für NameA.endSeparator und/oder NameA.beginSeparatorzusätzlich angegebene Zeichenkette erwartet wird.
    • 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.
  2. 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.

      • error

        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.

      • error

        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.

    Hinweis

    SAP empfiehlt, dass Sie für ein wohldefiniertes Laufzeitverhalten bei variablen Eingangsstrukturen immer diese beiden Parameter setzen.

Ergebnis

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