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

1 回答 1

1

在 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”,您将看到该键被添加。

于 2021-08-13T12:00:45.517 回答