润乾报表动态改变SQL语句

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

 

你可能感兴趣的:(apache,sql,cache,sun)