如何在Mule 4和DW 2.0中建立多个IF条件?

时间:2019-05-30 15:24:29

标签: mule anypoint-studio dataweave mule4

我需要使用以下伪代码创建条件的函数:

var consent = []

function buildConsent() {
   if (condition1) {
       consent += values1
   }

   if (condition2) {
       consent += values2
   }

   if (condition3) {
       consent += values3
   }
}

这是我在Mule4和DW 2.0上的处理方式:

%dw 2.0
var consent = []
var factIntake = vars.facts

fun buildConsent() =
    if (factIntake.miscFactItems[?($.value1 == true)] != null) {
        consent + {
            "Consent_Type": "some1",
            "Consent_Given_By": "some2"
        }
    }

    if (factIntake.miscFactItems[?($.value2 == true)] != null) {
        consent + {
            "Consent_Type": "some3",
            "Consent_Given_By": "some4"
        }
    }

output application/json
--
{
    "Consent_Data": buildConsent()
}

但是我从IDE(AnypointStudio 7)中收到以下错误:

  

无效的输入“ +”,预期的命名空间或   Attribute <'@('((Name:Value)+')'>(第11行,第11列):

第11行第11列是consent +的首次出现。如果我尝试调试该项目,那么我在控制台中得到的只是:

  

消息:解析脚本时出错:%dw 2.0

我在这里想念的是什么?如何将三个条件添加到函数中并将值附加到consent var中?

2 个答案:

答案 0 :(得分:1)

在DataWeave中变量是不可变的,因此您不能在同一个变量中累积内容,需要创建新变量。

所以看起来像这样:

%dw 2.0
output application/json  

var consent1 = if (condition1) [{"Consent_Type": "some1", "Consent_Given_By": "some2"}] else []
var consent2 = if (condition2) [{"Consent_Type": "some3", "Consent_Given_By": "some4"}] else []
---
consent1 ++ consent2

答案 1 :(得分:0)

您的要求似乎很好地利用了<!DOCTYPE函数。根据您提供的伪代码,您可以执行以下操作

reduce