目录

在结果报表里引用参数模板中的变量

实用例子

在 参数模板与填报表的发布一节的例子中,用户只能输入参数进行查询,但某些情况下,希望可以不输入参数值,而是选择历史查询进行查询。比如,假设以前保存了一个名为“销售查询”的查询条件参数,查询条件是职务为销售、其它为空,那么想再次查询的时候,直接从保存的历史查询中选择就可以了。同时,如果设置了新的查询条件,只要输入保存名,并将是否保存为选中,在查询的时候,就会同时把这个条件保存起来,供以后查询。参数录入及选择界面如下图所示。

 


实现思路:

根据以上的实现思路,我们进入具体的设计环节,打开7.1_arg.raq并另存为7.5_rag.raq。在第二行后插入一行,把参数模板设计样式为如下:

 


分别选中C3、E3、F3,把它们web变量的引用名分别设置为toSave,saveName,listSave。(请参考参数模板的设计一节) 再增加一数据集ds2,选择数据表PARAM,数据字段REPORTNAME、SAVENAME、SAVEVALUE(分别对应的是报表名、保存名、各个参数名称及对应值),来保存历史查询记录。 选择C3单元格,在数据填报—》常规属性里设置编辑风格为编辑框。 选择E3单元格,设置它的编辑风格为下拉数据集,并设置显示列与数据列如下:

 


最后,设置F3的单元格编辑风格为复选框,设置如下:

 


设计好报表模板后,写一个参数预处理类来保存、设置参数。大概思路是,当保存名不为空,并且是否保存为选中状态时,先把用户输入的参数保存起来,然后执行查询;当用户选择了历史查询时,调用数据库中历史查询的参数值,并且把它们设置到参数中去,让结果报表能够接收到。代码如下:

package test;import java.sql.Connection;import java.sql.ResultSet;import java.sql.Statement;import com.runqian.report4.usermodel.input.AbstractParamProcessor;public class SaveParam extends AbstractParamProcessor {public void process() throws Exception {Connection con = null;Statement stmt = null;String empID = getParamValue("empID");String duty = getParamValue("duty");String area = getParamValue("area");String saveName = getParamValue("saveName");String toSave = getParamValue("toSave");String listSave = getParamValue("listSave");try {// 获取缺省数据库连接con = context.getConnectionFactory(context.getDefDataSourceName()).getConnection();if ("1".equals(toSave) && !"".equals(saveName)) {// 保存历史参数String saveValue = "empID=" + empID + ";duty=" + duty+ ";area=" + area;String sql = "INSERT INTO param VALUES ('8.3.raq','" + saveName+ "','" + saveValue + "')";con.createStatement().execute(sql);return;}if (listSave != null && !"".equals(listSave)) {// 直接使用数据里的历史查询stmt = con.createStatement();ResultSet rs = stmt.executeQuery("SELECT * from param 雇员 where saveName='"+ listSave + "'");if (rs.next()) {// 取出参数值,并进行参数设置,使得用户不需要输入参数,而是从数据库中取String saveValueDB = rs.getString("saveValue");String[] values = saveValueDB.split(";");for (int i = 0; i < values.length; i++) {int j = values[i].indexOf("=");//设置参数值putParam(values[i].substring(0, j), values[i].substring(j + 1, values[i].length()));}}}} finally {try {if (stmt != null)stmt.close();if (con != null)con.close();} catch (Exception e) {}}}}

再新建7.5.jsp,内容如下:

<%@ page contentType="text/html;charset=GBK" %><%@ taglib uri="/WEB-INF/runqianReport4.tld" prefix="report" %><report:param name="form1" paramFileName="/填报专题/7.5_arg.raq" processor ="test.SaveParam"/><report:html name="report1" reportFileName="/填报专题/7.1.raq"needSaveAsWord="yes"needSaveAsPdf="yes"needSaveAsExcel="yes"/>

来发布这个报表,效果如下: