sap-XSTRING( mode a, source b, encoding c )


Diese Funktion kann verwendet werden, um beim Aufruf eines SAP-RFC einen Feldwert vom SAP-Datentyp XSTRING zu erzeugen, bzw. um in der Response eines SAP-RFC einen XSTRING zu dekodieren. In der internen Darstellung besteht beim XSTRING jedes Byte aus zwei Hexadezimal-Ziffern.

Der Repository-Typ XSTRING entspricht dem ABAP-Typ y und er enthält binäre Daten. In SAP wird der Typ XSTRING beispielsweise verwendet, um an einen RFC eine komplette XML-Datei als Feldwert zu übergeben. Jedes Byte wird im XSTRING intern durch zwei Hexadezimal-Ziffern dargestellt. Das XSTRING-Format ist damit auch geeignet reine Binärdaten/Bytefolgen zu übergeben, die keine Zeichenfolgen sind.

Innerhalb von Lobster Integration existiert kein korrespondierender Datentyp. Man muss deshalb die XSTRING-Felder bzw. Struktur-Komponenten in der RFC-Schnittstelle im Profil als String-Feld darstellen. Die Feldlänge muss dabei mindestens der doppelten Anzahl der Bytes im XSTRING entsprechen oder 0.

Die Wandlung vom String zum XSTRING wird durch den Modus encode in Parameter a gewählt, die umgekehrte Richtung durch den Modus decode. Eingabe des ersten Buchstaben des Modus (d oder e) reicht aus.

Um eine Binärdatei aus dem Filesystem zu lesen und ihren Inhalt in einen XSTRING zu wandeln, wird der Modus fileencode verwendet. In Parameter c wird anstelle des Encodings der Dateipfad erwartet. Um einen XSTRING in Binärdaten zu wandeln und in eine Datei zu schreiben, wird der Modus filedecode verwendet. In Parameter c wird anstelle des Encodings der Dateipfad erwartet.

Der Default-Modus bei leerem Parameter a ist encode.

Modus encode


Dieser Modus erwartet als Parameter b die XML-Daten als String, üblicherweise beginnend mit einem XML-Header <?xml encoding=…?>.

In Lobster Integration wird der Datentyp String immer als Unicode-Wert im Encoding UTF-16 dargestellt. Um die Daten zuerst in das entsprechende Encoding zu wandeln und dann die Bytes in die XSTRING-Darstellung, muss als Parameter c das Encoding, entsprechend XML-Header aber in "Java-Notation", angegeben werden. Die zum XML-Encoding UTF-8 passende Java-Notation lautet utf8. Zu ISO-8859-1 passt 8859_1. Wenn das Encoding variabel sein muss und die Daten mit einem XML-Header beginnen, kann man das Encoding auch aus dem XML-Header herauslesen lassen. Dazu wird der Parameter c entweder leer gelassen oder der Wert xml verwendet. Für die häufigsten Encodings, UTF-8 bzw. ISO-8859-n wird die Wandlung in die Java-Notation utf8 bzw. 8859_n automatisch ausgeführt. Die automatische Ermittlung des Encodings aus dem XML-Header sollte im Interesse von Stabilität und Performance nur genutzt werden, wenn es unvermeidbar ist.

Modus decode


Dieser Modus erwartet als Parameter b die Binärdaten aus einem XSTRING, z. B. aus der Response eines RFC. Der Lobster-Integration-Feldtyp ist dabei aber ein String, wie oben beschrieben.

Die XSTRING-Daten werden dabei zuerst in eine Bytefolge gewandelt. Um diese Bytefolge in einen String zu wandeln, muss das Encoding bekannt sein. Es wird entweder als Parameter c in "Java-Notation" erwartet oder, falls es sich um eine XML-Datei mit XML-Header handelt, kann es aus dem XML-Header bestimmt werden, wie oben für den Modus encode beschrieben. Dazu wird wieder Parameter c leer gelassen oder der Wert xml verwendet.

Modus fileencode bzw. filedecode


Diese beiden Modi dienen dazu, eine Binärdatei aus dem Dateisystem komplett in einen XSTRING zu wandeln (fileencode) bzw. einen XSTRING als Binärdatei in das Dateisystem zu schreiben (filedecode). Es erfolgt keine Interpretation der Bytes als Zeichen. Deshalb ist hier kein Encoding relevant. In Parameter c wird stattdessen der Pfad der Binärdatei erwartet, die gelesen oder geschrieben wird.

Der Dateipfad kann wahlweise ein lokaler Pfad mit relativer oder absoluter Adresse sein oder ein UNC-Pfad, der mit // beginnt. Falls der UNC-Pfad einen gesonderten Login braucht, kann man die Login-Daten hinter dem Dateipfad, getrennt durch ein Pipe-Zeichen | in der Form password:user@domain angeben.

Parameterbeschreibung


Parameter

Beschreibung

a

Modus {encode|decode|fileencode|filedecode} (e oder d oder fenc oder fdec genügt).

b

Quellstring {encode} bzw. Hexcodes aus einem XSTRING {decode|filedecode}.

c

Zeichenkodierung {encode|decode} bzw. Dateipfad {fileencode|filedecode} .


Beispiele


Parameter a

Parameter b

Parameter c

Ergebnis


ABC123

8859_1

414243313233

encode

<?xml encoding="UTF-8"?><Umlaut>äöü</Umlaut>


3c3f786d6c20656e636f64696e673d225554462d38223f3e3c556d6c6175743ec3a4c3b6c3bc 3c2f556d6c6175743e

e

<?xml encoding="ISO-8859-1"?><Umlaut>äöü</Umlaut>

xml

3c3f786d6c20656e636f64696e673d2249534f2d383835392d31223f3e3c556d6c6175743ee4f6fc 3c2f556d6c6175743e

e

<?xml encoding="ISO-8859-1"?><Umlaut>äöü</Umlaut>

ibm273

4c6fa794934085958396848995877e7fc9e2d660f8f8f5f960f17f6f6e4ce4949381a4a36ec06ad0 4c61e4949381a4a36e

decode

414243313233

8859_1

ABC123

d

c3a4c3b6c3bc

utf8

äöü

filedecode

414243313233

datei.asc

Die Bytes 0x41, 0x42, 0x43, 0x31, 0x32, 0x33 werden in Datei datei.asc geschrieben. Das ist der ASCII-Text: ABC123. Die Anzahl der Bytes wird als Rückgabewert zurück gegeben.

fileencode


image.gif

Die Datei image.gif wird gelesen und ihr Inhalt byteweise in das XSTRING-Format gewandelt. Der Parameter b wird nicht beachtet.