最近做了一个润乾报表动态拼接SQL语句的功能,之前做的都是固定SQL传参数的形式。但是项目上有一个特殊需求,一个开发人员没做过,我就帮着就研究了一下,可能写的还不是很完美,但是以实现功能为主,留下来备用。
//开始需要导入润乾用到的包 <%@page import="com.sun.org.apache.bcel.internal.generic.NEW"%> <%@page import="com.runqian.report4.cache.CacheManager"%> <%@ taglib uri="/WEB-INF/runqianReport4.tld" prefix="report"%> <%@ page import="com.runqian.report4.model.*"%> <%@ page import="com.runqian.report4.usermodel.*"%> <%@ page import="com.runqian.report4.util.*"%> <% //从请求中取出参数并进行拼接 request.setCharacterEncoding( "GBK" ); String startTime = (String)request.getAttribute("startTime"); String endTime = (String)request.getAttribute("endTime"); String agentId = (String)request.getAttribute("agentId"); String accuseName = (String)request.getAttribute("accuseName"); String accuseType = (String)request.getAttribute("accuseType"); String accuseLevel = (String)request.getAttribute("accuseLevel"); String accuseReasonContent = (String)request.getAttribute("accuseReasonContent"); String accuseReasonContent1 = (String)request.getAttribute("accuseReasonContent1"); String insureChannel = (String)request.getAttribute("insureChannel"); String dealType = (String)request.getAttribute("dealType"); String customerDepId = (String)request.getAttribute("customerDepId"); String accuseMan = (String)request.getAttribute("accuseMan"); String riskName = (String)request.getAttribute("riskName"); String accuseTitle = (String)request.getAttribute("accuseTitle"); String departNo = (String)request.getAttribute("departNo"); String depart = (String)request.getAttribute("depart"); String report = (String)request.getAttribute("reportid"); String ifToLeadership = (String)request.getAttribute("ifToLeadership"); StringBuffer param=new StringBuffer(100); if(agentId!=null&& !"".equals(agentId)){ param.append("agentId=").append(agentId).append(";"); } if(startTime!=null && !"".equals(startTime)){ param.append("startTime=").append(startTime).append(";"); } if(endTime!=null && !"".equals(endTime)){ param.append("endTime=").append(endTime).append(";"); } if(accuseName!=null && !"".equals(accuseName)){ param.append("accuseName=").append(accuseName).append(";"); } if(accuseType!=null && !"".equals(accuseType)){ param.append("accuseType=").append(accuseType).append(";"); } if(accuseLevel!=null && !"".equals(accuseLevel)){ param.append("accuseLevel=").append(accuseLevel).append(";"); } if(accuseReasonContent1!=null && !"".equals(accuseReasonContent1)){ param.append("accuseReasonContent=").append(accuseReasonContent1).append(";"); } if(insureChannel!=null && !"".equals(insureChannel)){ param.append("insureChannel=").append(insureChannel).append(";"); } if(dealType!=null && !"".equals(dealType)){ param.append("dealType=").append(dealType).append(";"); } if(customerDepId!=null && !"".equals(customerDepId)){ param.append("customerDepId=").append(customerDepId).append(";"); } if(accuseMan!=null && !"".equals(accuseMan)){ param.append("accuseMan=").append(accuseMan).append(";"); } if(riskName!=null && !"".equals(riskName)){ param.append("riskName=").append(riskName).append(";"); } if(accuseTitle!=null && !"".equals(accuseTitle)){ param.append("accuseTitle=").append(accuseTitle).append(";"); } if(departNo!=null && !"".equals(departNo)){ param.append("departNo=").append(departNo).append(";"); } if(depart!=null && !"".equals(depart)){ param.append("depart=").append(depart).append(";"); } if(ifToLeadership!=null && !"".equals(ifToLeadership)){ param.append("ifToLeadership=").append(ifToLeadership).append(";"); } String path = request.getContextPath(); //加载报表的定义对象 ReportDefine rd = (ReportDefine)ReportUtils.read(application.getRealPath("apps/reportFiles/yd_accuser_query.raq")); /*修改报表SQL语句开始*/ DataSetMetaData dsmd = rd.getDataSetMetaData(); //获得报表定义中的数据集元对象 SQLDataSetConfig sdsc = (SQLDataSetConfig) dsmd.getDataSetConfig(0); //取到需要修改的数据集对象 String sql =sdsc.getSQL(); //取得数据集对象中的SQL //修改sql if(accuseReasonContent!=null && !"".equals(accuseReasonContent)){ sql = sql + accuseReasonContent ; } // sql = sql + accuseReasonContent ; //System.out.println("报表对象的SQL后:"+sql); //将修改后的SQL设置到数据集对象中 sdsc.setSQL(sql); dsmd.setDataSetConfig(0,sdsc); rd.setDataSetMetaData(dsmd); /*修改报表SQL语句结束*/ /*修改报表参数语句开始*/ //ParamMetaData paramMetaData = rd.getParamMetaData(); //Param p2 = paramMetaData.getParam(0); //p2.setValue("0001"); //paramMetaData.setParam(0,p2); //rd.setParamMetaData(paramMetaData); //ParamMetaData paramMetaData = new ParamMetaData(); ParamMetaData pmd=new ParamMetaData(); //构造参数元数据 Param param1 = new Param(); //构造参数定义 param1.setParamName("agentId"); //设置参数名 param1.setDataType(Types.DT_STRING); //设置参数数据类型 param1.setParamType(Param.PARAM_NORMAL); //设置参数类型(普通参数或动态参数) if(agentId!=null&& !"".equals(agentId)){ param1.setValue(agentId); //设参数缺省值 } pmd.addParam(param1); //把参数定义添加到参数元数据中 Param param2 = new Param(); //构造参数定义 param2.setParamName("startTime"); //设置参数名 param2.setDataType(Types.DT_STRING); //设置参数数据类型 param2.setParamType(Param.PARAM_NORMAL); //设置参数类型(普通参数或动态参数) if(startTime!=null && !"".equals(startTime)){ param2.setValue(startTime); //设参数缺省值 } pmd.addParam(param2); //把参数定义添加到参数元数据中 Param param3 = new Param(); //构造参数定义 param3.setParamName("endTime"); //设置参数名 param3.setDataType(Types.DT_STRING); //设置参数数据类型 param3.setParamType(Param.PARAM_NORMAL); //设置参数类型(普通参数或动态参数) if(endTime!=null && !"".equals(endTime)){ param3.setValue(endTime); //设参数缺省值 } pmd.addParam(param3); //把参数定义添加到参数元数据中 Param param4 = new Param(); //构造参数定义 param4.setParamName("accuseName"); //设置参数名 param4.setDataType(Types.DT_STRING); //设置参数数据类型 param4.setParamType(Param.PARAM_NORMAL); //设置参数类型(普通参数或动态参数) if(accuseName!=null && !"".equals(accuseName)){ param4.setValue(accuseName); //设参数缺省值 } pmd.addParam(param4); //把参数定义添加到参数元数据中 Param param5 = new Param(); //构造参数定义 param5.setParamName("accuseType"); //设置参数名 param5.setDataType(Types.DT_STRING); //设置参数数据类型 param5.setParamType(Param.PARAM_NORMAL); //设置参数类型(普通参数或动态参数) if(accuseType!=null && !"".equals(accuseType)){ param5.setValue(accuseType); //设参数缺省值 } pmd.addParam(param5); //把参数定义添加到参数元数据中 Param param6 = new Param(); //构造参数定义 param6.setParamName("accuseLevel"); //设置参数名 param6.setDataType(Types.DT_STRING); //设置参数数据类型 param6.setParamType(Param.PARAM_NORMAL); //设置参数类型(普通参数或动态参数) if(accuseLevel!=null && !"".equals(accuseLevel)){ param6.setValue(accuseLevel); //设参数缺省值 } pmd.addParam(param6); //把参数定义添加到参数元数据中 //param.append("accuseReasonContent=").append(accuseReasonContent).append(";"); Param param7 = new Param(); //构造参数定义 param7.setParamName("accuseReasonContent"); //设置参数名 param7.setDataType(Types.DT_STRING); //设置参数数据类型 param7.setParamType(Param.PARAM_NORMAL); //设置参数类型(普通参数或动态参数) if(accuseReasonContent1!=null && !"".equals(accuseReasonContent1)){ param7.setValue(accuseReasonContent1); //设参数缺省值 } pmd.addParam(param7); //把参数定义添加到参数元数据中 Param param8 = new Param(); //构造参数定义 param8.setParamName("insureChannel"); //设置参数名 param8.setDataType(Types.DT_STRING); //设置参数数据类型 param8.setParamType(Param.PARAM_NORMAL); //设置参数类型(普通参数或动态参数) if(insureChannel!=null && !"".equals(insureChannel)){ param8.setValue(insureChannel); //设参数缺省值 } pmd.addParam(param8); //把参数定义添加到参数元数据中 Param param9 = new Param(); //构造参数定义 param9.setParamName("dealType"); //设置参数名 param9.setDataType(Types.DT_STRING); //设置参数数据类型 param9.setParamType(Param.PARAM_NORMAL); //设置参数类型(普通参数或动态参数) if(dealType!=null && !"".equals(dealType)){ param9.setValue(dealType); //设参数缺省值 } pmd.addParam(param9); //把参数定义添加到参数元数据中 Param param10 = new Param(); //构造参数定义 param10.setParamName("customerDepId"); //设置参数名 param10.setDataType(Types.DT_STRING); //设置参数数据类型 param10.setParamType(Param.PARAM_NORMAL); //设置参数类型(普通参数或动态参数) if(customerDepId!=null && !"".equals(customerDepId)){ param10.setValue(customerDepId); //设参数缺省值 } pmd.addParam(param10); //把参数定义添加到参数元数据中 Param param11 = new Param(); //构造参数定义 param11.setParamName("accuseMan"); //设置参数名 param11.setDataType(Types.DT_STRING); //设置参数数据类型 param11.setParamType(Param.PARAM_NORMAL); //设置参数类型(普通参数或动态参数) if(accuseMan!=null && !"".equals(accuseMan)){ param11.setValue(accuseMan); //设参数缺省值 } pmd.addParam(param11); //把参数定义添加到参数元数据中 Param param12 = new Param(); //构造参数定义 param12.setParamName("riskName"); //设置参数名 param12.setDataType(Types.DT_STRING); //设置参数数据类型 param12.setParamType(Param.PARAM_NORMAL); //设置参数类型(普通参数或动态参数) if(riskName!=null && !"".equals(riskName)){ param12.setValue(riskName); //设参数缺省值 } pmd.addParam(param12); //把参数定义添加到参数元数据中 Param param13 = new Param(); //构造参数定义 param13.setParamName("accuseTitle"); //设置参数名 param13.setDataType(Types.DT_STRING); //设置参数数据类型 param13.setParamType(Param.PARAM_NORMAL); //设置参数类型(普通参数或动态参数) if(accuseTitle!=null && !"".equals(accuseTitle)){ param13.setValue(accuseTitle); //设参数缺省值 } pmd.addParam(param13); //把参数定义添加到参数元数据中 Param param14 = new Param(); //构造参数定义 param14.setParamName("departNo"); //设置参数名 param14.setDataType(Types.DT_STRING); //设置参数数据类型 param14.setParamType(Param.PARAM_NORMAL); //设置参数类型(普通参数或动态参数) if(departNo!=null && !"".equals(departNo)){ param14.setValue(departNo); //设参数缺省值 } pmd.addParam(param14); //把参数定义添加到参数元数据中 Param param15 = new Param(); //构造参数定义 param15.setParamName("depart"); //设置参数名 param15.setDataType(Types.DT_STRING); //设置参数数据类型 param15.setParamType(Param.PARAM_NORMAL); //设置参数类型(普通参数或动态参数) if(depart!=null && !"".equals(depart)){ param15.setValue(depart); //设参数缺省值 } pmd.addParam(param15); //把参数定义添加到参数元数据中 Param param16 = new Param(); //构造参数定义 param16.setParamName("ifToLeadership"); //设置参数名 param16.setDataType(Types.DT_STRING); //设置参数数据类型 param16.setParamType(Param.PARAM_NORMAL); //设置参数类型(普通参数或动态参数) if(ifToLeadership!=null && !"".equals(ifToLeadership)){ param16.setValue(ifToLeadership); //设参数缺省值 } pmd.addParam(param16); //把参数定义添加到参数元数据中 rd.setParamMetaData(pmd); //把参数元数据赋给ReportDefine /*修改报表参数语句开始*/ Context ctx = new Context(); ctx.setParamValue("accuseName",accuseName); Engine engine = new Engine(rd,ctx); IReport ireport = engine.calc(); request.setAttribute("ireport",ireport); request.setAttribute("mycontext",ctx); CacheManager.getInstance().deleteAllReport();//清空所有缓存 %> //使用标签显示报表对象 <report:html name="report" srcType="defineBean" beanName="ireport" needSaveAsExcel="yes" needSaveAsPdf="yes" needPrint="yes" printLabel="打印" width="-1" contextName="mycontext" params="<%=param.toString()%>" useCache="no"/> <% request.removeAttribute("ireport"); %>