概述
很多时候用户不仅需要操作本地的报表模板,还要操作远程服务器上的报表模板,比如修改远程服务器的报表或者将本地模板上传至远程服务器等。为了满足这种需求,润乾报表提供了远程服务接口。
远程服务器相当于客户端与服务器之间的一个中间层,通过与服务器建立连接,可实现对不同用户权限的控制、查看和保存服务器上的文件、上传新文件到服务器等。
远程服务菜单是通过用户自定义类,实现润乾报表提供的 com.raqsoft.ide.custom.Server 接口添加的。接口说明可参考自定义远程服务小节。
菜单介绍
为方便使用,润乾报表和集算器设计器中默认都提供了一个以报表中心服务器为示例的完整的自定义类,实现远程服务功能,并已完成相关配置,因此用户打开设计器后可直接看到远程服务菜单。
登录:
本菜单项的功能是与远程报表服务器建立连接。如果服务器未启动,则连接失败。
服务器名称
指定服务器名称,不能与已经登录的服务器名称重名。
URL
指定登录服务器的 URL。支持 HTTP 路径或绝对路径,格式如:http://localhost:6868/demo/reportCenterServlet/ide 或 D:/remoteserver/test。
用户名 / 密码
访问远程服务器时,填写可用的用户名和密码。默认为报表中心访客的用户名 / 密码:raq_visitor/a000000。
保存密码
指定当前密码是否保存。
自动登录
指定当前服务器是否自动登录,缺省为自动登录。
注销:
本菜单项的功能是断开与服务器的连接。
点击注销菜单后,服务器下拉框中默认为当前使用的服务器,用户通过下拉框选择要注销的服务器,点击注销按钮,则与服务器断开连接,并在左侧资源文件树上移除了该服务器上的资源。
连接数据源:
本菜单项的功能是连接远程服务器的数据源。
上传文件:
本菜单项的功能是上传文件到远程服务器。
上传服务器
指定需要上传的目标服务器,默认是当前使用的服务器,可通过下拉框选择目标服务器。
选择节点
文件上传的目标位置,默认是相对于服务器的 Report-home 根目录“\”。
选择文件
选择需要上传的文件,支持一个或多个文件同时上传。
覆盖同名文件
如果目标位置文件名已存在,是否覆盖同名文件。
自定义远程服务
可通过实现如下接口将远程服务植入润乾报表 / 集算器中。
接口介绍
接口类路径:com.raqsoft.ide.custom.Server
getName
语 法: public String getName()
功能说明: 获取服务器名称
Returns : 服务器名称
setName
语 法: public void setName(String name)
参数说明: name 服务器名称
功能说明: 设置服务器名称
Returns : 空
getUrl
语 法: public String getUrl()
功能说明: 获取服务器 URL
Returns : 服务器 URL
setUrl
语 法: public void setUrl(String url)
参数说明:url 服务器 URL
功能说明: 设置服务器 URL
Returns : 空
login
语 法: public boolean login(String user, String pwd)
参数说明:user 用户名
pwd 密码
功能说明: 登录服务器
Returns : true 表示登录成功,false 表示登录失败
open
语 法: public InputStream open(String fileName)
参数说明:fileName 服务器端文件名
功能说明: 打开文件生成文件流
Returns : 文件流
save
语 法: public void save(String fileName, byte[] fileBytes)
参数说明:fileName 服务器端文件名
fileBytes 文件转成的字节数组
功能说明: 保存文件到服务器
Returns : 空
save
语 法: public void save(String fileName, File localFile)
参数说明:fileName 服务器端文件名
localFile 本地文件名
功能说明: 上传本地文件到服务器
Returns : 空
listFiles
语 法: public List listFiles(String path)
参数说明:path 目录路径,path=null 或 / 时表示服务器根目录
功能说明: 返回指定目录下的文件信息
Returns : 指定目录下的文件信息
getDBConfigList
语 法: public List getDBConfigList()
功能说明: 获取当前用户可用的数据源配置
Returns : 数据源列表(用户有权限访问的)
logout
语 法: public void logout()
功能说明: 注销
Returns : 空
代码示例
自定义远程服务需要实现润乾报表提供的 com.raqsoft.ide.custom.Server 接口,请看如下示例:
package api; //指定类路径 import com.raqsoft.ide.custom.Server; import ......; public class CustomreportServer implements Server{ //实现Server接口,自动引入接口中的所有方法 … … public boolean login(String user, String pwd) { … … //通过httpclient等工具,根据user参数请求业务系统中提供的servlet,获取到对应用户密码PWD if (PWD == null) if (pwd != null) return false; if(PWD.equals(pwd) || PWD2.equals(pwd)){ loginState = LOGIN; return true; } return false; } public InputStream open(String fileName) { …… //通过httpclient等类似工具,向web服务器发起报表文件流请求,读取web服务器上的报表文件,这里需要告诉用户所请求应用读取报表的url,如果没有登陆就调用 这个方法,需要弹出对话框提示用户没有登陆。下面这行代码没用,去掉 File remoteFile = new File(url, fileName); return new FileObject(remoteFile.getAbsolutePath()).getInputStream(); } /** * 保存文件到服务器 * @param fileName * 服务端文件名 * @param fileBytes * 文件转成的字节数组 */ public void save(String fileName, byte\[\] fileBytes) { ……//这个方法是保存当前打开的报表的字节流到远程web端。字节流通过httpclient等工具发送到web端的servlet … … JOptionPane.showConfirmDialog(null, "保存文件:"+fileName+"至服务器"+getName()+"成功!"); } /** * 上传本地文件到服务器 * @param fileName * 服务端文件名 * @param localFile * 本地文件 */ public void save(String fileName, File localFile) { … … } /** * 返回指定目录下的文件信息 * @param path * path=null或/时表示根 * @return 指定目录下文件信息 */ public List<FileInfo> listFiles(String path) { … … File remoteFile; if (path == null) { remoteFile = new File(url); } else { remoteFile = new File(url, path); } if (remoteFile.isDirectory()) { File[] files = remoteFile.listFiles(); if (files != null && files.length > 0) { List<FileInfo> fileInfos = new ArrayList<FileInfo>(); … … return fileInfos; } } return null; } /** * 取当前用户可用的数据源配置 * @return 数据源列表(用户有权限访问的) */ public List<DBConfig> getDBConfigList() { … … try { RaqsoftConfig config = ConfigUtil.load(new FileInputStream( CONFIG_PATH), false); return config.getDBList(); } catch (Exception e) { e.printStackTrace(); } return null; } /** * 注销 */ public void logout() { loginState = LOGOUT; System.out.println("注销"); } … … }
package api; //指定类路径 import com.raqsoft.ide.custom.Server; import ......; public class CustomreportServer implements Server{ //实现Server接口,自动引入接口中的所有方法 … … public boolean login(String user, String pwd) { … … //通过httpclient等工具,根据user参数请求业务系统中提供的servlet,获取到对应用户密码PWD if (PWD == null) if (pwd != null) return false; if(PWD.equals(pwd) || PWD2.equals(pwd)){ loginState = LOGIN; return true; } return false; } public InputStream open(String fileName) { …… //通过httpclient等类似工具,向web服务器发起报表文件流请求,读取web服务器上的报表文件,这里需要告诉用户所请求应用读取报表的url,如果没有登陆就调用 这个方法,需要弹出对话框提示用户没有登陆。下面这行代码没用,去掉 File remoteFile = new File(url, fileName); return new FileObject(remoteFile.getAbsolutePath()).getInputStream(); } /** * 保存文件到服务器 * @param fileName * 服务端文件名 * @param fileBytes * 文件转成的字节数组 */ public void save(String fileName, byte\[\] fileBytes) { ……//这个方法是保存当前打开的报表的字节流到远程web端。字节流通过httpclient等工具发送到web端的servlet … … JOptionPane.showConfirmDialog(null, "保存文件:"+fileName+"至服务器"+getName()+"成功!"); } /** * 上传本地文件到服务器 * @param fileName * 服务端文件名 * @param localFile * 本地文件 */ public void save(String fileName, File localFile) { … … } /** * 返回指定目录下的文件信息 * @param path * path=null或/时表示根 * @return 指定目录下文件信息 */ public List<FileInfo> listFiles(String path) { … … File remoteFile; if (path == null) { remoteFile = new File(url); } else { remoteFile = new File(url, path); } if (remoteFile.isDirectory()) { File[] files = remoteFile.listFiles(); if (files != null && files.length > 0) { List<FileInfo> fileInfos = new ArrayList<FileInfo>(); … … return fileInfos; } } return null; } /** * 取当前用户可用的数据源配置 * @return 数据源列表(用户有权限访问的) */ public List<DBConfig> getDBConfigList() { … … try { RaqsoftConfig config = ConfigUtil.load(new FileInputStream( CONFIG_PATH), false); return config.getDBList(); } catch (Exception e) { e.printStackTrace(); } return null; } /** * 注销 */ public void logout() { loginState = LOGOUT; System.out.println("注销"); } … … }
部署步骤
相关配置文件: reportsystemconfig_zh.xml(润乾报表)/ systemconfig_zh.xml(集算器)
操作步骤:
1)自定义类实现 com.raqsoft.ide.custom.Server 接口
2)将自定义类放到设计器类路径下
3)配置文件位置:
润乾报表:
【产品安装根目录】\report\config\reportsystemconfig_zh.xml
集算器:
【产品安装根目录】\esProc\config\systemconfig_zh.xml
4)在此配置文件下的标签中增加 Server 属性,属性值为用户自定义类路径
按照上述步骤配置完成后,重启设计器,这里以润乾报表设计器为例,报表主菜单中会显示“远程服务”菜单,如下图: