问题描述
我需要为每笔交易提取CSVData,然后使用SMTP连接器在单个电子邮件中将提取的csv文件作为多个附件发送。
请问我如何基于交易数组动态提取CSV有效负载并单独访问它们以以下格式发送附件。
我正在使用DW 2.0 / Mule 4
{
"data1.csv":vars.csvextract1,"data2.csv":vars.csvextract2
}
输入有效载荷如下。
{
"Header": {
"From": {
"@description": "Networks","#text": "Networks"
},"To": {
"@description": "Retail","#text": "Retail"
},"MessageID": "735-MSG","MessageDate": "2005-01-01T12:00:00+10:00",},"Transactions": [
{
"@transactionID": "46735","@transactionDate": "2002-01-01T12:00:00+10:00","WorkNotification": {
"@version": "r9","CSVMainsServicerenewal": {
"RecordCount": "3","CSVData": "NMI,NMI_Checksum,Planned_Outage_Commencement_Date,Planned_Outage_Commencement_Time,Duration_of_Outage\n5767656543,7,2015-09-26,15:09:00,11\n5240667197,2012-11-02,12:13:00,2\n5240494248,2013-01-01,2"
}
}
},{
"@transactionID": "46739",2"
}
}
}
]
}
谢谢
解决方法
尝试一下。这将为每个事务将键CSVData的值分配给名为data $$。csv的键(该键在地图的每次迭代中递增)。那是你所追求的吗?
%dw 2.0
output application/json
---
payload.Transactions map {
'data$$.csv': $.WorkNotification.CSVMainsServiceRenewal.CSVData
} reduce ((item,acc = {}) -> acc ++ item)
,
您可以尝试以下dwl
%dw 2.0
output application/json
var payload= {
"Header": {
"From": {
"@description": "Networks","#text": "Networks"
},"To": {
"@description": "Retail","#text": "Retail"
},"MessageID": "735-MSG","MessageDate": "2005-01-01T12:00:00+10:00",},"Transactions": [
{
"@transactionID": "46735","@transactionDate": "2002-01-01T12:00:00+10:00","WorkNotification": {
"@version": "r9","CSVMainsServiceRenewal": {
"RecordCount": "3","CSVData":"NMI,NMI_Checksum,Planned_Outage_Commencement_Date,Planned_Outage_Commencement_Time,Duration_of_Outage\n5767656543,7,2015-09-26,15:09:00,11\n5240667197,2012-11-02,12:13:00,2\n5240494248,2013-01-01,2"
}
}
},{
"@transactionID": "46739","CSVData": "NMI,2"
}
}
}
]
}
---
{(payload.Transactions map {
"$(payload.Header.From.'#text' ++ '_' ++
payload.Header.To.'#text' ++ '_' ++
now() as String {format : 'yyyyMMdd'} ++ (if ($$ as Number < 9) '_0' else '_')
++ '$$' as Number + 1).csv" :
$.WorkNotification.CSVMainsServiceRenewal.CSVData
})}
输出为
{
"Networks_Retail_20201009_1.csv": "NMI,2","Networks_Retail_20201009_2.csv": "NMI,2"
}
关于, 洛克什
,您可以尝试以下方法:
标题为真
{(payload.Transactions map {
"$(payload.Header.From.'#text' ++ '_' ++
payload.Header.To.'#text' ++ '_' ++
now() as String {format : 'yyyyMMdd'} ++ (if ($$ as Number < 9) '_0' else '_')
++ '$$' as Number + 1).csv" :
read($.WorkNotification.CSVMainsServiceRenewal.CSVData,"application/csv",{"header": "true"})
})}
输出:
{
"Networks_Retail_20201011_01.csv": [
{
"NMI": "5767656543","NMI_Checksum": "7","Planned_Outage_Commencement_Date": "2015-09-26","Planned_Outage_Commencement_Time": "15:09:00","Duration_of_Outage": "11"
},{
"NMI": "5240667197","NMI_Checksum": "0","Planned_Outage_Commencement_Date": "2012-11-02","Planned_Outage_Commencement_Time": "12:13:00","Duration_of_Outage": "2"
},{
"NMI": "5240494248","Planned_Outage_Commencement_Date": "2013-01-01","Duration_of_Outage": "2"
}
],"Networks_Retail_20201011_02.csv": [
{
"NMI": "5767656543","Duration_of_Outage": "2"
}
]
}
标头为假
{(payload.Transactions map {
"$(payload.Header.From.'#text' ++ '_' ++
payload.Header.To.'#text' ++ '_' ++
now() as String {format : 'yyyyMMdd'} ++ (if ($$ as Number < 9) '_0' else '_')
++ '$$' as Number + 1).csv" :
read($.WorkNotification.CSVMainsServiceRenewal.CSVData,{"header": "false"})
})}
输出:
{
"Networks_Retail_20201011_01.csv": [
{
"column_0": "NMI","column_1": "NMI_Checksum","column_2": "Planned_Outage_Commencement_Date","column_3": "Planned_Outage_Commencement_Time","column_4": "Duration_of_Outage"
},{
"column_0": "5767656543","column_1": "7","column_2": "2015-09-26","column_3": "15:09:00","column_4": "11"
},{
"column_0": "5240667197","column_1": "0","column_2": "2012-11-02","column_3": "12:13:00","column_4": "2"
},{
"column_0": "5240494248","column_2": "2013-01-01","column_4": "2"
}
],"Networks_Retail_20201011_02.csv": [
{
"column_0": "NMI","column_4": "2"
}
]
}