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腳本如下:

//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郵箱授權碼的方式,簡單如下圖:

至此,整個通過JS方式拼接Html方式實現郵件正文展示結果集的過程梳理完畢!


下面是之前關於使用Kettle發送郵件的總結:

(1) Kettle發送郵箱並在正文中以表格形式展示內容[基礎版]

該文是通過SQL拼接HTML串來實現郵箱正文展示表格.而在文章Kettle性能調優彙總中我曾提過,能用數據庫層面實現就儘量用數據庫實現,因爲JS腳本的方式會很影響性能.

(2) Kettle通過郵箱附件的方式發送數據庫報表統計

該文介紹瞭如何通過郵箱附件的方式發送結果集,是非常常用的功能.

希望以上分享能夠幫助到你,如果你有更好的用法和心得,歡迎留言進行更多的互動學習.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章