是否有DataWeave 1.0“用于”运算符?

时间:2019-08-16 00:03:21

标签: mule dataweave

我想创建一个与count变量指定的一样多的元素,例如:

有一个表,其中包含有关支持的设备的信息

select port_count 
from equipment
where id=#[flowVars.equipmentId]

我必须生成一条消息,其他控件无法控制并解释该消息并执行:

<dw:transform-message doc:name="Get value">
    <dw:set-payload><![CDATA[%dw 1.0
%output application/json
---
{
  "actions": {
    (for 1..flowVars.port_count map {
      "action": {
        "type": "add_port",
        "id": $$
      }
    })
  }
}]]></dw:set-payload>
</dw:transform-message>

所需结果:

{
  "actions": {
    "action": {
        "type": "add_port",
        "id": 1
    },
    "action": {
        "type": "add_port",
        "id": 2
    }
  }
}

1 个答案:

答案 0 :(得分:4)

DataWeave没有for的概念,因为它是一种功能语言。仍然可以通过使用范围来满足需要:

%dw 1.0
%var port_count=3
%output application/json
---
{
  actions: 
    (((1 to port_count) when port_count > 0 otherwise []) map
      action: {
        "type": "add_port",
        "id": $
      }
    )  reduce ($$ ++ $)
}

输出:

{
  "actions": {
    "action": {
      "type": "add_port",
      "id": 1
    },
    "action": {
      "type": "add_port",
      "id": 2
    },
    "action": {
      "type": "add_port",
      "id": 3
    }
  }
}

只需更改flowVar的port_count变量,您便会准备就绪。

删除reduce()运算符将返回一个列表,这对我来说更有意义。