smartbi之宏代碼
1、報表宏簡介
報表宏是 Smartbi 里面的一項特殊功能,顧名思義,就是基于報表的擴展,目的是為了讓用戶對報表進行自定義的改造,實現特定的功能。報表宏是 JavaScript 的代碼集合體,我們也稱之為“宏模塊”。
1.1、報表宏的作用
Smartbi的報表擁有基本固定的報表展現樣式及可視化的操作按鈕,可以滿足大多數的最終用戶查看及分析數據的需求。而總會有少數用戶,希望針對部分報表進行特殊化的調整,比如調整展現樣式,增加功能按鈕等,而這時就可以發揮報表宏的作用,對特定報表進行自定義處理。
1.2、報表宏的特點
報表宏具有以下特點:
- 報表宏以資源(報表資源、資源包)為應用載體,類似于 Excel 宏是以 Excel 文件為載體。(即報表宏存在且作用于具體某個報表或者資源包里)
- 報表宏使用 JavaScript 語言開發;
- 報表宏是按照事件進行觸發(如報表加載事件、報表刷新事件、參數改變事件、點擊事件等);
- 在同一載體里面的報表宏可以相互引用。
1.3、報表宏的類型
- 客戶端宏:宏的事件由瀏覽器端觸發,模塊里面的宏代碼由瀏覽器端進行處理。客戶端宏主要影響瀏覽器端的展現效果,除了圖形(直接加在圖形對象上的部分宏功能可以對導出生效),其他報表的客戶端宏都不會對導出有效果。
- 服務端宏:宏的事件由服務端觸發,模塊里面的宏代碼由服務端進行處理。服務端宏因為在服務器上運行,對瀏覽器端展現和導出報表都是生效的。
2、報表宏調試
- 客戶端宏調試
基本調試步驟:
1)在報表宏的代碼中加debugger;
2)然后在瀏覽器中按F12打開調試界面(開發者工具);
3)運行報表,代碼即會在debugger處暫停。
Smartbi服務器默認會對返回到客戶端的JavaScript代碼進行壓縮,同時對HTTP Request、Response信息進行加密,為了便于調試,可以在debug模式下訪問Smartbi,即在URL中添加debug=true參數,如:http://IP:PORT/smartbi/vision/index.jsp?debug=true。
- 服務端宏調試
"服務端模塊"的報表宏可在宏控制臺中進行調試,即在宏腳本中通過"logger"對象打印出服務端的日志信息。



可參考:https://wiki.smartbi.com.cn/pages/viewpage.action?smt_poid=43&pageId=69731794
3、報表宏創建方式
Smartbi中報表宏的創建方式分為:報表資源宏編輯、宏資源包、宏代碼庫。
- 報表資源宏編輯:在單獨的報表資源上右鍵進入,只對所選報表生效,適用于對某張特定報表實現特定功能
- 宏資源包:對同一類報表生效,可以指定多張生效的報表,適用于多張報表使用宏實現同一個功能
- 宏代碼庫:主要用來定義一些公共的宏方法,將一些使用頻率較高的方法定義為公共的方法,便于代碼重用

“宏編輯”界面主要分為以下幾個區域:
- 模塊區:該區用于通過新建模塊,在模塊上定制宏。包含服務端模塊、客戶端模塊和跳轉規則向導。
- 幫助區:該區用于為當前模塊根據不同的對象和類型顯示系統中定義的對象和方法。
- 屬性區:該區用于顯示當前模塊的相關屬性。
- 編輯區:該區用于為當前模塊進行宏的編輯,宏代碼遵循JavaScript語法規范。
- 操作區:該區用于顯示對當前模塊宏代碼的功能按鈕。其中“禁用”表示該宏代碼是否禁用,默認不勾選。
4、客戶端宏
- 客戶端宏主要影響瀏覽器端的展現效果,除了圖形(直接加在圖形對象上的部分宏功能可以對導出生效),其他報表的客戶端宏都不會對導出有效果。
- 客戶端宏是在瀏覽器端運行,所以語法是JavaScript的語法,需要有前端開發的經驗才可能靈活編寫,調試也是使用瀏覽器前端調試即可。
4.1、客戶端宏原理
Smartbi的報表從打開到完整展現的過程,會經歷一系列的步驟(事件),比如打開報表,刷新報表,參數改變等。在進行這些步驟的前后,通過加入擴展的入口,使得程序在執行這些步驟前后可以加載對應事件的自定義宏代碼,以達到在對應事件中方便、準確地修改報表的目的。
如下圖所示,報表打開后會觸發宏代碼,刷新數據后會觸發宏代碼,參數變更后同樣會觸發宏代碼。

4.2、客戶端宏接口說明
在Smartbi中,為不同類型的報表【電子表格】、【透視分析】、【即席查詢】等提供了客戶端處理的事件。
按照Smartbi報表類型,客戶端報表宏分為電子表格,即席查詢,透視分析等,其中,application、event 和 chartView 為多種不同報表類型客戶端宏的共有對象,部分對象成員的出現是有前置條件的,具體介紹如下:

以下接口關系圖展現的包含關系,表示被包含的對象為包含的對象的成員變量。例如chartView包含chart,表示chart為chartView的成員變量。
4.2.1、電子表格宏代碼全局對象
電子表格報表宏中,各對象之間的包含關系如下圖:

電子表格報表宏下部分對象成員詳細介紹如下表:

4.2.2、即席查詢宏代碼全局對象
即席查詢報表宏中,各對象之間的包含關系如下圖:

即席查詢報表宏下部分對象成員詳細介紹如下表:

4.2.3、透視分析宏代碼全局對象
透視分析報表宏中,各對象之間的包含關系如下圖:

透視分析報表宏下部分對象成員詳細介紹如下表:

5、服務端宏
Smartbi提供服務端宏功能,服務端宏表示宏的事件在服務端(應用服務器)進行處理,所以可以實現客戶端宏不能實現的效果(如報表導出生效等)。在Smartbi中,只為【多維分析】【電子表格】【透視分析】提供了服務端處理的事件。
服務端宏底層原理和自定義計劃任務腳本一樣的,都是使用了 Rhino 工具包,語法遵循Javascript 語法規范,能夠引用 Java 類并創建 Java 對象來使用。
注意:服務端宏因為在服務器上運行,對瀏覽器端展現和導出報表都是生效的。
5.1、 服務端宏對象
要根據“幫助”欄提供的API使用宏對象。以電子表格服務端宏為例:
- HO_Application下的為全局對象,可直接在服務端宏中使用
- logger對象用于打印日志,方便調試,其對應HO_Logger
- spreadsheetReport對象為電子表格服務端宏對象,其對應HO_SpreadsheetReport
- HO_SpreadsheetReport的sheets屬性對HO_Spreadsheet數組
- HO_Spreadsheet的getCell()方法可以獲取HO_SpreadsheetReportCell


浙公網安備 33010602011771號