使用 FineBI 實時資料直連資料庫的使用者經常會將 FineBI 的儀表板用作企業戰情室展示,因此常常會需要將儀表板進行定時重新整理,FineBI 提供了實現儀表板定時重新整理功能,能夠實現單個儀表板、多個儀表板和單個組件的自動定時重新整理。
儀表板定時重新整理效果,如下圖所示:
單個組件定時重新整理效果,如下圖所示:
1)建立 JS 檔案。
2)將建立好的 refresh.js 檔案放至 FineBI 安裝目錄%FineBI%/webapps/webroot中。
3)呼叫 JS 檔案。
若本文不滿足需求,可聯絡技術支援獲取 BI 預覽自動重新整理範本插件(QQ:800049425)。
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中,如下圖所示:
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 包中。
1)配置完成後啟動 FineBI ,在該儀表板預覽頁面中按 F12 查看網頁原始碼判斷 JS 是否載入成功。儀表板成功載入了定時重新整理的 JS 。如下圖所示:
注:若在 JS 裏面改頻率的話,修改完檔案儲存之後,清除瀏覽器快取就可以,不需要重啓 FineBI 。
2)儀表板效果請參見本章 1.1 節。
多個儀表板定時重新整理的與單個儀表板的操作步驟大體相似,那麼具體應該怎麼操作呢?下面我們來詳細介紹一下。
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 可直接透過編輯儀表板時的連結位址獲取。
5)將 refresh.js檔案put 命令%FineBI%/webapps/webroot下。詳情參見本章 2.1 節。
詳情請參見本章 2.2 節。
1)若查看儀表板的網頁原始碼,每個儀表板都會增加定時重新整理的 JS 。詳情請參見本章 2.3 節。
若想要在儀表板展示時,對某個組件的資料進行定時重新整理,可參考如下操作步驟。
在儀表板編輯頁面按 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.2 節。
1)此時,查看設定的範本,單個組件會實現定時重新整理。若查看範本的網頁原始碼,會增加上述的定時重新整理 JS 。詳情請參見本章 2.3 節。
參考一的思路和方法,將每次修改js檔案新增相關ID值的方式,修改為儀表板元件內容嵌入代碼塊,js檔案決議內容並設定動態重新整理方法。
同上所屬,show.html檔案新增如下代碼塊:
新增一個“正文組件”,內容設定為如下代碼(由於正文組件的內容支援富正文式操作,因此如下代碼必須是一個整體方式對待處理,否則上述的js代碼將無法獲取該設定參數);
true=IsAutoRefresh,10=SecondAutoRefresh