一、概述
1.1 預期效果
使用 FineBI 實時資料直連資料庫的使用者經常會將 FineBI 的儀表板用作企業戰情室展示,因此常常會需要將儀表板進行定時重新整理,FineBI 提供了實現儀表板定時重新整理功能,能夠實現單個儀表板、多個儀表板和單個組件的自動定時重新整理。
儀表板定時重新整理效果,如下圖所示:
單個組件定時重新整理效果,如下圖所示:
二. 方法一:引入refresh.js並指定ID值方式
2.1 實現思路
1)建立 JS 檔案。
2)將建立好的 refresh.js 檔案放至 FineBI 安裝目錄%FineBI%/webapps/webroot中。
3)呼叫 JS 檔案。
若本文不滿足需求,可聯絡技術支援獲取 BI 預覽自動重新整理範本插件(QQ:800049425)。
2.2 單個儀表板定時重新整理
2.2.1 建立 JS 檔案
1)儀表板的定時重新整理透過客製的 JS 來實現,複製如下代碼建立 refresh.js檔案。
setTimeout(function () {
var b =document.title;
var a =BI.designConfigure.reportId;//獲取儀表板id
//對儀表板id進行判斷,實現指定儀表板重新整理
if (a=="7193a5c87fbb4915b8893e07a0c6759c") {
setInterval(function () {
BI.SharingPool.put("controlFilters", BI.Utils.getControlCalculations());
//Data.SharingPool.put("controlFilters", BI.Utils.getControlCalculations());
BI.Utils.broadcastAllWidgets2Refresh(true);
}, 5000000);//5000000為定時重新整理的頻率,單位ms
}
}, 2000)
其中在對儀表板 ID 進行判斷時,需要修改判斷條件為自身需要重新整理的儀表板 ID;且 5000000 為定時重新整理的間隔時間,單位毫秒,根據自身需要進行修改,通常應大於 300000 。
2)修改 JS 檔案定時重新整理的間隔時間。
如果資料不是每秒都更新。建議 JS 設定重新整理時間高於 5 分鐘,即定時重新整理的間隔時間應大於 300000 。
否則會引起當機,記憶體使用量激增等問題,且由於工程有5分鐘的快取時間,這5分鐘裏一直在讀快取,所以當重新整理時間間隔小於 5 分鐘時,資料可能不變化。
如果要設定秒級的重新整理時間。需要在開啓實時資料的同時,關閉快取來規避 5 分鐘的快取時間。
管理者可在「管理系統>系統管理>BI 參數>快取設定」,關閉對應按鈕,並「儲存」後生效,設定路徑如下圖所示:
3)獲取儀表板 ID ,修改 JS 檔案儀表板 ID 。
儀表板 ID 可直接透過編輯儀表板時的連結位址獲取,比如建立儀表板時的連結位址為
http://localhost:37799/webroot/decision/v5/design/report/7193a5c87fbb4915b8893e07a0c6759c/edit,則該儀表板 ID 為7193a5c87fbb4915b8893e07a0c6759c,如下圖所示:
獲取後,在判斷 ID 處修改a=="儀表板ID"。
4)關閉 FineBI 。
5)將建立好的refresh.js檔案放至 FineBI 安裝目錄%FineBI%/webapps/webroot中,如下圖所示:
2.2.2 呼叫 JS 檔案
1)在%FineBI%/webapps/webroot/WEB_INF/lib下的fine-bi-adapter-5.0.jar( 5.1 版本為 fine-bi-adapter-5.1.jar )中找到show.html,如下圖所示:
2)在該 HTML 檔案中插入下面的代碼呼叫之前建立的refresh.js檔案,如下圖所示:
插入代碼位置如下圖所示:
修改完成後儲存至該 JAR 包中。
2.2.3 效果查看
1)配置完成後啟動 FineBI ,在該儀表板預覽頁面中按 F12 查看網頁原始碼判斷 JS 是否載入成功。儀表板成功載入了定時重新整理的 JS 。如下圖所示:
注:若在 JS 裏面改頻率的話,修改完檔案儲存之後,清除瀏覽器快取就可以,不需要重啓 FineBI 。
2)儀表板效果請參見本章 1.1 節。
2.3 多個儀表板定時重新整理
多個儀表板定時重新整理的與單個儀表板的操作步驟大體相似,那麼具體應該怎麼操作呢?下面我們來詳細介紹一下。
2.3.1 建立 JS 檔案
1)建立refresh.js檔案,內容與本章 2.1 節一致,需要設定儀表板 ID 及定時重新整理時間,定時重新整理頻率設定及注意事項請參見本文 2.1 節。僅在判斷儀表板 ID 的地方,填入需要設定的多個儀表板的 ID 判斷。
setTimeout(function () {
var b =document.title;
var a =BI.designConfigure.reportId;//獲取儀表板id //對儀表板id進行判斷,實現指定範本重新整理
if (a=="d5405b13bfeb454081be9627a9cfc97f" || a=="e1dcb1a61d6947e1adedced59bde9533") {
setInterval(function () {
BI.SharingPool.put("controlFilters", BI.Utils.getControlCalculations());
//Data.SharingPool.put("controlFilters", BI.Utils.getControlCalculations());
BI.Utils.broadcastAllWidgets2Refresh(true);
}, 5000000);//5000000為定時重新整理的頻率,單位ms
}
}, 2000);
比如上述代碼中,設定的即為“d5405b13bfeb454081be9627a9cfc97f”和"e1dcb1a61d6947e1adedced59bde9533"兩個儀表板的 ID 判斷,還想增加的話,在判斷 ID 處繼續加入|| a=="範本ID"的條件即可。
3)儀表板 ID 可直接透過編輯儀表板時的連結位址獲取。
4)關閉 FineBI 。
5)將 refresh.js檔案put 命令%FineBI%/webapps/webroot下。詳情參見本章 2.1 節。
2.3.2 呼叫 JS 檔案
詳情請參見本章 2.2 節。
2.3.3 效果查看
1)若查看儀表板的網頁原始碼,每個儀表板都會增加定時重新整理的 JS 。詳情請參見本章 2.3 節。
2)儀表板效果請參見本章 1.1 節。
2.4 單個組件定時重新整理
若想要在儀表板展示時,對某個組件的資料進行定時重新整理,可參考如下操作步驟。
2.4.1 建立 JS 檔案
1)獲取定時重新整理組件的 ID 值在儀表板編輯頁面按 F12開啟瀏覽器控制檯,選擇Console頁面,輸入 BI.designModel.widgets,回車,點選...獲取所有的組件資訊,點選組件 ID 後...獲取該組件的詳細資訊,如下圖所示:
點選下拉框,此時可以根據組件 ID 下方的name獲取找到需要設定定時重新整理的組件,獲取該組件的 KEY 值。本範例對未命名組件 1 進行定時重新整理, ID 為f83b0b5ec717bf18,如下圖所示:
2)獲取組件所在儀錶板 ID 。
從路徑中獲取該儀錶板 ID 為7193a5c87fbb4915b8893e07a0c6759c,如下圖所示:
3)建立refresh.js檔案,並設定儀錶板 ID 及定時重新整理的頻率,定時重新整理頻率設定及注意事項請參見本文 2.1 節。
檔案內容如下所示:
setTimeout(function () {
var b =document.title;
var a =BI.designConfigure.reportId;//獲取儀表板id //對儀表板id進行判斷,實現指定儀表板重新整理
if (a=="fdcc1cb3b96445fcba18fdf27684740b") {
setInterval(function () {
BI.Broadcasts.send(BICst.BROADCAST.REFRESH_PREFIX + "b07e0e200514dfcb"); //重新整理指定組件
}, 5000000);
//5000000為定時重新整理的頻率,單位ms
}
}, 2000);
與範本定時重新整理 JS 相比,增加了指定組件的判斷。對範本 ID 進行判斷和重新整理指定組件中需要修改範本 ID 和組件 ID 為自身需要重新整理的對應 ID 值。本範例中修改a=="儀表板 ID "和 BI.Broadcasts.send(BICst.BROADCAST.REFRESH_PREFIX + "組件 ID ")
注:獲取範本 ID 後需要關閉 BI 再進行操作。
4)將refresh.js檔案put 命令%FineBI%/webapps/webroot下。
2.4.2 呼叫 JS 檔案
詳情參見本章 2.2 節。
2.4.3 效果查看
1)此時,查看設定的範本,單個組件會實現定時重新整理。若查看範本的網頁原始碼,會增加上述的定時重新整理 JS 。詳情請參見本章 2.3 節。
2)儀表板效果請參見本章 1.1 節。
三、前端非侵入式靈活配置
參考一的思路和方法,將每次修改js檔案新增相關ID值的方式,修改為儀表板元件內容嵌入代碼塊,js檔案決議內容並設定動態重新整理方法。
3.2 具體過程
3.2.1 js優化
同上所屬,show.html檔案新增如下代碼塊:
3.2.2 儀表板視覺化參數配置
新增一個“正文組件”,內容設定為如下代碼(由於正文組件的內容支援富正文式操作,因此如下代碼必須是一個整體方式對待處理,否則上述的js代碼將無法獲取該設定參數);
true=IsAutoRefresh,10=SecondAutoRefresh