專刊內文

當前位置:首頁>專刊分享>內文

瀏覽次數 : 228



EEPCloud的報表派送功能

訊光科技/張育誠

前言

傳統資訊系統的派送報表功能,都是以人工的方式定時手動去查詢資料,接著分別發送給需要的對象,這樣的手續不但繁瑣浪費時間,且容易有人工遺漏的疑慮。透過EEPCloud的排程工具,除了可定時去執行想要執行的後端商業邏輯外,現在又新增了報表派送功能,可以快速的產生WordExcel報表,並自動派送到指定的信箱,只需要透過屬性設定或是簡易的JS程式就可以完成。

 

Excel報表派送

這裡就以出貨日報表為例,來說明Excel報表派送如何設定。(假設你已經將"出貨日報表"匯入到iCoder中了)

1. 在排程設定的功能中增加一項任務,設定日期與時間或週期,如下:

如果印表條件是固定的,直接使用sendExcelsendWord這兩個寫好的系統後端程序(Server Method)來發送,如下:

出貨日報表,每天17:30自動發送給指定的eMail帳號:

2. 系統後端程序sendExcelsendWord的參數如下:

設定要發送的報表名稱(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程序,即可得到以下的EMAILExcel報表:

 

多對象的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新增的報表派送功能,不僅結合了原本匯出ExcelWord的方便機制,且透過排程設定可以讓系統自動發送,在您指定的時間執行派送至指定的電子信箱。預設的sendExcelsendWord方法可以將簡單的查詢條件與對象透過屬性設定就可快速完成,也可以透過後端程序來動態設定派送條件,來滿足發送動態的內容與對象。iCoder平台結合了使用EEPCloud的報表派送功能後,除了大量節省用戶人為操作時間成本外,更讓企業的報表方案更加自動化與效率化,更能滿足企業未來智能化的要求。