简体   繁体   中英

mule3 to mule 4 expression to dataweave 2.0

I'm new to migrating the mule 3 apps to mule 4 I have done almost conversion but one expression stopped my flow and not able to achieve the logic for it if anyone has an idea regarding the expression to transform please help me

Expression:

if(flowVars.maindata.keySet().contains(payload.idCaseNumber))
{
flowVars.temporary=[];
flowVars.maindata.get(payload.idCaseNumber).add(map);
}
else
{
flowVars.temporary.add(previousdata);
vars.maindata.put(payload.idCaseNumber,temporary);
}

I have tried up to my knowledge on the above code but still I'm getting problem

flowVars.maindata.get(payload.idCaseNumber).add(map);

In Mule 3 the expression language is MEL. In Mule 4 it is DataWeave 2.0. You can't just translate directly. MEL is an imperative scripting language, similar to a subset of Java and it is easy to call Java methods. DataWeave 2.0 is a functional language. Furthermore Mule 4 operations (example: a, , etc) can only return one value, which can be assigned to the payload or to one variable.

For your snippet I'll assume that maindata is a map. You can use two set-variable to assign each variable:

<set-variable variableName="temporary" value="#[ if( namesOf(vars.maindata) contains payload.idCaseNumber ) [] else vars.temporary ++ **previousdata** ]" />

I don't know exactly what do you use for previousdata.

To update the variable maindata it is probably a good match for the update operator , in a separate or Transform operation, with the same condition than for vars.temporary.

Update: I'll assume vars.maindata is a map, which DataWeave will consider an object, and each element is a list. As an example of doing an 'upsert' operation with a dynamic selector :

%dw 2.0
output application/java
var temporary=[5]
var maindata={ a:[1,2,3,4] }
var myKey="a"
---
maindata  update {
        case data at ."$(myKey)"! ->  if (data != null) data ++ temporary else temporary
}

You could replace in above script the DataWeave var temporary with the expression from my example above, and the other DataWeave variables with the Mule variables ( vars.name ) or payload. If you change in above example myKey to have value "b" you will see that key being added.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM