mule数据映射器,带有文件附件和smtp

时间:2015-07-08 23:38:17

标签: mule

我的要求是从db获取数据,转换为csv格式,发送包含csv附件完整数据的电子邮件。

我的骡子批次流程如下。

<batch:job name="status-csv-smtp">
<batch:input>
    <db:select config-ref="Database_Configuration" doc:name="Database">
        <db:parameterized-query><![CDATA[select account_name , account_action ,employeed_id ,paytype_id , client_id , int_status , error_msg , logged_at from sfdc_status]]></db:parameterized-query>
    </db:select>
</batch:input>
<batch:process-records>
    <batch:step name="Batch_Step">
        <json:object-to-json-transformer doc:name="Object to JSON"/>            
        <batch:commit size="200" doc:name="Batch Commit">
            <data-mapper:transform config-ref="JSON_To_CSV" doc:name="JSON To CSV"/>
        </batch:commit>
    </batch:step>
    <batch:step name="Batch_Step1">
        <set-attachment attachmentName="status.csv" value="#[payload]" contentType="text/html" doc:name="SFDC Status"/>
        <smtp:outbound-endpoint host="${smtp.host}" port="${smtp.port}" connector-ref="SMTP" to="${smtp.to}" from="${smtp.from}"  subject="Upload status" responseTimeout="10000" doc:name="SMTP"/>
    </batch:step>
</batch:process-records>
<batch:on-complete>
    <logger message="#[message.payload]" level="INFO" doc:name="Logger"/>
</batch:on-complete>

这里的问题是 1)如果100条记录,100条邮件正在触发文件中的空数据 2)如果我将smtp和附件移动到完成,我无法将csv文件作为附件 3)如何将有效载荷数据从步骤传递到完成? recordVars不起作用。

修改

我在DataMapper中选择选项之后出现了数据库映射问题,因为从输出中重新创建元数据能够获得正确的数据。现在删除了json变换器的对象。 mapper

我正在关注link以及@Tyrone Villaluna的回复。我根据批量提交大小(30)收到多封电子邮件,如何获得包含整个记录的单个附件的电子邮件?它现在发送多个电子邮件,如果提交大小超过记录(比如200),则由于提交大小,电子邮件不会触发。我不确定db中是否存在记录。

batch

<batch:job name="status-csv-smtp">
<batch:input>
    <db:select config-ref="PSI_Database_Configuration" doc:name="Database">
        <db:parameterized-query><![CDATA[select account_name , account_action ,employeed_id ,paytype_id , client_id , int_status , error_msg , logged_at from sfdc_status]]></db:parameterized-query>
    </db:select>
</batch:input>
<batch:process-records>
    <batch:step name="Batch_Step">
        <batch:commit size="30" doc:name="Batch Commit">
            <data-mapper:transform config-ref="List_Map__To_CSV_1List_Map__To_CSV_2" doc:name="List&lt;Map&gt; To CSV"/>
        <set-attachment attachmentName="status.csv" value="#[message.payload]" contentType="text/html" doc:name="SFDC Status"/>
        <smtp:outbound-endpoint host="${smtp.host}" port="${smtp.port}" connector-ref="SMTP" to="${smtp.to}" from="${smtp.from}"  subject="Upload status" responseTimeout="10000" doc:name="SMTP"/>
        </batch:commit>
    </batch:step>
</batch:process-records>
<batch:on-complete>         
    <logger message="#[payload.processedRecords],[payload.failedRecords] #[payload.elapsedTimeInMillis]" level="INFO" doc:name="Logger"/>
</batch:on-complete>

1 个答案:

答案 0 :(得分:1)

  1. 您是否尝试将Batch_Step1的所有组件移动到Batch_Step的批量提交中?我认为批量提交正在清除记录(虽然不是特别肯定)
  2. 是的,记录数据(包括流量变量)在批次完成时确实不可用。你只会在这里看到摘要。希望将来的版本可以使用。
  3. 你可以尝试一种肮脏的方法。在批处理步骤中,将数据存储在缓存中(使用消息rootId作为键)或静态变量,然后在完成时将其恢复。