
Sie konfigurieren den File/FTP-Sender-Adapter, um damit Inhalte von Dateien an die Integration Engine zu verschicken.
Die Konfiguration besteht im Wesentlichen aus der Angabe
Sie haben
Für den File/FTP-Sender-Adapter besteht die Konfiguration aus fünf funktionalen Teilbereichen:
Geben Sie den Namen der Klasse folgendermaßen an:
com.sap.aii.messaging.adapter.ModuleFile2XMB
Diese Angabe ist zwingend.
30
Diese Angabe ist zwingend. Fehlt die Angabe, wird die Konfiguration als XI 2.0 Adapter-Konfiguration interpretiert. Andere Werte sind nicht zulässig und werden als Fehler ausgegeben.
Geben Sie den Modus des File/FTP-Sender-Adapters an. Erlaubte Werte sind
FILE2XMB
Hier wird der Inhalt der Datei direkt zur Integration Engine geschickt.
FILE2XMBWITHROWCONVERSION
Hier wird eine Textdatei mit identisch aufgebauten Zeilen erwartet, die in ein XML-Dokument konvertiert werden kann. Die für die Konvertierung notwendigen Angaben machen Sie in Schritt 7.
FILE2XMBWITHSTRUCTURECONVERSION
Hier wird eine Textdatei mit komplexeren Dateistrukturen erwartet, die in ein XML-Dokument konvertiert werden kann. Eine solche Datei enthält unterschiedliche Zeilenformate in logischen Strukturen. Die für die Konvertierung notwendigen Angaben machen Sie in Schritt 8.
FILE2XMBSTREAM
Hier wird ein spezielles Dateiformat erwartet, das eine vollständig serialisierte Nachricht der Integration Engine darstellt. Dieses Dateiformat kann vom File/FTP-Empfänger-Adapter im Modus XMBSTREAM2 FILE erzeugt werden. Dieses Format eignet sich damit zum Zwischenspeichern kompletter Nachrichten der Integration Engine einschließlich aller für die Integration Engine spezifischen Parameter, wie sie unter Punkt 5 beschrieben werden. In diesem Modus werden daher nur noch die Parameter für die Anmeldung an der Integration Engine (nämlich XI.TargetURL , gegebenenfalls XI.User , XI.Password , XI.Client und XI.Language ) aus der Konfiguration ausgewertet.
FILE2XMB
Der File/FTP-Sender-Adapter bietet einen Dispatcher an, mit dem Sie Messages vor dem Verschicken konvertieren können. Die für den Dispatcher notwendigen Einstellungen werden anhand eines konkreten Beispiels erklärt.
Geben Sie die vollständige Adresse (URL) der Integration Engine ein, an die die Message geschickt werden soll:
http://IntegrationEngineHost:port/pipeline-arguments
Diese Angabe ist zwingend.
Für die Authentifizierung mit Zertifikat geben Sie eine Ziel-URL an, die das HTTPS-Protokoll unterstützt.
Die Adresse der Integration Engine kann auch dynamisch aus dem System Landscape Directory (SLD) ermittelt werden. Hierzu wird in der Konfiguration folgender Eintrag hinzugefügt:
SLDaccessor
In diesem Fall wird für das mit XI.SenderService angegebene System die URL des zugehörigen Integration Server im SLD ausgelesen und anstelle des unter XI.TargetURL angegebenen Wertes verwendet. Daher sollte hier folgendes angegeben werden:
<fromSLD>
Damit der Zugriff funktioniert, muss der Dienst SLDaccessor für den Zugriff ins SLD konfiguriert sein, und die entsprechenden Einträge müssen im SLD gepflegt sein.
Ist der Integration Server nicht direkt, sondern über einen HTTP-Proxy-Server zu erreichen, müssen folgende Parameter gesetzt werden:
XI.proxyHost=< proxyHostname >
XI.proxyPort=< proxyPortnumber >
8080
Wurde für die angegebene URL (HTTP-Service) in der Integration Engine eine Authentifizierung spezifiziert, sind die folgenden Angaben zwingend:
Die Angaben müssen mit denen übereinstimmen, die Sie in der Transaktion SICF in der Integration Engine gemacht haben. Falls Sie keine oder eine ungültige Kombination von Benutzer und Kennwort angeben, wird jeder Übertragungsversuch in die Integration Engine mit Transport Exception: http-Error 401 - Unauthorized scheitern.
Der Benutzer muss im Integration Server über die Berechtigungen der Gruppe SAP_XI_APPL_SERV_USER verfügen.
Wurde für die angegebene URL (HTTPS-Service) in der Integration Engine eine Authentifizierung mit Zertifikat spezifiziert, sind die folgenden Angaben zwingend:
Geben Sie den Pfad relativ zum Installationsverzeichnis der Adapter-Engine an.
Das Schlüsselpaar muss als P12- oder PFX-Datei vorliegen.
Soll bei der Anmeldung ein anderer Mandant bzw. eine andere Sprache als die Default-Werte der Integration Engine verwendet werden, können Sie zusätzlich die folgenden Parameter setzen:
Die folgenden Argumente können - außer im Modus FILE 2XMBSTREAM - gesetzt werden und dienen der Identifikation der Adapter-Konfiguration beim Routing und Mapping in der Pipeline der Integration Engine. Dort ist auch die Bedeutung der einzelnen Argumente beschrieben.
name>
namespaceURI>
name>
>
Zwingend sind zumindest XI.SenderService sowie XI.Interface und XI.InterfaceNamespace . Der Empfänger wird in der Regel durch das Routing in der Integration Engine bestimmt. Diese Angabe ist nicht zwingend.
QualityOfService>
Gibt an wie eine Message durch die Integration Engine verarbeitet werden soll. Erlaubte Werte sind:
BE
EO
EOIO
EOIO
QueueName>
Dieser Queue-Name wird in der Integration Engine verwendet, um Nachrichten in der Reihenfolge ihres Eingangs zu bearbeiten.
Die folgenden Angaben sind zwingend:
file.type=
file.encoding
directory_name>
Geben Sie das Verzeichnis an, in dem sich die zu verarbeitenden Dateien befinden.
/
filename>
Geben Sie den Namen der Datei an, die verarbeitet werden soll.
*
filename
myFile.txt
my*.txt
*.txt
*File.*
*File*.*
my*le.*
Namen, die aus mehr als zwei Teilen bestehen, sind ebenfalls möglich.
Geben Sie die Anzahl an Sekunden an, die der Adapter warten soll, wenn keine Dateien zur Verarbeitung gefunden werden.
Optional können Sie zusätzlich den folgenden Parameter angeben, um eine zusätzliche Wartezeit in Millisekunden anzugeben:
file.pollIntervalMsecs=
Ist file.pollInterval auf 0 gesetzt, lassen sich so sehr kurze, echtzeitnahe Verarbeitungszeiten erreichen.
Der Vorschlagswert für diesen Parameter ist 0.
Wenn kein wiederholter Aufruf stattfinden soll, müssen Sie beide Parameter auf 0 setzen (bzw. nur den Parameter file.pollInterval , wenn Sie für den Parameter file.pollIntervalMsecs keinen Wert angeben).
In diesem Fall verbleibt der Adapter zwar im Status GESTARTET muss aber über Anhalten/Starten bzw. Neu starten erneut gestartet werden, um einen erneuten Aufruf zu initiieren.
Geben Sie die Anzahl an Sekunden an, die der Adapter warten soll, bis eine fehlerhaft verarbeitete Datei erneut verarbeitet wird.
Als Voreinstellung wird der Wert von file.pollInterval übernommen. Ist dieser Wert 0 (findet also keine Wiederholung der Dateiverarbeitung statt), wird auch keine erneute Verarbeitung von fehlerhaft verarbeiteten Dateien vorgenommen.
Ist file.retryInterval gleich 0, wird im Fehlerfall der Adapter beendet, auch wenn für file.pollInterval ein Wert größer 0 angegeben wurde. In diesem Fall verbleibt der Adapter zwar im Status GESTARTET, muss aber über Anhalten/Starten bzw. Neu starten erneut gestartet werden, um eine erneute Verarbeitung zu initiieren.
Hiermit kann eine Wartezeit definiert werden (Vorschlagswert: 0), die der File/FTP-Adapter nach dem Einlesen der Datei abwartet, ob sich die Dateilänge noch nachträglich verändert. In diesem Fall wird der Einlesevorgang wiederholt. Dies ist sinnvoll, wenn die vom Adapter einzulesenden Dateien dynamisch erzeugt werden, ohne dass sie auf Betriebssystemebene gesperrt sind (beispielsweise Dateien, die von FTP-Servern empfangen werden). Ohne diese Behelfslösung kann der File/FTP-Adapter bei solchen Anwendungen mit Betriebssystemmitteln nicht erkennen, ob die Datei bereits vollständig erzeugt wurde.
Im Protokoll des Adapters wird der Eintritt in die Warteschleife standardmäßig ausgegeben bei Warteschleifen, die länger als 5 Sekunden dauern. Dies kann zu entsprechend vielen Ausgaben im Protokoll führen. In solchen Fällen kann die Ausgabe im Protokoll (nicht die Warteschleife selbst) mit file.logPollInterval=NO abgeschaltet werden.
Bei Warteschleifen, die 5 Sekunden oder weniger dauern, kann die Ausgabe mit file.logPollInterval=YES aktiviert werden.
processingMode>
Geben Sie an, wie die Dateien verarbeitet werden sollen, nachdem ihr Inhalt erfolgreich zur Integration Engine gesendet wurde.
processingModedeletearchivearchiveWithTimestampsetAttributetest
delete
archivearchiveWithTimestamp
archive
archiveWithTimestamp
Für beide Verarbeitungsarten muss das Archivverzeichnis über folgenden Parameter angegeben werden:
<archiveDir>
Dieser Parameter ist für diese Verarbeitungsarten zwingend.
setAttribute
test
file.pollInterval
Die folgenden Angaben sind nicht zwingend:
YES|NO
NOYES
processingOrder>=byDate|byName
Geben Sie hier an, in welcher Reihenfolge Dateien verarbeitet werden sollen, wenn Sie bei der Angabe von file.sourceFileName Platzhalter verwendet haben und mehrere zu verarbeitende Dateien gefunden wurden.
byNamebyDate
Um den Namen der bearbeiteten Datei und/oder den Namen des Verzeichnisses, aus dem die Datei stammt im Message-Header der XI Message abzulegen, setzen Sie den Parameter.
Sie können auch nur den Dateinamen oder den Verzeichnisnamen im Message-Header ablegen.
Legen Sie fest, wie leere Dateien (Länge 0 Byte), die im Quellverzeichnis gefunden werden, behandelt werden sollen.
Der Vorschlagswert ist false . Findet der Adapter eine leere Datei im Quellverzeichnis, wird diese verarbeitet.
Setzen Sie den Wert auf true und XI.QualityOfService= EOIO, wird eine Fehlermeldung erzeugt und die Verarbeitung der Queue wird gestoppt.
Setzen Die den Wert auf true und XI.QualityOfService= EO, wird die Verarbeitung der leeren Datei gestoppt, und eine Fehlermeldung wird erzeugt. Die leere Datei wird aus dem Quellverzeichnis gelöscht und in einem Verzeichnis abgelegt, das Sie mit Parameter file.badMsgDir festlegen.
Geben Sie den Pfad zum Verzeichnis an, in das leere Dateien gespeichert werden sollen. Dem Dateinamen jeder leeren Datei, die in dem Verzeichnis abgelegt wird, wird ein Zeitstempel hinzugefügt. Für jede hier abgelegte leere Datei wird eine Script-Datei erzeugt.
Um eine korrigierte Datei wieder mit ihrem ursprünglichen Namen in das Quellverzeichnis zur weiteren Verarbeitung zu kopieren, klicken Sie auf die Script-Datei. Die Script-Datei wird anschließend automatisch gelöscht.
Ein hier spezifiziertes Betriebssystemkommando wird nach erfolgreicher Verarbeitung einer Datei ausgeführt. Der Vorschlagswert ist eine leere Zeichenkette (kein Kommando).
Der aktuell prozessierte Dateiname kann mit dem Platzhalter %f (Dateiname) bzw. %F (absoluter Dateiname inklusive Pfad) im Betriebssystemkommando mitgegeben werden.
Ein hier spezifiziertes Betriebssystemkommando wird nach erfolgreicher Verarbeitung aller Dateien ausgeführt, die in einem Durchlauf gefunden wurden. Der Vorschlagswert ist eine leere Zeichenkette (kein Kommando).
Dieser Parameter wird für das Einlesen von Textdateien verwendet. Standardmäßig wird hier die System-Codepage verwendet, die von der Konfiguration des installierten Betriebssystems abhängt. Diese finden Sie beispielsweise unter file.encoding bei den allgemeinen Systeminformationen des Menüeintrags Über Adapter Engine.
Bei XML-Textdokumenten, die in UTF-8 codiert sind, müssen Sie hier den Wert UTF-8 angeben. Textdateien, die weder in der System-Codepage noch in UTF-8 codiert sind, können nur gelesen werden, wenn die entsprechende Codepage in der Java-Laufzeitumgebung verfügbar ist. Der Dateiinhalt wird dann vor dem Versenden in die Codepage UTF-8 umgewandelt.
Erlaubte Werte für die Codepage sind die vorhandenen Charsets der Java-Laufzeit. Nach der Spezifikation von SUN für die Java-Laufzeit müssen mindestens die folgenden Standard-Charsets unterstützt sein:
Charsets der Java-Laufzeit
| Charset | Beschreibung |
|---|---|
|
US-ASCII |
Sieben-Bit ASCII, auch bekannt als ISO646-US, oder Basic-Latin-Block des Unicode-Zeichensatzes |
|
ISO-8859-1 |
ISO-Zeichensatz für westeuropäische Schriften (Latin Alphabet Nr. 1), auch bekannt als ISO-LATIN-1 |
|
UTF-8 |
Acht-Bit Unicode-Zeichendarstellung |
|
UTF-16BE |
16-Bit Unicode-Zeichendarstellung, big-endian Byte-Order |
|
UTF-16LE |
16-Bit Unicode-Zeichendarstellung, little-endian Byte-Order |
|
UTF-16 |
16-Bit Unicode-Zeichendarstellung Byte-Order |
Überprüfen Sie in der Dokumentation für Ihre Java-Laufzeit-Implemetierung, welche weiteren Charsets unterstützt werden.
XML-Textdokumente enthalten in der Regel ihre eigene Codepage-Beschreibung und sollten als Datei-Typ Binär behandelt werden.
Soll die Dateiauswahl nicht aus dem Dateisystem, sondern von einem FTP-Server erfolgen, sind zusätzlich folgende Angaben erforderlich:
Der Host-Name oder die IP-Adresse des FTP-Servers. Ist diese Angabe vorhanden, wird von einem FTP-Server-Zugriff ausgegangen. Die Angaben file.sourceDir und file.sourceFileName beziehen sich dann auf den FTP-Server. Folgende Angaben sind dann nicht möglich:
Die Port-Nummer des FTP-Servers. Die Angabe ist nicht zwingend; die Voreinstellung ist der Standard-Port für FTP-Server (21).
user name>
password>
anonymousanonymous
Mit dieser Angabe können Sie festlegen, ob für jeden Dateitransfer zum FTP-Server eine neue Verbindung geöffnet werden soll (Wert perFileTransfer ) oder ob eine bestehende Verbindung permanent genutzt werden soll (Wert permanently ). In diesem Fall wird die Verbindung automatisch wiederaufgebaut, falls sie server-seitig geschlossen wurde (zum Beispiel wegen Time-out). Vorschlagswert ist permanently .
>
Mit dieser optionalen Angabe können Sie den Übertragungsmodus der FTP-Verbindung auf Text oder Datentransfer setzen. Vorschlagswert ist der Payload-Typ des empfangenen Dokuments vom Integration Server.
FILE2XMBWITHROWCONVERSION
FILE2XMBWITHROWCONVERSION
Die Zeilen der Textdatei müssen entweder Trennzeichen enthalten oder über Spalten fester Länge verfügen oder beides. Namen für die Spalten können Sie entweder explizit in diesem Abschnitt angeben, oder sie können als Header-Zeile aus der Datei selbst gelesen werden.
Ansonsten können keine weiteren Metadaten (wie Spaltentypen oder Konvertierungsregeln für Spalten) angegeben werden. Solche Informationen müssen beim Mapping in der Pipeline der Integration Engine zur Verfügung gestellt werden. Mit der Konvertierung des File/FTP-Sender-Adapters von nicht-XML zu XML soll nur ein XML-Dokument für das Mapping in der Integration Engine erstellt werden.
Behandlung von Strukturabweichungen
Die Umwandlungsroutine geht grundsätzlich von konstanten Strukturen aus. Die Anzahl der Felder entspricht der Angabe im Parameter xml.fieldNames oder der Anzahl und Länge der Felder der Angabe im Parameter xml.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 Umwandlungs-Routine bei Strukturabweichungen beeinflussen können.
Wenn Sie zulassen wollen, dass die zur Laufzeit gefundene Struktur von der konfigurierten Struktur abweichen kann, konfigurieren Sie die Parameter xml.missingLastFields und xml.additionalLastFields . Verwenden Sie die Parameter nicht, wird abhängig davon, ob Sie den Parameter xml.fieldFixedLengths konfiguriert haben, das Ergebnis der Umwandlung wie folgt aussehen:
Die Anzahl der Felder in der Eingangsstruktur wird durch den in xml.fieldSeparator angegebenen Wert definiert :
In der XML-Struktur fehlen die Felder ebenfalls
Zusätzliche Felder in der Struktur werden ignoriert
Wenn nur das letzte Feld kürzer ist als definiert oder ganz fehlt, wird die Umwandlung durchgeführt. Der Inhalt des letzten Feldes wird wie vorgefunden in das XML-Element eingestellt. Der Wert kann also unvollständig oder leer sein.
Diese Verhalten können Sie mit den Parametern xml.missingLastFields und xml.additionalLastFields ändern. Verwenden Sie diese Parameter, ist eine definierte Überprüfung der Eingangstrukturen möglich und es werden wohl definierte Ausgangsstrukturen erzeugt.
Einen Teil der Funktion dieser Parameter können Sie auch durch den Parameter xml.lastFieldsOptional implementieren.
xml.lastFieldsOptional ist jedoch veraltet, verwenden Sie ihn nicht mehr.
Verwenden Sie den Parameter gemeinsam mit den Parametern xml.missingLastFields und xml.additionalLastFields , wird eine Fehlermeldung zur Laufzeit ausgegeben.
FILE2XMBWITHROWCONVERSIONFILE2XMB
Machen Sie die folgenden Angaben:
Machen Sie eine Angabe zu den Feldnamen. Folgende Angaben sind möglich:
notAvailable
notAvailable
fromFile
fromFileWithBlankLinefromFile
fromConfigurationxml.fieldNames=
Diese Angabe ist zwingend.
Wenn Sie hier eine Angabe machen, wird eine Zeichenkette erwartet, die die Längen der Spalten der Datei 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.
Die Angabe von xml.fieldFixedLengths= ist zwingend, wenn bei xml.fieldSeparator= keine Angabe gemacht wird.
Wenn Sie hier eine Angabe machen, wird erwartet, dass die Datei die angegebene Zeichenkette (ein oder mehrere Zeichen) als Trennzeichen zwischen den einzelnen Spalten enthält.
Haben Sie bei fieldFixedLengths= keine 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.
Sie müssen zumindest xml.fieldFixedLengths oder xml.fieldSeparator spezifizieren.
YES|NO
YESNONO
Bei CSVStrukturen wirkt der Parameter nicht, hier werden fehlende Felder ignoriert.
YES|NO
Der Parameter wird nur ausgewertet, wenn Sie eine Angabe zum Parameter xml.fieldFixedLengths machen.
NO
Dies ist der Vorgabewert.
YES
Mit diesem Parameter steuern Sie nur das Verhalten der Umwandlungs-Routine 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 xml.fieldFixedLengths angegeben, über den Parameter xml.missingLastFields fest.
Hier können Sie eine Zeichenkette angeben, 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).
Falls es unterschiedliche Textbegrenzer für den Beginn und das Ende eines Textes gibt, können Sie hier den Textbegrenzer für das Textende angeben. Machen Sie keine Angabe, wird der Wert von xml.enclosureSign verwendet.
Hier können Sie eine Zeichenkette angeben, die den Textbegrenzer ersetzt, wenn dieser innerhalb eines von ihm begrenzten Textes vorkommt. Bei der Übernahme des Textes wird diese Zeichenkette dann durch den bei xml.enclosureSign angegebenen Wert ersetzt. Voreingestellt ist der leere Wert.
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 dann durch den bei xml.enclosureSignEnd angegebenen Wert ersetzt. Voreingestellt ist der leere Wert.
YES|NO
YESNO
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 selber das Escape-Zeichen"" für ein Anführungszeichen vor, wird es bei der Übernahme durch das Anführungszeichen ersetzt.
Machen Sie hier eine Angabe, wenn Sie eine zusätzliche Zeichenkette als Trennzeichen nach der letzten Spalte einer Reihe definieren möchten. Dieses wird beim Verarbeiten der letzten Spalte übersprungen (andernfalls würde es als Teil der letzten Spalte behandelt).
Der Vorschlagswert ist ein Zeilenumbruch, also kein explizites Trennzeichen nach der letzten Spalte. Statt dessen sind die Strukturen zeilenweise angeordnet.
Machen Sie hier eine Angabe, wenn Sie eine zusätzliche Zeichenkette als Trennzeichen vor der ersten Spalte einer Reihe definieren möchten. Dieses wird beim Verarbeiten dieser Spalte übersprungen (andernfalls würde es als Teil der ersten Spalte behandelt).
Der Vorschlagswert ist eine leere Zeichenkette (also kein Trennzeichen vor der ersten Spalte).
Sonderzeichen in den Zeichenketten für Trennzeichen:
0xHH´HH
Zeichenketten für Trennzeichen in das XML Dokument einfügen:
Die mit xml.beginSeparator und xml.endSeparator spezifizierten Trennzeichen können auch als Felder in die Struktur des erzeugten XML-Dokuments eingefügt werden. Hierzu spezifizieren Sie Feldnamen mit den Angaben
xml.addBeginSeparatorAsField=<fieldname>
und/oder
xml.addEndSeparatorAsField=<fieldname>
Die Zeichenketten werden dann mit dem angegebenen Feldnamen am Beginn bzw. am Ende der Struktur eingefügt, so wie sie unter xml.beginSeparator und xml.endSeparator angegeben wurden, das heißt einschließlich der Definitionen von Sonderzeichen. Eine Umwandlung in die Sonderzeichen wird nicht vorgenommen, da solche Zeichen in XML-Dokumenten nicht erlaubt sind.
Wenn Sie fromConfiguration für processFieldNames= angegeben haben , ist diese Angabe zwingend. Eine Liste der Spaltennamen wird erwartet, deren Format von den folgenden Angaben abhängt:
Haben Sie für xml.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 xml.comlumnSeparator= angegeben haben).
Haben Sie nur einen Wert für xml.fieldSeparator= angegeben, wird eine Zeichenkette erwartet, die die Namen der Dateispalten im gleichen Format enthält wie die Dateizeilen, was bedeutet, dass das gleiche Trennzeichen und eine eventuell für xml.endSeparator und/oder xml.beginSeparator zusätzlich angegebene Zeichenkette erwartet wird.
|nothing
Haben Sie trim (die Voreinstellung) angegeben, werden alle führenden und nachfolgenden Leerzeichen eines gefundenen Wertes entfernt.
nothing
row
resultset
Der Namensraum wird, wenn angegeben, an den Namen des Dokuments angehängt.
Verwenden Sie folgende Parameter, wenn Sie das Verhalten der Umwandlungs-Routine für Eingangsstrukturen, die von der Konfiguration abweichen, beeinflussen wollen:
|add|error
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 Umwandlung wird aufgrund der unvollständigen Eingangsstruktur abgebrochen. Eine entsprechende Fehlermeldung wird ausgegeben
|error
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 Umwandlung wird aufgrund der unvollständigen Eingangsstruktur abgebrochen. Eine entsprechende Fehlermeldung wird ausgegeben
ignore
error
Haben Sie den Parameter xml.fieldFixedLengths definiert und Sie setzen keinen der beiden oben beschriebenen Parameter, arbeitet die Umwandlungs-Routine 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, für ein wohl definiertes Laufzeitverhalten bei variablen Eingangsstrukturen immer diese beiden Parameter zu setzen.
Das aus den beschriebenen Angaben konstruierte Dokument hat folgendes Aussehen:
<documentName>
<structureTitle>
<field-name1>field-value</field-name1>
<field-name2>field-value</field-name2>
<field-name3>field-value</field-name3>
</structureTitle>
<structureTitle>
<field-name1>field-value</field-name1>
<field-name2>field-value</field-name2>
<field-name3>field-value</field-name3>
</structureTitle>
</documentName>
Ein solches Dokument kann dann durch die Integration Engine weiterverarbeitet werden.
FILE2XMBWITHSTRUCTURECONVERSION
In diesem Modus können Sie Textdateien mit komplexeren Dateistrukturen in ein XML-Ausgangsformat konvertieren. Die Dateien enthalten unterschiedliche Zeilenformate in logischen Strukturen.
Es wird eine Datei erwartet mit einer oder mehreren logischen Strukturen (Recordsets). Eine beliebige Anzahl dieser Recordsets (einer, mehrere oder alle, die in der Datei gefunden werden) können als unabhängige Message an die Integration Engine 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 Schritt 7. Eine Unterstruktur muss immer in genau einer Zeile des Textdokuments dargestellt sein.
Diese Zeichenkette gibt die Reihenfolge und die jeweilige Anzahl der (durch logische Namen identifizierten) Unterstrukturen an.
nA=1,2,3
0
Recordset
Wird, falls angegeben, an den Namen des Recordset angehängt.
1,…, *
Gibt die Anzahl der Recordsets an, die zu einer Message gruppiert werden sollen. Ist die Anzahl der Recordsets in dem Dokument größer als die angegebene, erstellt der Adapter mehrere Messages aus einem Dokument. Die letzte dieser Message enthält dann womöglich weniger Recordsets als angegeben.
Wird Exactly Once als Quality-of-Service angegeben, wird sichergestellt, dass jede dieser Messages (also jeder Teil eines Dokuments, aus dem eine Message erstellt wird) genau einmal an die Integration Engine geschickt wird. Dies ist auch der Fall, wenn die Anwendung während der Erstellung der Messages unterbrochen und später wieder neu gestartet wird.
Wird die Datei mit dem Dokument vor dem Neustart der Anwendung geändert, wird sie wie eine neue Datei behandelt. Ein eventuell ausstehendes Exactly Once kann dann für diese Datei nicht mehr durchgeführt werden.
1*
Wird ein Dokumentname angegeben, wird er als Haupt-XML-Tag in die Message eingefügt. Besteht die erzeugte Message aus mehr als einem Recordset, ist diese Angabe zwingend, da ein XML-Dokument genau ein Haupt-Tag enthalten muss.
Der Namensraum wird, wenn angegeben, an den Namen des Dokuments angehängt.
0
Haben Sie bei xml.recordsetStructure eine variable Anzahl von Unterstrukturen angegeben (also für mindestens eine Unterstruktur die Anzahl* ), müssen die Unterstrukturen über ihren Inhalt vom Parser identifiziert werden. Dies bedeutet, dass ein Schlüsselfeld gesetzt werden muss, mit verschiedenen Konstanten für die verschiedenen Unterstrukturen.
Die Angabe eines Schlüsselfelds ist in diesem Fall zwingend und der Feldname muss in allen Unterstrukturen erscheinen.
Ist die Anzahl der Unterstrukturen in einer Struktur fest, wird die Angabe ignoriert.
Haben Sie ein Schlüsselfeld angegeben, müssen Sie hier den Typ des Schlüsselfelds angeben, auf dessen Basis der Vergleich mit den vorgegebenen Werten stattfindet (siehe xml.NameA.keyFieldValue= unten).
Anfang bzw. Ende von Recordsets, die eine variable Anzahl und Anordnung von Strukturen enthalten, wird wie folgt bestimmt:
Beim Wert asc (aufsteigend) wird die Reihenfolge der Strukturen des Recordsets als eindeutig angenommen. Sobald eine frühere Struktur auftritt, bedeutet dies den Beginn eines neuen Recordsets.
Beim Wert var (variabel) wird die Reihenfolge nicht als fest 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, wird das gesamte Dokument als ein einziges Recordset interpretiert.
Der Vorschlagswert ist asc .
Verwenden Sie hier die gleichen Angaben wie in Schritt 7 und fügen Sie den Namen der Unterstruktur dem Namen der jeweiligen Eigenschaft hinzu, getrennt durch einen Punkt nach dem XML-Präfix.
xml.NameA.fieldNamesxml.fieldNames
Änderungen gegenüber den Eigenschaften in Schritt 7:
row
NameA
fromConfiguration
Aus den genannten Gründen ist diese Angabe jetzt zwingend.
Auch diese Angabe ist zwingend, wenn xml.keyFieldName= in der Definition des Recordset gesetzt ist.
addignoreadd
Auch wenn hier eine Angabe gemacht wird, muss danach ein Zeilenumbruch erfolgen, da Unterstrukturen immer als eine Zeile des Dokuments erwartet werden.
Das aus den beschriebenen Angaben konstruierte Dokument hat folgendes Aussehen:
<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>...
Das Tag<documentName> wird ergänzt, wenn Sie für xml.documentName= eine Angabe gemacht haben. Eine solche Angabe ist zwingend, wenn die Message mehr als einen Recordset enthält. Die Anzahl an Recordsets wiederum ist abhängig von der Angabe bei xml.recordsetsPerMessage .
Ein solches Dokument kann dann durch die Integration Engine weiterverarbeitet werden.
Es besteht die Möglichkeit, zusätzliche Dateiinhalte innerhalb einer Nachricht zur Integration Engine zu transportieren. Hierbei gelten folgende Regeln:
Das Anfügen zusätzlicher Dateiinhalte geschieht mit den folgenden Angaben:
Hier wird für jede gewünschte, zusätzliche Datei ein logischer Name definiert, der in den nachfolgenden Parametern verwendet wird.
Hier wird angegeben, welcher Teil des ursprünglich gefundenen Dateinamens ersetzt werden soll, um den Namen der zusätzlichen Datei zu erzeugen.
Folgendes Beispiel erklärt die Verknüpfung von drei Dateien vom Typ text , pdf und doc zu einer Nachricht:
x*.txt
Aufgrund dieser Angabe werden die Dateien x1.txt und x2.txt im angegebenen Verzeichnis gefunden.
addaPDF, addaDOC
".txt"=".pdf"
".txt"=".doc"
Aufgrund dieser Angaben werden zur Datei x1.txt noch die Dateien x1.pdf und x1.doc im gleichen Verzeichnis gesucht. Die Inhalte dieser drei Dateien werden zu einer Nachricht an den Integration Engine zusammengefasst. Analog werden zur Datei x2.txt noch die Dateien x2.pdf und x2.doc gesucht und verarbeitet.
NOYESYES
BIN|TXT
Gibt den Datentyp des Dokuments an.
BIN
|1|2
0