EEPCloud的報表派送功能
前言
傳統資訊系統的派送報表功能,都是以人工的方式定時手動去查詢資料,接著分別發送給需要的對象,這樣的手續不但繁瑣浪費時間,且容易有人工遺漏的疑慮。透過EEPCloud的排程工具,除了可定時去執行想要執行的後端商業邏輯外,現在又新增了報表派送功能,可以快速的產生Word或Excel報表,並自動派送到指定的信箱,只需要透過屬性設定或是簡易的JS程式就可以完成。
Excel報表派送
這裡就以出貨日報表為例,來說明Excel報表派送如何設定。(假設你已經將"出貨日報表"匯入到iCoder中了)
1. 在排程設定的功能中增加一項任務,設定日期與時間或週期,如下:
如果印表條件是固定的,直接使用sendExcel或sendWord這兩個寫好的系統後端程序(Server Method)來發送,如下:
出貨日報表,每天17:30自動發送給指定的eMail帳號:
2. 系統後端程序sendExcel與sendWord的參數如下:
設定要發送的報表名稱(id)、資料來源(remoteName)、對象郵件(to)、信件主旨(subject)以及過濾條件(whereStr,可以設定多個條件)。
3. 排程模式設定為每天,時間為下午17:30執行,系統就會在每日下午17:30發送到指定的信箱,如果你等不及要立即測試是否可以發送成功,可以按下排程設定下方的"測試"按鈕,指定的信箱即可收到如下的eMail:
附件打開之後,就可以看到這個出貨日報表的Excel格式:
動態條件的Excel報表派送
上例中的報表條件是固定的($TODAY),如果你的報表條件沒有這麼簡單,可以自行開發一個Server Method來自行控制所有的報表派送參數。
我們就以出貨統計表作例子,說明如下:
1. 首先在"出貨單"的Server模組中,設計一個mySendExcel的後端程序來執行sendExcel.call()的方法,如下:
exports.mySendExcel = function(param, callback)
{
var excelParam = param; //取得排程設定參數
excelParam.id = '出貨統計表'; // 設定Excel的名稱
excelParam.remoteName = '出貨單.出貨單'; //資料來源
excelParam.to = 'ken@infolight.com'; //設定對方的eMail
excelParam.subject = '出貨統計表自動派送'; //信件主旨
var firstday = this.getDateValue('firstday').Format('yyyy/MM/dd'); //本月第一天
var lastday = this.getDateValue('lastday').Format('yyyy/MM/dd'); //本月最後一天
excelParam.whereItems = [{field: '日期', operator: '>', value: firstday}, {field: '日期', operator: '<', value: lastday} ]; //可以自行定義過濾的Where條件
this.getServerModule('SystemTable').sendExcel.call(this, excelParam, callback);
};//送出報表
2. 如下設定了"出貨單.mySendExcel"方法(程序可以用選的),並設定周間每天14:00發送:
3. 透過"測試"按鈕或每周間的14:00的執行此mySendExcel程序,即可得到以下的EMAIL及Excel報表:
多對象的Word報表派送
如果派送的對象有可能不只一個時,而且內容又不同時,同樣可以透過自訂的後端程序控制,在程序中增加迴圈多筆派送,即可將大量繁瑣的動作一次搞定。以下就以對帳單為例,且要改以Word的格式來派送,設定如下:
1. 首先在"出貨單"的Server模組中,設計一個mySendWord的後端程序來執行sendExcel.call()的方法,如下:
exports.mySendWord = function(param, callback){
var async = this.getModule('async'); //取得一個逐筆非同步執行的對象
var dm = this; //this會改變須事先記下來
var clientInfo = dm.clientInfo;
var firstday = this.getDateValue('firstday').Format('yyyy/MM/dd'); //本月第一天
var lastday = this.getDateValue('lastday').Format('yyyy/MM/dd'); //本月最後一天
dm.queryRaw(clientInfo, clientInfo.database, "select distinct 客戶編號,電子信箱 from 出貨單 where 日期 between '"+firstday+"' and '"+lastday+"'", {}, function(err,rows){
async.eachSeries(rows, function(row, cb) { // 每個客戶執行一次
var wordParam = param; //取得排程設定參數
wordParam.id = '對帳單'; // word的報表名稱
wordParam.remoteName = '對帳單.客戶資料表';
wordParam.to = row.電子信箱; // 聯絡人的信箱
wordParam.subject = '對帳單';
wordParam.type = 'exportWordLoop'; // 設定輸出為Word
wordParam.whereItems = [ {field: '客戶編號', operator: '=', value: row.客戶編號} ]; // 設定該客戶的對帳單條件
dm.getServerModule('SystemTable').sendWord.call(dm, wordParam, cb);
}, callback);
//callback(err, null);
});
};
2. 如下設定了"出貨單.mySendWord"方法(程序可以用選的),並設定每月的25日早上08:00執行發送:
3. 透過上述的範例,可以根據不同客戶該月份的出貨單,整理出對帳單後。
個別發送至不同的客戶信箱中。
結語
EEPCloud新增的報表派送功能,不僅結合了原本匯出Excel或Word的方便機制,且透過排程設定可以讓系統自動發送,在您指定的時間執行派送至指定的電子信箱。預設的sendExcel與sendWord方法可以將簡單的查詢條件與對象透過屬性設定就可快速完成,也可以透過後端程序來動態設定派送條件,來滿足發送動態的內容與對象。iCoder平台結合了使用EEPCloud的報表派送功能後,除了大量節省用戶人為操作時間成本外,更讓企業的報表方案更加自動化與效率化,更能滿足企業未來智能化的要求。