dataweave - 需要帮助在 mulesoft 中使用 dataweaver 为数组中的子行项目组构建标题项目(即时)
问题描述
(PS:下面是一个简化的例子来解释我的要求。真实的数据要庞大和复杂得多。)
我有一个可以用作行项目的行列表。我需要动态地对这些行项目进行分组并为每个组建立一个标题。如果你能遵循这个结构。
我已经实现了逻辑,但它只考虑替代行,即数组 [0]、1、[4]、[6]。1,3,5等缺失
这是我在数据编织器转换消息中的逻辑:
%dw 2.0
output application/java
---
flatten(payload map ((item, index) ->
[{
"type":"header",
"name":"",
"code":payload[index].code,
"status":payload[index].status
},
{
"type":"lineitem",
"name":payload[index].name,
"code":"",
"status":""
}]
想法是基本上将每一行拆分为标题和行项目。并在订购订单项后在下一步中删除重复的标题。除了在下一步中缺少替代行(通过使用索引标记行进行验证)之外,所有这些都有效。
我也在努力删除一个数组字段。例如有效载荷 - “状态”不起作用。
如果有人可以提出一种更简单的方法或帮助我理解为什么缺少替代行,那就太好了。
解决方案
试试这个
输入:
name,code,status
a,yes,active
b,yes,active
c,no,inactive
d,no,inactive
e,yes,inactive
f,yes,inactive
g,no,active
h,no,active
i,no,inactive
j,no,inactive
k,yes,active
l,yes,active
脚本
%dw 2.0
output application/csv
var headerGroups = (payload groupBy (item, index) -> (item.status ++ "_" ++ item.code)) mapObject
($$): {
"type":"header",
"name":"",
"code":$[0].code,
"status":$[0].status
}
var nameHeaderGroups= (payload groupBy (item, index) -> (item.status ++ "_" ++ item.code)) mapObject
($$): {
"name":[$.name]
}
fun buildNameObject(nameArray) = nameArray map
{
"temp": ($ map {
"type":"lineItem",
"name": $ ,
"code":"",
"status":""
}
)}
---
flatten(nameHeaderGroups mapObject {
a: {(headerGroups[$$])},
b: {(buildNameObject($.name))}.temp
}pluck ($)
)
输出:
type,name,code,status
header,,yes,active
lineItem,a,,
lineItem,b,,
lineItem,k,,
lineItem,l,,
header,,no,inactive
lineItem,c,,
lineItem,d,,
lineItem,i,,
lineItem,j,,
header,,yes,inactive
lineItem,e,,
lineItem,f,,
header,,no,active
lineItem,g,,
lineItem,h,,
这应该可以帮助您实现目标。它确实根据状态和代码组合来分组排列项目。如果顺序很重要,您也可以添加它。
推荐阅读
- c# - Bot Framework V4 IActivityLogger
- javascript - 有没有办法让 p-dropdown 上的 [resetFilterOnHide]="true" 与primeng 5.2.7一起使用?
- c# - 有没有办法从任务列表中选择当前未运行的任务?
- spring - Spring Boot批处理:无法从命令行加载ResourceBundle
- sql - 如何在从 SQL (MS SQL Server) 生成 XML 时省略某些值
- javascript - FabricJS:选择形状角度的问题 6
- node.js - 是否需要安装 node.js 才能执行编译为 .exe 文件的电子应用程序?
- python - 如何将文件从一个文件夹移动到另一个文件夹作为不同的用户?
- python - 在 Python 2.7 中垂直而不是水平打印字符串
- dart - 如何在for循环中创建实例?