RFC-Schnittstellendefinition als XML-Datei
Die Schnittstellendefinition erfolgt in einer XML-Datei, deren Pfad in der Listener-Konfiguration über den Parameter xmlFile angegeben wird. Die Struktur der XML-Datei wird über die DTD-Datei sap_rfc_configure_1_0.dtd geprüft, die unter dem Verzeichnis ./etc/dtd/ vorhanden sein muss. Das Root-Element heißt RFC und im Attribut name wird der Name des RFCs erwartet. Er muss mit dem functionName in der Listener-Konfiguration übereinstimmen.
<?
xml
version
=
"1.0"
encoding
=
"ISO-8859-1"
?>
<!DOCTYPE RFC PUBLIC
"-//EBD Integration//DTD SAP RFC Configuration 1.0//EN"
"
http://www.ebd-entwicklung.de/dtd/sap_rfc_configure_1_0.dtd
">
<
RFC
name
=
"RFC-Name"
>
<!-- Weitere Einstellungen -->
</
RFC
>
Im Abschnitt <!-- Weitere Einstellungen --> steht die Definition der
Import-Parameter als einfache Felder oder "flache" Strukturen,
Export-Parameter als einfache Felder oder "flache" Strukturen,
Tabellen-Parameter,
Exceptions.
Wir unterstellen hier, dass das Grundkonzept einer SAP-RFC-Schnittstelle (ABAP) bekannt ist. Alle Teile der Schnittstelle sind optional.
IMPORT-Parameter
<
INPUTPARAMS
>
<!-- Feld-Definitionen und/oder Struktur-Definitionen -->
</
INPUTPARAMS
>
EXPORT-Parameter
<
OUTPUTPARAMS
>
<!-- Feld-Definitionen und/oder Struktur-Definitionen -->
</
OUTPUTPARAMS
>
TABLE-Parameter
<
TABLES
>
<
TABLE
name
=
"Name"
refname
=
"Tablerefname"
description
=
"Description"
tabletype
=
"Type"
>
<
ROW
>
<!-- Feld-Definitionen -->
</
ROW
>
</
TABLE
>
<!-- Weitere Tabellen-Definitionen -->
</
TABLES
>
Jede TABLE-Definition enthält genau eine ROW. Man kann sich die ROW als eine namenlose Struktur vorstellen. Die Werte einer Tabelle bilden dann eine Liste solcher zusammengesetzter Struktur-Werte.
Wenn mehrere Tabellen mit absolut gleicher Struktur definiert werden, sollten Sie den gleichen refname verwenden. Der refname kann formal aus dem name durch Voranstellen von REF_ gebildet werden. Der tabletype kann die Werte in, out oder inout haben. Hinweis: Die Klasse DataWizardForwardRequestListener unterstützt nur in.
Exceptions
<
EXCEPTIONS
>
<
EXCEPTION
name
=
"Name"
description
=
"Description"
/>
</
EXCEPTIONS
>
Feld-Definitionen
<
FIELD
name
=
"Feldname"
type
=
"Feldtyp"
length
=
"länge"
decimals
=
"Kommastellen"
description
=
"Beschreibung für das Feld"
/>
Feldtyp |
Bedeutung |
BCD |
Binäres Zahlenformat mit Dezimalstellen, length und decimals sind Pflicht. |
BYTE |
Binärdaten (Byte-Folge), length ist erforderlich. |
CHAR |
Zeichenkette mit fixer Länge, length ist erforderlich. |
DATE |
Datum ohne Uhrzeit, Format yyyyMMdd, length=8. |
FLOAT |
Fließkommazahl, length und decimals sind Pflicht. |
INT |
4-Byte-Integer. |
INT1 |
1-Byte-Integer (Vorsicht). |
INT2 |
2-Byte-Integer (Vorsicht). |
NUM |
Numerischer Wert als Zeichenkette, length ist erforderlich. |
STRING |
Zeichenkette mit variabler Länge, nicht für STRUCTURE oder TABLE. |
TIME |
Uhrzeit ohne Datum, Format HHmmss, length=6. |
Bei Typen, bei denen decimals keine Bedeutung hat, wird der Wert ignoriert. Die Typen INT1 und INT2 sollten nicht verwendet werden, weil hier vom JCo eine falsche Länge gemeldet wird. Ersatzweise wird NUM mit length empfohlen.
Strukturdefinitionen
Strukturen in den Import- und Export-Parametern sind "flache" Strukturen. Das bedeutet, eine Struktur enthält nur Felder, aber keine weitere Strukturen.
<
STRUCTURE
name
=
"STRUCT1"
refname
=
"REF_STRUCT1"
description
=
"Beschreibung"
>
<!-- Feld-Definitionen -->
</
STRUCTURE
>
Analog zu den Tabellen-Definitionen sollten mehrere Strukturen mit absolut gleichem Aufbau denselben refname verwenden.
Struktur des Beispiel-RFCs MY_RFC
Das folgende Beispiel definiert den Funktionsbaustein MY_RFC, der nur einen numerischen Wert als Import-Feld NUMERIC_ID erwartet.
<?
xml
version
=
"1.0"
encoding
=
"ISO-8859-1"
?>
<!DOCTYPE RFC PUBLIC
"-//EBD Integration//DTD SAP RFC Configuration 1.0//EN"
"
http://www.ebd-entwicklung.de/dtd/sap_rfc_configure_1_0.dtd
">
<
RFC
name
=
"MY_RFC"
>
<
INPUTPARAMS
>
<
FIELD
name
=
"NUMERIC_ID"
type
=
"INT"
length
=
"4"
decimals
=
"0"
description
=
"Numeric ID"
/>
</
INPUTPARAMS
>
</
RFC
>
Hinweis zu Datentypen bei STRUCTURE und TABLE
Der Begriff "flache Struktur" bezieht sich auf einen zusammengesetzten Datentyp, der aus einer Folge einfacher Felder zusammengesetzt ist. Jedes einzelne Feld muss dabei eine konkrete Feldlänge haben. Der Typ STRING mit variabler Länge ist dadurch nicht für Strukturen zulässig.
Ein TABLE-Parameter entspricht eigentlich einer Liste von Zeilen, wobei jede Zeile eine flache Struktur darstellt. Deshalb ist auch in der TABLE-Definition die Verwendung des Typs STRING unzulässig.
Auf der SAP-Seite empfehlen wir grundsätzlich die Verwendung von Repository-Typen. Die Übereinstimmung mit der Definition auf der Lobster-Seite muss vom Anwender bewusst hergestellt werden, indem ein passender Datentyp (vorzugsweise CHAR oder NUM) mit Angabe der Länge eingetragen wird, so wie sie im SAP-Repository definiert ist.
Beispiel: Wenn man z. B. für eine EAN im SAP den Repository-Typ CHAR13 verwendet, muss das Feld auf Lobster-Seite mit folgenden Attributen definiert werden.
.... type=“CHAR“ length=“13“ .... |
Bei STRUCTURE- und TABLE-Definitionen sollte die Reihenfolge der Felder innerhalb der Definition auf SAP-Seite mit der Definition auf Lobster-Seite übereinstimmen.