1. 概述编辑
保存模板至数据库 中,可以将 cpt 模板保存入库,当需要访问报表时,便可以从数据库中根据报表名称取出报表。不在存为模板点击预览访问,而是自定义 Java 类将其转换为网络报表,在 Web 浏览器中进行访问。
例如 保存模板至数据库 中 将 GettingStarted.cpt 存在数据库中,通过本文 2.1 示例的方法转换后,在浏览器中输入:
http://localhost:8075/webroot/decision/view/report?viewlet=com.fr.demo.ReadFromDatabase&cptname=GettingStarted.cpt就可以直接在浏览器端访问模板。
注:阅读本文时,请先阅读:保存模板至数据库 。
2. 示例编辑
读取决策报表 frm 和读取普通报表 cpt 的实现方法基本一致,只是自定义 Java 类文件不同。
2.1 读取 cpt 报表
2.1.1 准备编译环境
编译程序前,需先创建一个Java工程环境,并且需要一个Java 编辑器,如 Eclipse 或 idea 。
在编辑器工程中导入 FineReport 工程 JAR 包,包括安装工程包 %FR_HOME%/lib 下的所有的包,%FR_HOME%/server/lib 下的所有包,%FR_HOME%/webapps/webroot/WEB-INF/lib下的所有包,还要引入 JDK 下的 tools.jar。详细操作可参考:编译Java程序 2.2.1 节。
2.1.2 新建读取报表类
在 Java 编辑器中新建 Java 文件 ReadFromDatabase.Java,继承 com.fr.web.Reportlet 抽象类,并实现 public Report createReport(ReportletRequest reportletRequest) 方法。
完整代码见链接:ReadFromDatabase.java
代码中 SQL 查询中涉及到的 report、cptname、cpt 分别为存储模板的数据表名,字段名,模板文件。如下图所示:
2.1.3 编译生成类文件
在 Java 编译环境中编译2.2.2.节中的 Java 文件,生成 ReadFromDatabase.class 类文件。
将编译后的 ReadFromDatabase.class 类放至应用目录%FR_HOME%/webapps/webroot/WEB-INF/classes/com/fr/demo/下。
2.1.4 发布并访问
启动报表服务器,在浏览器中输入地址:
注:URL 路径中 cptname 将传递模板名称到类文件,必须和类文件中的参数名称一致。
http://localhost:8075/webroot/decision/view/report?viewlet=com.fr.demo.ReadFromDatabase&cptname=GettingStarted.cpt即可看到报表预览效果。如下图所示:
2.2. 读取 frm 报表
2.2.1 准备编译环境
参考 2.1.1节。
2.2.2 新建读取报表类
在 Java 编辑器中新建 Java 文件:
JAR 包在 2021-04-09 之前的版本,类文件完整代码见:ReadfrmFromDatabase.java
注:ReadfrmFromDatabase.java 文件不支持带参数的模板,带参数的模板预览时,点击查询后会报错空指针。
JAR 包在 2021-04-09 之后的版本,类文件完整代码见:NewReadfrmFromDatabase.java
代码中 SQL 查询中涉及到的 report、frmname、frm 分别为存储模板的数据表名,字段名,模板文件。如下图所示:
2.2.3 编译生成类文件
参考 2.1.3 节。
2.2.4 发布并访问
启动报表服务器,在浏览器中输入地址:
注:URL 路径中 reportname 将传递模板名称到类文件,必须和类文件中的参数名称保持一致。
http://localhost:8075/webroot/decision/view/form?viewlet=com.fr.demo.ReadfrmFromDatabase&reportname=Form5.frm即可看到到报表预览效果。如下图所示: