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

目录:

1. 问题描述

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


2. 实现思路

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

3. 实现步骤

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

因为参数界面与工具栏都是自定义的,因此,我们先去掉报表的内置参数界面与工具栏。
去掉工具栏

去掉参数栏,把参数栏高度拉至最小即可
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>   
3.3 保存预览
将该Autopara.jsp保存至Web服务器的报表工程如\WebReport\下面,启动服务器,在浏览器中输入如
http://localhost:8080/WebReport/Autopara.jsp,就可以看到自动生成表单的效果了:

注意:由于需要通过java来获取模板的参数,因此不能使用普通的html页面;另外FineReport内置的jetty服务器无法解析jsp页面,需要另外设置,参考如何让内置Jetty服务器支持JSP,也可使用其他Web服务器,如Tomcat服务器。

附件列表


主题:
标签: 已验证 9.0验证

文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201