2017-04-13 5 views
2

Ich benutze Dataweave, aufgrund der Mehrwertsteuer in jedem Staat, ich muss einen jeden Kunden aus einem bestimmten Staat zu einem vordefinierten Benutzer zuweisen. Allerdings, wenn ich schaffen dies in dataweave beende ich mit diesem als meine XML-up:Mule ESB Mehrere, wenn Bedingungen in Dataweave

<Customer> 
<Number> 
    <Number> 
    <Number> 
     <Number>WEB002</Number> 
    </Number> 
    </Number> 
</Number> 

Ich brauche nur eine ‚Zahl‘ Knoten unterhalb des ‚Kunden‘ Knoten. Hier mein dataweave ist:

Customer:{ 
Number: 'WEB001' when payload.order.billing_address.state == 'Indiana' otherwise 
Number: 'WEB002' when payload.order.billing_address.state == 'Kentucky' otherwise 
Number: 'WEB003' when payload.order.billing_address.state == 'Illinois' otherwise 
Number: 'WEB004' 
}, 

versucht haben, meine Bedingungen innerhalb von Klammern setzen, keine Freude, haben versucht, jede Bedingung in Klammern zu wickeln, keine Freude. Gibt es einen besseren Weg, dies zu tun?

Antwort

5

Sie die Zuordnung zwischen Staat und Anzahl in einer Karte/Wörterbuch setzen kann, die die Lesbarkeit wie diese verbessern würde:

%var numbers = { 
    Indiana: 'WEB001', 
    Kentucky: 'WEB002', 
    Illinois: 'WEB003' 
} 

das ist, was Ihre dataweave aussehen würde:

%dw 1.0 
%output application/xml 

%var defaultNumber = 'WEB004' 
%var numbers = { 
    Indiana: 'WEB001', 
    Kentucky: 'WEB002', 
    Illinois: 'WEB003' 
} 

--- 
Customer: { 
    Number: numbers[payload.order.billing_address.state] 
     default defaultNumber 
} 

und Hier ist ein Screenshot mit Beispieldaten und die resultierende Vorschau: enter image description here

5

Eine sehr einfache und einfache Möglichkeit, das als zu tun folgt: -

<dw:transform-message doc:name="Transform Message"> 
      <dw:input-payload doc:sample="empty.xml" /> 
      <dw:set-payload><![CDATA[%dw 1.0 

    %output application/xml 
    --- 
    { 
     Customer: 
     Number: "WEB001" when payload.order.billing_address.state == "Indiana" 
     otherwise (
     "WEB002" when payload.order.billing_address.state == "Kentucky" 
      otherwise (
      "WEB003" when payload.order.billing_address.state == "Illinois" 
       otherwise "WEB004")) 
    } 

    ]]></dw:set-payload> 
     </dw:transform-message>