使用Mule 4在一封电子邮件中动态附加多个csv文件
我需要为每个事务提取CSVData,并使用SMTP连接器将提取的csv文件作为多个附件发送到一封电子邮件中 请让我知道,我如何根据事务数组动态提取CSV负载,并单独访问它们以发送以下格式的附件 我使用的是DW 2.0/Mule 4使用Mule 4在一封电子邮件中动态附加多个csv文件,mule,dataweave,Mule,Dataweave,我需要为每个事务提取CSVData,并使用SMTP连接器将提取的csv文件作为多个附件发送到一封电子邮件中 请让我知道,我如何根据事务数组动态提取CSV负载,并单独访问它们以发送以下格式的附件 我使用的是DW 2.0/Mule 4 { "data1.csv":vars.csvExtract1, "data2.csv":vars.csvExtract2 } 输入有效载荷如下所示 { "Header": { &q
{
"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,0,2012-11-02,12:13:00,2\n5240494248,7,2013-01-01,12:13:00,2"
}
}
},
{
"@transactionID": "46739",
"@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,0,2012-11-02,12:13:00,2\n5240494248,7,2013-01-01,12:13:00,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,0,2012-11-02,12:13:00,2\n5240494248,7,2013-01-01,12:13:00,2"
}
}
},
{
"@transactionID": "46739",
"@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,0,2012-11-02,12:13:00,2\n5240494248,7,2013-01-01,12:13:00,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
})}
问候,,
Lokesh您可以尝试以下方法: 标题正确
{(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"})
})}
{(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": "false"})
})}
标题错误
{(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"})
})}
{(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": "false"})
})}
非常感谢salim,是的,这就是我要找的。但是我需要根据输入参数导出CSV文件名。我需要将csv名称派生为“Networks\u Retail\u 20201008\u 01.csv”,在这里,Network和Retail应该派生自header.from和header.to属性。我已经创建了一个变量来获取这些值,但无法动态派生密钥。确定。。我在下面更新了Lokesh的DW脚本,这将使您获得所需的确切形状。谢谢Salim,是的,CSV文件正在生成预期的名称,但我可以看到CSV文件的标题为空行。是否有一种方法可以在提取时设置header=false,以便内容可以从第一行开始。这应该是一个单独的问题。这也取决于您如何尝试从本问题中描述的转换结束时获得的字符串生成CSV。感谢您的输入,我能够从提供的逻辑获取CSV摘录。但是,请您帮助我根据标题字段动态派生CSV名称/密钥。CSV名称应为“Networks\u Retail\u 20201008\u 1.CSV”和“Networks\u Retail\u 20201008\u 2.CSV”,此处网络和零售应派生自header.from和header.to属性。我已经创建了一个变量来获取这些值,但无法动态派生密钥。我已按预期编辑了答案。请参考。谢谢Lokesh,是的,CSV文件正在生成预期的名称,但我可以看到CSV文件的标题是一个空行。是否有一种方法可以在提取时设置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_1": "7",
"column_2": "2013-01-01",
"column_3": "12:13:00",
"column_4": "2"
}
],
"Networks_Retail_20201011_02.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_1": "7",
"column_2": "2013-01-01",
"column_3": "12:13:00",
"column_4": "2"
}
]
}