读取模板参数并自动生成参数决策报表

编辑
文档创建者:文档助手1 (67727 )     浏览次数:3951次     编辑次数:12次     最近更新:jiangsr 于 2018-02-01     

目录:

1. 问题描述编辑

上一节中我们实现了参数在上、工具栏在中、报表在下的布局方式,可以看到此时的参数界面我们没有采用FineReport内置的参数面板,而是自己写了一个参数决策报表。
此时每个参数我们都需要定义其相应的input元素,若模板中参数比较多的时候,就需要写大段的代码。
我们如何读取模板中的所有参数并自动生成form决策报表呢?

2. 实现原理编辑

由二次开发文档可知,我们可以通过getParameters()来获取模板的所有参数,对每个参数我们将其名称赋值给input元素的name属性,那么只要遍历每个参数,就能自动生成对应的input元素了。

3. 实现步骤编辑

3.1 模板准备
我们直接使用doc\Primary\Parameter\Parameter.cpt模板,但该模板只有一个数据集参数:地区;为了体现效果,我们再增加一个报表参数:NEW,如下图:

222

因为参数界面与工具栏都是自定义的,因此,我们先去掉报表的内置参数界面与工具栏。
切换至参数界面,在右上角的高级选项中,去掉显示参数窗体和点击查询前不显示报表内容两个选项后面的勾,如下图:

222

注:如果这里没有显示参数窗体的选项,需要安装参数面板显示兼容插件,详细请查看参数面板样式
3.2 自定义页面
定义自定义页面Autopara.jsp,代码如下
<%@ page language="java" contentType="text/html; charset=gb2312" pageEncoding="UTF-8"%> <%@ page import="com.fr.base.*"%> <%@ page import="com.fr.io.TemplateWorkBookIO"%> <%@page import="com.fr.main.TemplateWorkBook"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>读取模板参数列表自动生成参数决策报表</title> </head> <body> <form acti method="post" target="reportFrame" name="FRform"> <% try { TemplateWorkBook workbook = null; // 读取当前环境下的模板并读取模板中的所有参数 workbook = TemplateWorkBookIO.readTemplateWorkBook( FRContext.getCurrentEnv(), "\\doc\\Primary\\Parameter\\Parameter.cpt"); Parameter[] paras = workbook.getParameters(); // 遍历参数并生成对应的input元素 for (int i = 0; i < paras.length; i++) { out.println("<script>document.write(\"" + paras[i].getName() + ":<input type='text' name='" + paras[i].getName() + "' value='" + paras[i].getValue().toString() + "'/>\");</script>"); } } catch (Exception e) { e.printStackTrace(); } %> <input type=submit name="submit" value="查询"> </form> <div id="toolbar"> <button type="button" onclick="document.getElementById('reportFrame').contentWindow.contentPane.gotoFirstPage()"> 首页 </button> <button type="button" onclick="document.getElementById('reportFrame').contentWindow.contentPane.gotoPreviousPage()"> 上一页 </button> <button type="button" onclick="document.getElementById('reportFrame').contentWindow.contentPane.gotoNextPage()"> 下一页 </button> <button type="button" onclick="document.getElementById('reportFrame').contentWindow.contentPane.gotoLastPage()"> 末页 </button> </div> <iframe id="reportFrame" name="reportFrame" frameborder="1" src="/WebReport/ReportServer?reportlet=doc/Primary/Parameter/Parameter.cpt&__showtoolbar__=false" width=100% height=80%></iframe> </body> <html> 
4. 预览效果
将该Autopara.jsp保存至Web服务器的报表工程如\WebReport\下面,启动服务器,在浏览器中输入如
http://localhost:8888/WebReport/Autopara.jsp这里的8888根据自己服务器的端口进行修改,就可以看到自动生成决策报表的效果了,另外这里只是演示自动生成参数的效果,实际查询按钮无效,如下图:

222

注:由于需要通过java来获取模板的参数,因此不能使用普通的html页面;
另:FineReport内置的jetty服务器无法解析jsp页面,请使用其他Web服务器,如Tomcat服务器。

附件列表


主题: 部署集成
如果您认为本文档还有待完善,请编辑

文档内容仅供参考,如果你需要获取更多帮助,请咨询帆软技术支持
关于技术问题,您还可以通过帆软论坛获取帮助,论坛上有非常多的大神,有些水平比帆软工程师还要高哦。
若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

本文档是否有用?
谢谢! 我们非常感谢您的反馈。
提交反馈: