在集成环境中,经常需要在smartbi创建报表后做一些扩展,有以下2种方式实现。
1、创建扩展包
请参考“插件开发框架”,创建自己的扩展包,扩展包写好后,编译打包并参考“扩展包部署”文档部署该扩展包。通过后端扩展或前端文件扩展修改,电子表格资源只能通过后端文件扩展。
后端扩展方法:
java api 请参考:javaapi
1、实现:smartbi.catalogtree.ICatalogTreeListener 接口
示例:
2、注册Listener实现。
module类,在服务器启动的时候注册,activate方法会在服务器启动的时候执行;module类的写法和配置可参考 第六课:高级应用 之六:自定义Module 章节。
以下说明前端扩展方法:
1、找到报表对象的前端处理文件
- 灵活分析:queryView.js
- 仪表、地图分析:dashboard.js
- 多维分析:OlapQueryView.js
- 透视分析:Insight.js
- 组合分析:CombinedQuery.js
- 可视化查询、sql查询等所有查询:BusinessView.js
- 门户定制:PageWizardAction.js
- 业务主题:BusinessThemeView.js
2、找到报表对象的前端保存方法
- 灵活分析: doSave方法
- 仪表、地图分析: save方法
- 多维分析: saveOlapQuery方法
- 透视分析: saveQuery方法
- 组合分析: saveAsCallback方法,组合分析是基于灵活分析创建的。
- 可视化查询、sql查询等所有查询:save方法
- 门户定制:savePage方法
- 业务主题:elemBtnSave_click_handler方法
3、扩展报表对象的前端保存方法
请参考“第四课:如何修改Smartbi JS文件”,扩展报表保存对象的方法,示例:
QueryView.prototype.saveQueryCallback_new = QueryView.prototype.saveQueryCallback; QueryView.prototype.saveQueryCallback = function(ret, dialog) { this.saveQueryCallback_new(ret, dialog); var folderId = ret.folderId var ret = util.remoteInvokeEx("TestService", "saveAs", [folderId]); }
4、实现报表保存新的后台逻辑
请参考“第六课:高级应用”之六:“自定义Module”创建自己的 java 文件,并在其中写好保存扩展的方法。示例:
public class TestModule implements IModule{ private static final Logger LOG = Logger.getLogger(TestModule.class); private static TestModule instance; public static TestModule getInstance() { if (instance == null) instance = new TestModule(); return instance; } public void activate() { } public void saveAs(String folderId){ // 实现自己的业务保存逻辑..... } }
5、在步骤4中调用步骤4实现的方法
在前端 JavaScript 中调用后台方法,示例代码如下。
QueryView.prototype.saveQueryCallback_new = QueryView.prototype.saveQueryCallback; QueryView.prototype.saveQueryCallback = function(ret, dialog) { this.saveQueryCallback_new(ret, dialog); var folderId = ret.folderId var ret = util.remoteInvokeEx("TestService", "saveAs", [folderId]); if (!ret.succeeded) { modalWindow.showServerError(ret); } }