(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,,
这应该可以帮助您实现目标。它确实根据状态和代码组合对行项目进行分组。如果订单很重要,您也可以添加。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句