
Werte von Elementen beziehungsweise Attributen der XML-Message (also der Payload) sind technisch gesehen eine Zeichenkette (ein String). Daher erwarten alle Standardfunktionen, die auf Feldwerten operieren, Argumente vom Typ String und geben einen Wert vom Typ String zurück. Trotzdem kann natürlich semantisch der übergebene Wert einen anderen Datentyp haben, nämlich den, den Sie bei der Definition des Schemas zur Payload für das Feld angegeben haben. Für Standardfunktionen gibt es folgendes Standardverhalten:
Je nach Standardfunktion werden die übergebenen Werte mit Hilfe einer Datentypkonvertierung (über einen cast ) in für die Funktion sinnvolle Werte überführt. Wenn der Wert nicht sinnvoll interpretiert werden kann, löst die Mapping-Laufzeit eine Java-Exception aus.
If-Klauseln werten Bedingungen aus, die boolesche Werte liefern. Standardfunktionen, die boolesche Werte zurückgeben, geben entweder den String true oder false zurück. Standardfunktionen, die boolesche Werte erwarten, interpretieren die Werte "1"und "true"(Groß-/Kleinschreibung spielt hier keine Rolle) als true und alle anderen Werte als false .
Weitere Informationen: Laufzeitverhalten
Funktionsüberblick
Die Datenfluss-Objekte zu Standardfunktionen haben den folgenden Aufbau:
Die meisten Datenfluss-Objekte haben auf der linken Seite zwei oder drei Eingänge und einen Ausgang, der immer auf der rechten Seite liegt.
Die If-Funktionen haben eine Rauten- beziehungsweise Dreiecksform
Außerdem gibt es noch Konvertierungsfunktionen mit einem Eingang/Ausgang und Funktionen, die ohne Eingaben einen Wert liefern.
Standardfunktionen, für die zusätzliche Angaben benötigt werden, sind mit einem Sternchen gekennzeichet. Um den Dialog für die Funktionsparameter aufzurufen, doppelklicken Sie auf das Datenfluss-Objekt.
Die folgende Grafik gibt einen Überblick über alle möglichen Formen für Datenfluss-Objekte:

