Kettle发送邮箱并在正文中以表格形式展示内容[升级版]

在上一篇关于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 = ""+transaction_type+""+value_points+""+value_settle+""+value_cha+"";
}else{
       info = ""+transaction_type+""+value_points+""+value_settle+""+value_cha+"";
}

//新增一列,用于分组聚合
var seq = '1';

(2) 分组_拼接行

此步骤是将一列中的多行数据使用空字符串拼接成一个大的字符串info_new.

分组

(3) JS代码_拼接头部

在info_new基础上拼接html表格的头标签:

//Script here
var content = ""+info_new+"
交易类型积分系统数量结算系统数量差异数量
";
2.3 传入变量供作业中使用
3. 邮件通知
邮件通知

获取QQ邮箱授权码的方式,简单如下图:

获取QQ邮箱授权码
邮件通知

至此,整个通过JS方式拼接Html方式实现邮件正文展示结果集的过程梳理完毕!


下面是之前关于使用Kettle发送邮件的总结:

(1) Kettle发送邮箱并在正文中以表格形式展示内容[基础版]

该文是通过SQL拼接HTML串来实现邮箱正文展示表格.而在文章Kettle性能调优汇总中我曾提过,能用数据库层面实现就尽量用数据库实现,因为JS脚本的方式会很影响性能.

(2) Kettle通过邮箱附件的方式发送数据库报表统计

该文介绍了如何通过邮箱附件的方式发送结果集,是非常常用的功能.

希望以上分享能够帮助到你,如果你有更好的用法和心得,欢迎留言进行更多的互动学习.

你可能感兴趣的:(Kettle发送邮箱并在正文中以表格形式展示内容[升级版])