Anfang des Inhaltsbereichs

Funktionsdokumentation SplitByValue Dokument im Navigationsbaum lokalisieren

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=
  SplitByValue(/ManagerMsg/managers/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"
 encoding="UTF-8"?>

 

<ManagerMsg>

  <managers>

    <personalId>
        PID001
    </personalId>
    <personalId>
        PID002
    </personalId>
    <personalId>
        PID003
    </personalId>
    <personalId>
        PID004
    </personalId>
    <personalId>
        PID005
    </personalId>
    <personalId>
        PID006
    </personalId>
    <personalId>
        PID007
    </personalId>

  </managers>

</ManagerMsg>

<?xml version="1.0" encoding="UTF-8"?>

 

<ns0:RoomsMsg
 xmlns:ns0="workshopDemo">

  <room>

    <personalId>
        PID001
    </personalId>

  </room>

  <room>

    <personalId>
        PID002
    </personalId>

  </room>

  <room>

    <personalId>
        PID003
    </personalId>

  </room>

  <room>

    <personalId>
        PID004
    </personalId>

  </room>

</ns0:RoomsMsg>

 

 

 

Ende des Inhaltsbereichs