Um die Verwendung der einzelnen Funktionen zu erläutern, sind die Eingabe-Kästchen in der Grafik mit den Variablen X , Y , Z oderr I bezeichnet, der Ergebniswert mit R oder O . In den folgenden Tabellen werden alle Standardfunktionen an Hand dieser Ein-/Ausgabevariablen beschrieben. Im Datenfluss-Editor liefern andere Datenfluss-Objekte, die mit den Funktionen über die jeweiligen Verbindungs-Kästchen verbunden sind, die Eingabewerte beziehungsweise bekommen das Ergebnis der Operation. Sie können die Funktionen auch beliebig miteinander kombinieren (vorausgesetzt, die an eine Funktion übergebenen Werte können interpretiert werden).
Funktionskategorie: Arithmetik
Für diese Kategorie sind nur numerische Eingabewerte zugelassen (auch solche mit Nachkommastellen). Wenn der Wert nicht als Zahl interpretiert werden kann, wird eine Java-Exception ausgelöst. Ansonsten werden alle Berechnungen mit der Präzision des Java-Datentyps float durchgeführt. Das Format des Ergebniswerts hängt vom Ergebnis ab:
Ist das Ergebnis ein Wert mit Nachkommastellen, bleiben diese erhalten
Ausnahme: Folgt eine 0 als Nachkommastelle, wird diese abgeschnitten. das heißt, das Ergebnis der Berechnung 4.2 - 0.2 ist 4 und nicht 4.0 .
Beachten Sie außerdem, dass Java Werte vom Typ float vor der Berechnung in das Zweiersystem konvertiert. Dort wird das Ergebnis berechnet und danach wieder in die Dezimaldarstellung konvertiert. Das Ergebnis der Konvertierung können zweistellige Dezimalstellen sein, die periodisch wiederholt und dann automatisch abgeschnitten werden. Im dezimalen System kann dies ungenaue Ergebnisse hervorrufen (Beispiel: 2.11 + 22.11 = 24.220001). Wenn die Anzahl der Nachkommastellen auf zwei begrenzt sein soll, etwa weil es sich um Werte in einer Währung handelt, können Sie die Werte nach der Berechnung mit der Standardfunktion FormatNum entsprechend formatieren.
Wenn der Anwendungsfall genauere Ergebnisse erfordert, können Sie für die Berechnungen auch das Dezimalsystem als Basis wählen. Intern wird dann die Java-Klasse BigDecimal verwendet. Details entnehmen Sie dem SAP-Hinweis 958486.
|
Funktionsname |
Funktion |
|
add |
R = X + Y |
|
subtract |
R = X - Y |
|
equalsA |
R = true , falls der Wert X gleich dem Y -Wert ist, sonst ist R = false . Die Werte werden numerisch interpretiert, der Wert 1.5 ist also gleich 1.50 . |
|
abs |
O = absoluter Wert von I |
|
sqrt |
R ist die Quadratwurzel von X |
|
sqr |
R ist die Quadratzahl von X |
|
sign |
R = 1 , wenn X eine positive Zahl ist R = 0 , wenn X gleich 0 ist R = 1 , wenn X eine negative Zahl ist |
|
neg |
R = -X |
|
1/x |
R ist der Kehrwert von X |
|
power |
R = X Y |
|
less |
true , wenn X < Y , sonst false |
|
greater |
true , wennn X > Y , sonst false |
|
multiply |
R = X * Y |
|
divide |
R = X / Y |
|
max |
R = Maximum der beiden Werte X und Y |
|
min |
R = Minimum der beiden Werte X und Y |
|
ceil |
O = Kleinstmöglicher Integer-Wert (bis minus 'unendlich'), der nicht kleiner als das Argument I ist. Entspricht der Java-Funktion java.lang.Math.ceil() . |
|
floor |
O = Größtmöglicher Integer-Wert, der nicht größer als das Argument I ist. Entspricht der Java-Funktion java.lang.Math.floor() . |
|
round |
O = Integer-Wert, der am nächsten am Wert des Arguments I ist. Entspricht der Java-Funktion java.lang.Math.round() . |
|
counter |
O = Anzahl der Aufrufe dieses Zielfeld-Mappings, wobei Sie den Initialwert und das Inkrement des Zählers bei den Funktionsparametern angeben. |
|
FormatNum |
Konvertiert
I nach Anwendung einer Musters, das Sie über die Funktionsparameter festlegen. Die möglichen Muster sind die gleichen wie in der Java-Klasse java.text.DecimalFormat
http://java.sun.com/j2se/1.3/docs/api/java/text/DecimalFormat.html |
Funktionskategorie: Boolesch
Alle Funktionen dieser Kategorie erwarten boolesche Eingabewerte (siehe oben).
|
Funktionsname |
Funktion |
|
And |
R ist true , wenn X und Y den Wert true haben. Ansonsten ist R false . |
|
Or |
R ist true , wenn X oder Y den Wert true haben. Ansonsten ist R false . |
|
Not |
|
|
Equals |
Vergleicht die beiden booleschen Werte X und Y und gibt true zurück, wenn beide gleich sind, ansonsten false . Nicht-boolesche Werte werden als false interpretiert (siehe oben). Für den Vergleich von Strings verwenden Sie die Funktionen equalsS oder compare der Kategorie Text . |
|
notEquals |
R = Not(Equals(X,Y)) |
|
if |
|
|
Wenn Bedingung X erfüllt ist (also true liefert): R = Y . Welchen Else-Wert die Funktion liefern soll, ist von verschiedenen Faktoren abhängig (siehe ausführliche Dokumentation). |
Funktionskategorie: Konstanten
Da diese Funktionen keine Eingabewerte haben, gehören Sie zu den erzeugenden Funktionen .
|
Funktion |
Verwendung |
|
Konstante |
O liefert eine beliebige String-Konstante, die Sie im Dialog für die Funktionsparameter eingeben. |
|
Kopiert für ein mehrfach auftretendes Element den Wert an einer festgelegten Position der Ausgangsstruktur auf das zugeordnete Zielfeld. |
|
|
sender |
O liefert den Namen des Sender-Business-Systems. Bei einem Test des Message-Mappings im Integration Builder wird O ausgegeben. |
|
receiver |
O liefert den Namen des Empfänger-Business-Systems. Bei einem Test des Message-Mappings im Integration Builder wird Test_Receiver_System ausgegeben. |
Funktionskategorie: Konvertierungen
|
Funktion |
Verwendung |
|
FixValues |
Ausführung eines Werte-Mappings über eine feste Wertetabelle, die Sie über die Funktionsparameter füllen. Die Tabelle wird zusammen mit dem aktuellen Message-Mapping gespeichert und ist nur ein mal verwendbar. |
|
Werte-Mapping |
Führt ein Werte-Mapping für den eingegebenen Wert I aus. Über die Funktionsparameter ordnen Sie den Eingabewert I und den Ausgabewert O jeweils einer Darstellung in der Werte-Mapping-Tabelle zu. Auf diese Weise können Sie Felder der Ausgangs- und Zielstruktur einer Darstellung zuordnen. Die Werte-Mapping-Tabelle füllen Sie in der Konfigurations-Pflege des Integration Builders. Da diese Einträge in der Design-Zeit noch nicht zur Verfügung stehen, wird das Abbildungs-Ergebnis beim Testen des Message-Mappings nur angedeutet. Hinweis
Zu XI 3.0 hat sich die Laufzeit-Schnittstelle für Werte-Mappings geändert. XI 2.0 Message-Mappings mit Aufrufen der Funktion Value Mapping funktionieren auch weiterhin über die alte Laufzeit-Schnittstelle. Mit der Drucktaste XI 3.0 Interface können Sie die Parameter der Funktion für die neue Laufzeit-Schnittstelle übernehmen. In den Funktionseigenschaften der Standardfunktion Value mapping geben Sie über die Felder Agency und Schema jeweils den Schlüssel des Ausgangs- beziehungsweise Zielwertes an. Die Belegung dieser Werte ist beliebig. Sie können sich hier aber auch auf die Felder SenderParty , SenderService , ReceiverParty beziehungsweise ReceiverService beziehen. Die Mapping-Laufzeit ersetzt diese Werte zur Laufzeit durch die Werte der korrespondierenden Felder aus dem Message-Header der Message, für die ein Werte-Mapping ausgeführt wird. Hinweis
Sie können im Feld Agentur auch den Namen eines Business-Systems angeben. Bei Transporten von Werte-Mappings aus einem Integration Directory in ein anderes prüft der Integration Builder, ob Sie als Agentur ein Business-System eingetragen haben und setzt dies beim Transport um. |
Funktionskategorie: Datum
Bei den folgenden Funktionen können Sie das Datumsformat für das Ausgangs- beziehungsweise Zielformat über den Dialog für die Funktionsparameter festlegen.
Das Format entspricht der Konvention wie sie in der Standard-Java-Klasse java.util.SimpleDateFormat festgelegt ist. Der Funktionsparameter-Dialog bietet einen Wizard, über den Sie die gängigsten Datumsformate eingeben können.
|
Funktion |
Verwendung |
|
currentDate |
Gibt das aktuelle Datum über O zurück. Diese Funktion gehört zu den erzeugenden Funktionen . |
|
DateTrans |
Konvertiert ein Datumsformat I in ein anderes Datums-Format O . |
|
DateBefore |
R = O , wenn das Datum X vor dem Datum Y liegt, ansonsten false |
|
DateAfter |
R = true , wenn das Datum X nach dem Datum Y liegt, ansonsten false |
|
CompareDates |
R = 1 , wenn das Datum X nach dem Datum Y liegt, R = 0 , wenn das Datum X das gleiche Datum ist wie Datum Y , R = -1 , wenn das Datum X vor dem Datum Y liegt |
Erweiterte Einstellungen
Nicht nur die Formate eines Datum sind länderspezifisch, sondern auch die Zählung für Wochentage und Kalenderwochen. Über folgende Funktionsparameter können Sie die Konventionen hierfür festlegen:
Erster Wochentag Legt fest, welcher Tag der Woche als erster Wochentag aufgefasst wird. In den USA ist dies beispielsweise Sonntag, in Frankreich Montag. Die Zählung beginnt bei 1. Dieses Attribut setzt die Mapping-Laufzeit über die Java-Methode
setFirstDayOfWeek() . Weitere Informationen finden Sie unter
http://java.sun.com/j2se/1.4.2/docs/api/java/util/Calendar.html
.
Mindestzahl an Tagen erforderlich in der ersten Woche Legt fest, wie viele Tage die erste Woche eines Jahres haben muss, damit sie als erste Kalenderwoche mitgezählt wird. Dieses Attribut setzt die Mapping-Laufzeit über die Java-Methode
setMinimalDaysInFirstWeek() . Weitere Informationen finden Sie unter
http://java.sun.com/j2se/1.4.2/docs/api/java/util/Calendar.html
.
Zusätzlich können Sie über das Ankreuzfeld
Kalender ist fehlertolerant steuern, ob ungültige Datumsangaben eine Ausnahme auslösen sollen oder nicht. Ist das Ankreuzfeld gesetzt, lässt die Mapping-Laufzeit beispielsweise ein Datum wie den 942 Februar 1996 zu, welches dann als 941.Tag nach dem 1.Februar 1996 interpretiert werden müsste. Es wird keine Ausnahme ausgelöst. Dieses Attribut setzt die Mapping-Laufzeit über die Java-Methode
setLenient() . Weitere Informationen finden Sie unter
http://java.sun.com/j2se/1.4.2/docs/api/java/util/Calendar.html
.
Funktionskategorie: Knotenfunktionen
|
Funktion |
Verwendung |
|
Wenn in Ihrer Zielstruktur Elemente zur Struktuierung vorhanden sind, die es in der Ausgangsstruktur nicht gibt, können Sie solche Elemente mit dieser Funktion einfügen. Mit der Bedingung I können Sie steuern, ob das Element eingefügt wird oder nicht. Das Element in der Zielstruktur verbinden Sie mit O. |
|
|
Verwerfen aller übergeordneten Kontexte eines Ausgangsfeldes. Auf diese Weise können alle Hierarchiestufen löschen und eine Liste erzeugen. |
|
|
replaceValue |
Ersetzt den Wert I durch einen Wert, den Sie im Dialog für die Funktionsparameter festlegen können. |
|
O = true , falls das dem Eingang I zugeordnete Ausgangsfeld in der XML-Instanz existiert. Ansonsten false . |
|
|
Fügt einen Kontextwechsel für ein Element ein. |
|
|
Löscht zunächst alle Werte aller Kontexte von der Eingangsqueue bis auf den ersten. Leere Kontexte (= ResultList.SUPPRESS) werden nur einen leeren String ersetzt. Es bleibt eine Queue übrig, die aus Kontexten mit jeweils einem Wert besteht. Schließlich werden alle inneren Kontextwechsel gelöscht, so dass alle Werte zu einem Kontext gehören. |
|
|
Repliziert einen Wert eines einfach auftretenden Feldes, um ihn mit den Werten eines mehrfach auftretenden Wertes paarweise als Rekord kombinieren zu können. |
|
|
sort |
Sortiert alle Werte des mehrfach auftretenden Eingangsfeldes I innerhalb des bestehenden oder gesetzten Kontextes. Die Sortierung ist stabil (gleiche Elemente werden beim Sortieren nicht in ihrer Reihenfolge vertauscht) und sortiert die Werte in O(n*log(n)) Schritten. Über die Funktionsparameter können Sie festlegen, ob die Werte numerisch oder lexikographisch (mit oder ohne Berücksichtigung von Groß-/Kleinschreibung) sortiert werden sollen, und ob aufsteigend oder absteigend. |
|
sortByKey |
Wie sort , nur mit zwei Eingangsparametern für die Sortierung von (Schlüssel, Wert)-Paaren. Sie können sich diese Sortierung wie die von einer Tabelle mit zwei Spalten vorstellen:
|
|
mapWithDefault |
Ersetzt leere Kontexte der Eingangsqueue durch einen Default-Wert, den Sie über die Funktionsparameter angeben. Beispiel: Wenn "Default" der Standard-(Default-)Wert ist und A|B1,B2| |C| |D die Eingangsqueue, liefert mapWithDefault die folgende Ausgangsqueue: A | B1,B2 | Default | C | Default |D . Die Funktion entspricht folgender Kombination von Standardfunktionen: If( []field, exists([]field), Constant([value=default])) |
|
Diese Funktion hat zwei Eingangsqueues, bei denen die Anzahl der Werte gleich sein muss. Um die Ergebnisqueue zu erzeugen, übernimmt die Funktion die Werte der ersten Queue und kombiniert sie mit den Kontextwechseln der zweiten Queue. |
Funktionskategorie: Statistik
Die Funktionen dieser Funktionskategorie sind gedacht für Ausgangsfelder, die mehrfach in der Ausgangsstruktur vorkommen (maxOccurs = i > 1).
|
Funktion |
Verwendung |
|
sum |
R = Summe der Werte X 1 bis Xi eines Kontexts |
|
average |
R = Durchschnitt der Werte X 1 bis X i eines Kontexts |
|
count |
R = Anzahl der Felder in einem Kontext ( i ) |
|
index |
R = Index i von X i . Legen Sie in den Funktionsparametern Folgendes fest: Den Initialwert von i , das Inkrement und ob der Indexwert zu Beginn eines neuen Kontextes neu initialisiert werden soll oder nur ein Mal für die gesamte Ausgangsstruktur. |
Funktionskategorie: Text
Bei Positionsangaben entspricht die 0.Position dem ersten Zeichen im String.
|
Funktion |
Verwendung |
|
substring |
Gibt für einen String I einen Teilstring O zurück. Um die Position des Teilstrings anzugeben, verwenden Sie den Dialog für die Funktionseigenschaften. Beispiel: substring("Hello", 0,1) = "H", das heißt, es wird der Teilstring vom Startindex 0 bis zum Endindex 1 ( exklusive Position 1) gebildet. |
|
concat |
R = Verkettung der Strings X und Y (ohne Trennzeichen). Beispiel: X = "Mrs." ; Y = "Miller" ; R = "Mrs.Miller" . Verwenden Sie den Dialog für die Funktionseigenschaften, um ein Trennzeichen innerhalb der Verkettung einzufügen. |
|
equalsS |
R = true , falls der String X gleich dem String Y ist, sonst ist R = false . |
|
indexOf (2 Eingabeparameter) |
R = Erste Position, an der der String Y in X gefunden wird und -1 falls Y überhaupt nicht darin vorkommt. |
|
indexOf (3 Eingabeparameter) |
R = Erste Position ab der Position Z, an der der String Y in X gefunden wird und -1 falls Y überhaupt nicht darin vorkommt. |
|
lastIndexOf (2 Eingabeparameter) |
R = Letzte Position, an der der String Y in X gefunden wird und -1 falls Y überhaupt nicht darin vorkommt. |
|
lastIndexOf (3 Eingabeparameter) |
R = Letzte Position ab der Position Z, an der der String Y in X gefunden wird und -1 falls Y überhaupt nicht darin vorkommt. |
|
compare |
Vergleicht String X mit String Y : R = 0 ,wenn die Strings gleich sind; R = positive Zahl i, wenn X lexikographisch größer als Y; R = negative Zahl i, wenn X lexikographisch kleiner als Y ist i gibt lexikographisch die Differenz zwischen beiden Strings an. Die Funktion verhält sich genauso wie
http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html |
|
replaceString |
X : String, in dem etwas ersetzt werden soll Y : String, der in X zu ersetzen ist Z : String, der Y ersetzen soll R = String, in dem jedes Auftreten von Y in X durch Z ersetzt ist Beispiel
X = "sparring with a purple porpoise" Y = "p" Z = "t" R = "starring with a turtle tortoise" |
|
length |
O = Länge des Strings |
|
endsWith |
R = true , wenn Y die letzte Zeichenfolge in X ist;ansonsten false . |
|
startsWith (2 Eingabeparameter) |
R = true , wenn Y die erste Zeichenfolge in X ist;ansonsten false . |
|
startsWith (3 Eingabeparameter) |
R = true , wenn Y in X ab Position Z übereinstimmt; ansonsten false . |
|
toUpperCase |
Konvertiert alle Kleinbuchstaben von I zu Großbuchstaben |
|
trim |
Entfernt alle Whitespace Zeichen (Leerzeichen, Tabs, Return) am Anfang und am Ende eines Strings. Verhält sich genauso wie
http://java.sun.com/j2se/1.3/docs/api/java/lang/String.html |
|
toLowerCase |
Konvertiert alle Großbuchstaben von I zu Kleinbuchstaben |