首页 > 解决方案 > 数据编织中的复杂操作

问题描述

我需要将一个 groovy 代码映射到 dataweave 中。现有的 groovy 代码类似于伪示例:

if(condition) {
  payload.each { data -> {
     function1(data.attributes)
     function2(data.attributes)
     if(condition) {set flag}
  }
  if(flag is set) {return payload}
  else {return errorMessage}
}
}

function1(data) {if(condition) {return errorMessage} else {return data}}
function2(data) {if(condition) {return errorMessage} else {return data}}

将输入有效负载视为-

[
{
  "attribute1": "value1",
  "attribute2": "value2",
  "attribute3": "value3",
  "attribute4": "value4",
},
{
  "attribute1": "value5",
  "attribute2": "value6",
  "attribute3": "value7",
  "attribute4": "value8",
}
]

输出是一个 JSON 数组,它取决于 flag 变量。如果设置了标志,则输出 JSON 数组将与 errorMessages 相关,否则将传递原始有效负载。有没有一种方法可以在不使用太多额外的 mule 进程的情况下将其转换为 dataweave?

提前致谢

标签: dataweavemule4

解决方案


假设您有一个名为 flag 的变量(true 表示成功,false 表示错误)和一个包含错误消息的变量,您可以使用以下 DataWeave 表达式:

%dw 2.0
output application/json
---
if (vars.flag == true) 
  payload 
else 
{
  errorMessage: vars.errorMessage
}

如果 vars.flag 的值为 true,则 DataWeave 表达式将按原样返回有效负载。否则,它将返回类似于以下内容的 JSON 对象:

{
  "errorMessage": "An error occurred" 
}

推荐阅读