使用Mule 4在单个电子邮件中动态附加多个csv文件

问题描述

我需要为每笔交易提取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"
    }
  ]
}