在 Mule 3 中,表达语言是 MEL。在 Mule 4 中,它是 DataWeave 2.0。你不能直接翻译。MEL 是一种命令式脚本语言,类似于 Java 的一个子集,很容易调用 Java 方法。DataWeave 2.0 是一种函数式语言。此外,Mule 4 操作(例如: a 、 等)只能返回一个值,该值可以分配给有效负载或一个变量。
对于您的代码段,我假设 maindata 是一个地图。您可以使用两个 set-variable 来分配每个变量:
<set-variable variableName="temporary" value="#[ if( namesOf(vars.maindata) contains payload.idCaseNumber ) [] else vars.temporary ++ **previousdata** ]" />
我不知道您对以前的数据使用什么。
要更新变量 maindata,它可能是更新运算符的一个很好的匹配,在单独的或变换操作中,与 vars.temporary 具有相同的条件。
更新:我假设 vars.maindata 是一个地图,DataWeave 将其视为一个对象,并且每个元素都是一个列表。作为使用动态选择器执行“upsert”操作的示例:
%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
}
您可以在上面的脚本中将 DataWeave var 替换为上面temporary
示例中的表达式,并将其他 DataWeave 变量替换为 Mule 变量 ( vars.name
) 或有效负载。如果您在上面的示例中将 myKey 更改为具有值“b”,您将看到该键被添加。