最近做了一个润乾报表动态拼接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");
%>