Show TOC Anfang des Inhaltsbereichs

Funktionsdokumentation createIf  Dokument im Navigationsbaum lokalisieren

Verwendung

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

   creator

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 abhä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

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.

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>

 

Ende des Inhaltsbereichs