!--a11y-->
Verwendung
Die Funktion
SplitByValue() ist das Pendant zu removeContexts(): Statt einen Kontext aufzulösen, können Sie Kontextwechsel in die Queue zum Ausgangswert einfügen. Statt eines übergeordneten Elements erhalten Sie dann für jeden eingefügten Kontextwechsel dieses Element. Voraussetzung ist allerdings, dass einem übergeordnetem Ausgangsfeld ein übergeordnetes Zielfeld zugeordnet ist und für diese minOccurs>0 ist. Es werden höchsten minOccurs übergeordnete Zielfelder eingefügt.Sie können dabei einen Kontextwechsel entweder nach jedem Wert, nach jedem Wechsel des Wertes oder nach jedem Tag ohne Wert in die Queue einfügen.
Beispiel
Mit der folgenden Ausgangsstruktur lassen sich die Personalnummern von Managern in einer Liste erfassen. Die Zielstruktur sieht vor, dass mindestens vier Räume besetzt werden müssen (
minOccurs von rooms ist 4). Es sollen nun die ersten vier Manager der Managerliste auf die vier Räume verteilt werden.Ausgangsstruktur (links) und Zielstruktur (rechts)
|
Feldname |
minOccurs |
maxOccurs |
Feldname |
minOccurs |
maxOccurs |
|
ManagerMsg |
1 |
1 |
RoomsMsg |
1 |
1 |
|
managers |
1 |
1 |
room |
4 |
4 |
|
personalId |
0 |
unbounded |
personalId |
1 |
4 |
Der Kontext zu
personalId der Ausgangsstruktur ist managers. Von diesem gibt es nur einen. Alle personalId-Element befinden sich in diesem Kontext. Um nach jedem Tag von personalId einen weiteren Kontext zu erhalten, verbinden Sie die beiden personalId-Elemente von Ausgangs- und Zielstruktur und setzen Sie bei den Funktionseigenschaften den Kontextwechsel für jedes Unterelement von managers (Each Value). Der manager-Kontext muss natürlich auch in der Zielstruktur existieren. Daher weisen Sie dem Ausgangsfeld managers das Zielfeld room zu.Message-Mapping mit SplitByValue()
|
Zielfeld-Mapping |
Wert von SplitByValue() |
|
/RoomsMsg=/ManagerMsg |
|
|
/RoomsMsg/room=/ManagerMsg/managers |
|
|
/RoomsMsg/room/personalId= |
Each Value |
Weil die Häufigkeit von
room auf exakt vier gesetzt ist, werden vier Kontexte, dass heisst, vier mal das Element room mit jeweils einem Unterelement personalId erzeugt (die anderen Manager gehen leider leer aus):Beispiel
|
Ausgangs-Instanz |
Ergebnis |
|
<?xml version="1.0"
<ManagerMsg> <managers> <personalId> </managers> </ManagerMsg> |
<?xml version="1.0" encoding="UTF-8"?>
<ns0:RoomsMsg <room> <personalId> </room> <room> <personalId> </room> <room> <personalId> </room> <room> <personalId> </room> </ns0:RoomsMsg> |