Как построить несколько условных IF в Mule 4 и DW 2.0?
Мне нужно создать функцию с такими условиями, как этот псевдокод:
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):
Неверный ввод '+', ожидаемое пространство имен или атрибут<<@ ('(Name: Value) +') '> (строка 11, столбец 11):
Где строка 11, столбец 11 является первым появлением consent +
, Если я пытаюсь отладить проект, все, что я получаю в консоли:
Сообщение: ошибка при разборе скрипта: %dw 2.0
Что мне здесь не хватает? Как добавить три условия в мою функцию и добавить значения в consent
вар?
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
Ваше требование выглядит как хорошее использование reduce
функция. На основе предоставленного вами псевдокода вы можете сделать что-то вроде ниже
output application/json
var payload = [
{"name":"Ram", "email":"Ram@gmail.com", "state": "CA","age":21},
{"name":"Bob", "email":"bob32@gmail.com","state": "CA","age":30},
{"name":"john", "email":"bob32@gmail.com","state": "NY","age":43}
]
---
payload reduce ((item, consent = []) -> consent +
{
(state: item.state) if(item.state=='CA'),
(age: item.age) if(item.age >25)
}
)