将Mule 3.6表达组件迁移到DataWeave 2.0中

问题描述 投票:1回答:1

我的公司正在朝着将当前的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 dataweave
1个回答
1
投票

注意,在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>
© www.soinside.com 2019 - 2024. All rights reserved.