美文网首页技术干货
Kettle发送邮箱并在正文中以表格形式展示内容[升级版]

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

作者: GuangHui | 来源:发表于2019-01-12 18:42 被阅读236次

    在上一篇关于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通过邮箱附件的方式发送数据库报表统计

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

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

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/namcdqtx.html