我的公司正在朝着将当前的Mule 3.6 API迁移到Mule 4.2的方向努力,目前我正在尝试迁移我们的第一个API。运行时之间存在许多差异,不仅是在Mule 4中广泛使用Dataweave 2.0。我是Mule 4的许多组件的新手,这些组件已经广泛使用Mule 3,并且我目前仍坚持移动以下表达式组件进入Dataweave。我一直在努力获取正确的语法,而Studio并没有抱怨错误。
当前表达式是
<expression-component doc:name="Expression"><![CDATA[
flowVars.pSector="ELECTRICITY";
if(flowVars.serialNo.length()==14){
if (flowVars.serialNo.substring(0,2)=="G4" || flowVars.serialNo.substring(0,2)=="E6" ||
flowVars.serialNo.substring(0,2)=="JE" || flowVars.serialNo.substring(0,2)=="JA" ||
flowVars.serialNo.substring(0,2)=="JS") {
flowVars.pSector="GAS";
}
}]]></expression-component>
这实际上是根据仪表的序列号及其长度来确定仪表的燃料类型。将表达式转换为Dataweave的任何帮助将不胜感激
注意,在Mule 4中不会有副作用,这意味着您可以将一个脚本的结果分配给有效负载或一个变量。另外,DataWeave是功能性的,而不是命令性语言。在Mule 4中,变量被引用为vars.name
而不是flowVars.name
。
幼稚的翻译可能是这样的:
<ee:transform doc:name="Transform Message">
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/java
fun checkSerial(serial)=if (sizeOf(serial) == 14 )
if (serial[0 to 1] == "G4" or serial[0 to 1]=="E6" or serial[0 to 1]=="JE"
or serial[0 to 1]=="JA" or serial[0 to 1]=="JS")
"GAS"
else
"ELECTRICITY"
else "ELECTRICITY"
---
checkSerial(vars.serialNo)]]></ee:set-payload>
</ee:message>
</ee:transform>