在上一篇關於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腳本的方式會很影響性能.
該文介紹瞭如何通過郵箱附件的方式發送結果集,是非常常用的功能.
希望以上分享能夠幫助到你,如果你有更好的用法和心得,歡迎留言進行更多的互動學習.