ifWithoutElse
Wenn die if-Bedingung von ifWithoutElse den Wert true liefert, wird der Eingangswert von then als Ergebnis zurückgegeben. Auf diese Weise lässt sich diese Funktion in Zielfeld-Mappings als Filter einsetzen.
Um die unterschiedlichen Fälle zu untersuchen, in denen die if-Bedingung nicht den Wert true liefert, gehen wir von folgender Ausgangs-Message aus:
Ausgangs-Message |
|
In dieser Struktur können Email-Adressen und Telefonnummern einer Person (Wurzelelement Person) innerhalb eines mehrfach auftretenden Elements communication erfasst werden. Das Element phoneNumber der Ausgangs-Message kann verschiedene Typen haben. Sie sind als Aufzählung (Enumeration) für das Attribut type des Elements hinterlegt. Die Werte der Aufzählung sind private, office und fax. Eine Testinstanz zur gegebenen Ausgangs-Message könnte beispielsweise so aussehen:
Testinstanz |
|
Der Else-Wert von ifWithoutElse hängt davon ab, ob das Ergebnis dieser Funktion an ein Zielfeld oder an eine Funktion übergeben wird. Wir schauen uns nun diese beiden Fälle an Hand der vorgestellten Ausgangs-Message und der Testinstanz an. In beiden Fällen sollen jeweils nur die Faxnummern an ein Zielfeld faxNumber übergeben werden.
In dem in der folgenden Tabelle dargestellten Zielfeld-Mapping wird der Ergebniswert von ifWithoutElse direkt an das Zielfeld faxNumberübergeben.
Zielfeld-Mapping |
Queue |
|
|
In solchen Fällen möchte man entweder das Zielelement faxNumber erzeugen und phoneNumber als Faxnummer übernehmen oder das Zielelement soll überhaupt nicht erzeugt werden. Entsprechend erzeugt ifWithoutElse den Wert ResultList.SUPPRESS, wenn die if-Bedingung nicht erfüllt ist. Die zweite Spalte der Tabelle zeigt die Queue für ifWithoutElse in diesem Zielfeld-Mapping mit der obigen Testinstanz an: Immer dann, wenn typeungleich „fax“ ist, steht ResultList.SUPPRESS in der Queue.
Wenn Sie den Ergebniswert von ifWithoutElse an eine Standardfunktion mit mehreren Eingabeparametern übergeben, gibt es zwei Anwendungsfälle zu unterscheiden:
● ifWithoutElse wirkt wie ein Filter. Wenn nur diejenigen Werte in der folgenden Funktion als Eingabeparameter von Interesse sind, bei denen beim Ausfiltern die if-Bedingung erfüllt war, wählen Sie bei ifWithoutElse als Else-Wert den leeren String. In diesem Fall interpretiert die Standardfunktion die Eingabe nicht als Wert und überspringt ihn.
● Wenn Eingabequeues der Standardfunktion synchronisiert sein sollen, soll ifWithoutElse den Wert ResultList.SUPPRESS liefern. In diesem Fall überspringt die Standardfunktion die SUPPRESS-Werte nicht.
In dem folgenden Zielfeld-Mapping wird der Ergebniswert von ifWithoutElse an die Standardfunktion concat übergeben. Ziel ist es, diejenigen Telefonnummern, die sich auf ein Fax beziehen, durchzunumerieren. Wir verwenden daher die counter-Funktion und die concat-Funktion mit einem Leerzeichen als Trenner:

Pro communication-Element gibt es nur eine Telefonnummer beziehungsweise Email-Adresse. Nach jeder Nummer gibt es daher einen Kontextwechsel. Über die Funktionsparameter von ifWithoutElse können Sie bestimmen, ob der Else-Wert ein leerer String oder der SUPPRESS-Wert ist. Die folgende Tabelle zeigt die unterschiedlichen Ergebnis-Queues von concat, abhängig davon, wie die Funktionsparameter von ifWithoutElse gesetzt sind:
Kein SUPPRESS-Wert als Else-Wert |
SUPPRESS-Wert als Else-Wert |
|
|
Die Numerierung ist unterschiedlich, weil die Standardfunktion concat den Kontext mit dem leeren String überspringt, während der SUPPRESS-Wert mit dem zweiten Wert von counterverknüpft wird.
Wie aus dem letzten Beispiel ersichtlich, führt die Ausgabe des SUPPRESS-Wertes dazu, dass keine Kontexte bei der Berechnung des Ergebnisses durch die Standardfunktion übersprungen werden. Dies ist beispielsweise erforderlich, wenn statt der oben verwendeten counter-Funktion ein Ausgangsfeld name aus einem anderen Konntext wie phoneNumber den Eingabeparameter liefert, für das es pro Kontext die gleiche Anzahl von Werten gibt. In diesem Fall erreichen Sie durch die Verwendung des SUPPRESS-Wertes als Else-Wert, dass beide Eingangs-Queues die gleiche Anzahl von Werten pro Kontext haben.