繁体   English   中英

将 Mule 3.6 表达式组件迁移到 DataWeave 2.0 的问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM