我想创建一个与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
}
}
}
答案 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()运算符将返回一个列表,这对我来说更有意义。