需要知道的特性:可以在module中直接引用公共组件,譬如dao(知识库操作)、state(会话状态)、catalogtree(资源树操作)、usermanager(用户管理),常用组件对应的接口类型见扩展插件开发基础(内含目录及配置文件介绍)里的说明,如下面示例就有引用catalogtree组件(自定义module里面定义了catalogTreeModule属性)。
package smartbi.framework; /** * 模块接口定义。 * 每个模块必须有一个对象实现这个接口,这个对象称为模块控制对象; * 除了实现这个接口,模块控制对象还应该实现一个服务定义接口。所以它的主要责任包括: * 1)作为模块的激活器 * 2)作为对外的服务对象 */ public interface IModule { void activate();//模块控制对象自己激活自己 } |
前端js使用util.remoteInvokeEx/remoteInvoke (className, methodName, paramArray, callback, that, headers) 方法调用,其中remoteInvokeEx如果同步请求出现异常会自动弹窗提示,参数说明:
className:配置再applicationContext.xml中注册到rmi中的名称,譬如下面示例中就是ExtSample8Service
methodName:要请求module中的哪个方法
paramArray:上面方法接收的参数数组,数组中的第一个对应方法的第一个参数,依次类推
callback:回调函数,请求返回执行,如果不传递此参数代表同步请求
that:callback里的this对象
headers:请求头信息,譬如:json对象,譬如{If-Modified-Since:0}
可执行示例请见宏代码中执行sql语句。
//以下示例只是说明用法,实际缺少很多上下文环境,并不能运行 //同步请求方式 var ret = util.remoteInvoke("DashboardService", "getParamValueFromDashboard", [this.clientId, paramId]); if(ret.succeeded) { return ret.result; } else { modalWindow.showServerError(ret); } //异步请求方式 var ret = util.remoteInvoke("DashboardService", "getParamValueFromDashboard", [this.clientId, paramId], function(ret){ if(ret.succeeded){ var result = ret.result; //getParamValueFromDashboard方法返回的结果,如果是服务端返回的是对象,这个就是个json对象 } }, this); |
3、示例说明
打开"http://localhost:8080/smartbi/vision/test/extsample8.html"并点击页面中的按钮,将会看到类似下面的结果:
修改Spring声明文件applicationContext.xml 将自定义Module对象extSample8Service配置到扩展插件的spring声明文件中。通过自定义Module引用系统内部模块,实现系统内部方法的调用。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> <beans> <bean id="rmi" class="smartbi.framework.rmi.RMIModule" factory-method="getInstance"> <property name="modules"> <map> <entry><key><value>ExtSample8Service</value></key><ref bean="extSample8Service" /></entry> </map> </property> </bean> <bean id="extSample8Service" class="smartbi.ext.sample8.ExtSample8Service" factory-method="getInstance"> </bean> </beans> |
示例代码下载: Sample8.rar