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

简介: 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 = "<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脚本的方式会很影响性能.


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

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

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

相关文章
|
5月前
|
存储 人工智能 Java
【程序设计】做一个发送系统邮件的功能,如何设计数据表? 转至元数据结尾
重构系统邮件发送旨在实现统一的邮件发送功能,通过公共API提供服务。设计包括两个核心数据表:`mail` 表用于存储邮件基本信息,如邮件ID、业务类型、发送者、标题、内容、附件信息、发送状态和时间戳;`mail_receiver` 表记录邮件接收者信息,包括邮件ID、接收者邮箱、接收者类型、发送状态和重试次数。为了优化查询性能,建议创建`Email_Content`表,将`content`和`attach_file`从`Email`表中分离,以减少主表大小。这有助于提高主表的查询速度,并通过定期的数据结转策略,确保热表只存储最近的数据。
102 0
|
4月前
|
存储 JavaScript 前端开发
文本,三步走构思,富文本点击提交能够存储到数据库当中(下),最快的方法,还是会看资料,因此会整合资料最好,直接看资料最快,因为是JWT的资料,我们要设置好登录的内容,看登录的地方怎样写的
文本,三步走构思,富文本点击提交能够存储到数据库当中(下),最快的方法,还是会看资料,因此会整合资料最好,直接看资料最快,因为是JWT的资料,我们要设置好登录的内容,看登录的地方怎样写的
|
6月前
|
JSON 前端开发 Java
基于Java爬取微博数据(五) 补充微博正文列表图片 or 视频 内容
【5月更文挑战第15天】基于Java爬取微博数据(五) 补充微博正文列表图片 or 视频 内容
|
前端开发 JavaScript 数据库
layui框架实战案例(20):常用条件判断和信息展示技巧(图片预览、动态表格、短信已读未读、链接分享、信息脱敏、内置框架页)
layui框架实战案例(20):常用条件判断和信息展示技巧(图片预览、动态表格、短信已读未读、链接分享、信息脱敏、内置框架页)
570 0
|
6月前
|
搜索推荐 定位技术 数据安全/隐私保护
方便、免费的PDF在线处理网站汇总:PDF合并、文字编辑、页面提取与删除、格式转换…
方便、免费的PDF在线处理网站汇总:PDF合并、文字编辑、页面提取与删除、格式转换…
136 1
|
Python
Gne Online:通用新闻网页正文在线提取
Gne Online:通用新闻网页正文在线提取
180 0
|
Web App开发 开发者
GNE v0.04版更新,支持提取正文图片与源代码
GNE v0.04版更新,支持提取正文图片与源代码
153 0
|
XML 消息中间件 JavaScript
服务端自定义生成PDF的几种方案
服务端自定义生成PDF的几种方案
|
开发工具
使用wxjava实现发表内容、预览信息以及推送文章
使用wxjava实现发表内容、预览信息以及推送文章
301 0
使用wxjava实现发表内容、预览信息以及推送文章
|
小程序 API 数据库
小程序中读取腾讯文档的表格数据
小程序中读取腾讯文档的表格数据
小程序中读取腾讯文档的表格数据