mule3到mule4表达式到dataweave 2.0



我刚开始将mule 3应用程序迁移到mule 4,我已经完成了几乎转换,但一个表达式停止了我的流程,无法实现它的逻辑,如果有人有关于表达式转换的想法请帮助我

表达式:

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);
}

我已经尝试了我的知识在上面的代码,但仍然我得到的问题

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

在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** ]" />

我不知道你用什么来表示previousdata。

要更新变量maindata,它可能与更新操作符匹配得很好,在单独或转换操作中,条件与vars.temporary相同。

更新:我假设是var。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变量temporary与我上面的例子中的表达式,和其他DataWeave变量与Mule变量(vars.name)或负载。如果你在上面的例子中改变myKey值"b"您将看到该键被添加。

相关内容

  • 没有找到相关文章

最新更新