我的要求是从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变换器的对象。
我正在关注link以及@Tyrone Villaluna的回复。我根据批量提交大小(30)收到多封电子邮件,如何获得包含整个记录的单个附件的电子邮件?它现在发送多个电子邮件,如果提交大小超过记录(比如200),则由于提交大小,电子邮件不会触发。我不确定db中是否存在记录。
<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<Map> 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>
答案 0 :(得分:1)