在上一篇关于Kettle发送邮件并在正文中以表格形式展示内容的文章中,已经提到Kettle邮箱正文中支持HTML格式,要在邮箱正文中展示表格,那就行拼出HTML,然后扔到邮箱正文中.
方法就是这么简单直接,上一篇文章中拼接HTML是在数据库SQL查询时完成的,而这次咱尝试使用Kettle支持的JavaScript脚本来完成.下面就结合一个小的需求案例,来说明一下.
一. 需求说明
结算系统每天实时接收积分系统推送过来的交易数据,现在需要按照交易类型分组统计检查两个系统之间的数据差异.邮件正文展示效果如下:
邮件正文展示效果
二. 实现过程
1. 作业概览
作业概览
2. 转换-邮箱正文准备
转换-邮箱正文准备
2.1 统计数据准备
统计数据准备
(1) 表输入-积分系统:
SELECT 1001 AS transaction_type_p,10001 AS value_p FROM DUAL UNION ALL SELECT 1002,20001 FROM DUAL UNION ALL SELECT 1003,20001 FROM DUAL UNION ALL SELECT 1007,70001 FROM DUAL UNION ALL SELECT 1008,80001 FROM DUAL
(2) 表输入-清算系统:
SELECT 1001 AS transaction_type_s,10001 AS value_s FROM DUAL UNION ALL SELECT 1002,20001 FROM DUAL UNION ALL SELECT 1003,30001 FROM DUAL UNION ALL SELECT 1004,40001 FROM DUAL UNION ALL SELECT 1005,50001 FROM DUAL
(3) 记录集连接:
注意: 这里使用的全连接(FULL OUTER),另外使用"记录集连接"前要对前面的数据根据"连接列"进行排序.
记录集连接
2.2 数据拼接html
(1) JS代码_行拼接
此步骤是数据准备过程中最核心的一步,将多列转成一列.
JS代码
JS脚本如下:
//Script here var transaction_type; if(transaction_type_p == null){ transaction_type = String(transaction_type_s); }else{ transaction_type = String(transaction_type_p); } var value_points; if(value_p == null){ value_points = 0; }else{ value_points = value_p; } var value_settle; if(value_s == null){ value_settle = 0; }else{ value_settle = value_s; } var info; var value_cha = value_points - value_settle; //多行拼接成一列 if(value_cha == 0){ info = "<tr><td>"+transaction_type+"</td><td>"+value_points+"</td<td>"+value_settle+"</td><td>"+value_cha+"</td></tr>"; }else{ info = "<tr style='color:red'><td>"+transaction_type+"</td<td>"+value_points+"</td><td>"+value_settle+"</td><td>"+value_cha+"</td</tr>"; } //新增一列,用于分组聚合 var seq = '1';
(2) 分组_拼接行
此步骤是将一列中的多行数据使用空字符串拼接成一个大的字符串info_new.
分组
(3) JS代码_拼接头部
在info_new基础上拼接html表格的头标签:
//Script here var content = "<table border='1'><tr><th>交易类型</th><th>积分系统数量</th<th>结算系统数量</th><th>差异数量</th></tr>"+info_new+"</table>";
2.3 传入变量供作业中使用
3. 邮件通知
邮件通知
获取QQ邮箱授权码的方式,简单如下图:
获取QQ邮箱授权码
邮件通知
至此,整个通过JS方式拼接Html方式实现邮件正文展示结果集的过程梳理完毕!
下面是之前关于使用Kettle发送邮件的总结:
(1) Kettle发送邮箱并在正文中以表格形式展示内容[基础版]
该文是通过SQL拼接HTML串来实现邮箱正文展示表格.而在文章Kettle性能调优汇总中我曾提过,能用数据库层面实现就尽量用数据库实现,因为JS脚本的方式会很影响性能.
该文介绍了如何通过邮箱附件的方式发送结果集,是非常常用的功能.
希望以上分享能够帮助到你,如果你有更好的用法和心得,欢迎留言进行更多的互动学习.