[英]Issues Migrating Mule 3.6 expression component into DataWeave 2.0
我的公司正在将我们当前的 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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.