Show TOC

FunktionsdokumentationcreateIf Dieses Dokument in der Navigationsstruktur finden

 

Mit createIf() können Sie Abhängig von einer Bedingung ein Tag in der Zielstruktur erzeugen.

Beispiel

Im folgenden Beispiel wird ein Mapping zwischen zwei verschiedenen Formaten für eine Liste von Meldungen benötigt. In der Ausgangsstruktur wird ein Attribut type dazu verwendet, um die Meldung als intern (type=“internal“) oder extern (type=“external“) zu klassifizieren. In der Zielstruktur wird dagegen hierzu entweder das Tag internalRequest oder externalRequest verwendet:

Ausgangsstruktur (links) und Zielstruktur (rechts)

Feldname

minOccurs

maxOccurs

Feldname

minOccurs

maxOccurs

RequestListMsg

1

1

RequestListEIMsg

1

1

request

0

unbounded

 internalRequest

0

unbounded

   type (Attr.)

1

1

Initiator

1

1

Ersteller

1

1

   contact

1

1

   contact

1

1

   issue

1

1

description

1

1

 externalRequest

0

unbounded

Initiator

1

1

   contact

1

1

   issue

1

1

Mit createIf() können Sie das jeweilige Zielfeld unabhängig vom Attribut type erzeugen:

Message-Mapping mit createIf()

Zielfeld-Mapping

Wert von Constant()

/RequestListEIMsg=/RequestListMsg

/RequestListEIMsg/internalRequest= createIf( equalsS( removeContexts(/RequestListMsg/request/type),Constant()))

internal

/RequestListEIMsg/internalRequest/initiator= /RequestListMsg/request/creator

/RequestListEIMsg/internalRequest/contact= /RequestListMsg/request/contact

/RequestListEIMsg/internalRequest/issue= /RequestListMsg/request/description

/RequestListEIMsg/internalRequest= createIf( equalsS( removeContexts(/RequestListMsg/request/type),Constant()))

external

/RequestListEIMsg/externalRequest/initiator= /RequestListMsg/request/creator

/RequestListEIMsg/externalRequest/contact= /RequestListMsg/request/contact

/RequestListEIMsg/externalRequest/issue= /RequestListMsg/request/description

Hinweis Hinweis

Die Funktion removeContexts() ist nötig, weil anstelle des Ausgangsfeldes request das Attribut type abgebildet wird. Für request gibt es daher kein Zielfeld und keinen Kontext in der Zielstruktur. Die type-Queue hat aber trotzdem den request-Kontext gespeichert, so dass die Prozessierung zu früh abbrechen würde, wenn man diesen Kontext nicht löschen würde.

Ende des Hinweises.
Beispiel

Ausgangs-Instanz

Ergebnis

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

<RequestListMsg>

<request type="internal">

<creator> creator1 </creator> <contact> contact1 </contact> <description> description1 </description>

</request>

<request type="external">

<creator> creator2 </creator> <contact> contact2 </contact> <description> description2 </description>

</request>

</RequestListMsg>

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

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

<internalRequest>

<initiator> creator1 </initiator> <contact> contact1 </contact> <issue> description1 </issue>

</internalRequest>

<externalRequest>

<initiator> creator2 </initiator> <contact> contact2 </contact> <issue> description2 </issue>

</internalRequest>

</ns0:RequestListEIMsg>