`
bolan392
  • 浏览: 273715 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

润乾报表动态改变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");
	%>

 

分享到:
评论
1 楼 hy_zhym 2013-01-05  
CacheManager.getInstance().deleteAllReport();//清空所有缓存 
这一句有问题,他会把所有报表的缓存都清除,也就是说打开多个报表页面的时候,只有最后一个正确,应该是
CacheManager.getInstance().deleteReportEntry("ireport");//ireport为beanName的值。

还有个问题beanName如果都叫ireport的话生成excel报表的时候 会互相覆盖,所有最好不要用同名的beanName

相关推荐

    根据sql语句生成rdlc报表,字段宽度自适应

    可以在Web Services等应用中生成Excel或pdf文件,返回给调用接口的客户端,生成pdf部分出现乱码,需要给类设置字体,时间紧迫,不做修改,请不要介意。

    用友NC65报表创建步骤-实用

    报表部分:查询语句部分,可以sql,可以表关联后自动创建(必须遵循pk_org , pk_group 每个语义模型中必含集团和组织PK) 语义模型(查询语句)-动态建模平台-报表平台-语义模型-集团 自由报表(展示界面)-动态建模...

    永思报表设计器 报表工具

    1、可根据SQL语句自动生成报表格式,打印格式,用户只要稍微调整就可形成一张普通报表。 2、可设置报表分组、小计、合计等。 3、可设置报表的过滤窗口条件以及条件的参照内容。 4、可设置报表导出到Excel的格式。 5...

    经典SQL脚本大全

    │ │ 3.6.4 动态他Transact-SQL语句处理中的常见问题演示.sql │ │ 3.7.3 text与ntext字段的复制和合并处理示例.sql │ │ 3.7.4 text与image字段转换处理示例.sql │ │ 3.7.5 ntext字段的REPLACE处理示例.sql │...

    Sqlserver2000经典脚本

    -列车车次查询.sql │ │ 3.6.2 字符串在编号查询中的应用示例及常见问题.sql │ │ 3.6.3 动态参数的存储过程示例.sql │ │ 3.6.4 动态他Transact-SQL语句处理中的常见问题演示.sql │ │ 3.7.3 ...

    金蝶k3万能报表参考手册

    万能报表工具提供了 K/3 系统中的表结构,通过向导自动生成 SQL 语句,作为数据来源,能够灵活 设置报表格式、多级分组汇总,使用户能够快速生成所需报表。提供打印预览、报表格式引入、数据引出 等功能接口。使熟悉...

    SQL21日自学通

    第17 天使用SQL 来生成SQL 语句351 目标351 使用SQL 来生成SQL 语句的目的351 几个SQL*PLUS 命令352 SET ECHO ON/OFF353 SET FEEDBACK ON/OFF353 SET HEADING ON/OFF 353 SPOOL FILENAME/OFF353 START FILENAME354 ...

    SQL查询安全性及性能优化

    说明:通过这个报表找到排在前10 的sql语句,如果这些语句是用户编写的sql语句,我可以对其进行优化。 我们可以根据这些信息筛选出需要优化的SQL语句进行优化 SQL优化经验  大表缺索引---必要字段上建立索引  ...

    报表设计器源代码

    1、可根据SQL语句自动生成报表格式,打印格式,用户只要稍微调整就可形成一张普通报表。 2、可设置报表分组、小计、合计等。 3、可设置报表的过滤窗口条件以及条件的参照内容。 4、可设置报表导出到Excel的格式。 5...

    [C#.NET2005]VS2005中使用水晶报表和水晶报表使用指南 word格式

    拉模式:在水晶报表生成时的数据源是从水晶报表文件中的SQL语句从数据库中提取的,在编程时不用重写SQL语句,但要加上登录信息(具体方法,后面介绍)。推模式:在水晶报表生成时的数据源,是用编程时重写水晶报表中...

    MYSQL常用命令大全

    mysqldump -u wcnc -p smgp_apps_wcnc &gt; wcnc.sql 2.导出一个表 mysqldump -u 用户名 -p 数据库名 表名&gt; 导出的文件名 mysqldump -u wcnc -p smgp_apps_wcnc users&gt; wcnc_users.sql 3.导出一个数据库结构 mysqldump ...

    EXT+VS2008+SQLSERVER2008报表系统

    此系统通过EXT技术和C#结合实现报表查询,新增,权限管理; 通过后台可以直接设置查询报表的SQL语句;是学习的不错资源。

    《SQL HACKS》

    本书包含了100个排序、筛选、打乱数据的技巧,大大增强了传统SQL语句的功能。通过本书,你可以学习到: ● 从命令行和程序往数据库发送SQL命令。 ● 使用高级的联合、过滤和分组技术,为数据报表获得数据。 ● 解决...

    gf数据库多表联查小程序3 原代码 Delphi 7+SQl2000

    和对SQL语句不太会用的朋友查询之用。由于这是小程序,功能没有太多,只能查询,不能修改数据库的表。这个软件还有很多足之处,敬请谅解。“如SQL语句出错但没有提示是什么错误。”“不能保存,已经生成的语句。(但...

    帆软cpt模板及sql

    帆软cpt模板及sql 帆软FineReport使用技巧总结 1.重复与冻结设置,作用:冻结区域 模板-重复与冻结设置 2.单元格有效小数设置 选中单元格-格式-数字-#0.00 3.图表中有效小数设置 图表属性表-条件显示-新建条件...

    T100 GR报表开发整理

    T100 GR报表开发整理说明 ...9. 下载cxmr001_g01程序,修改sql语句,之后上传程序; 10. 系在cxmr001_g01样板,修改样板,上传样板; 11. azzi850赋予cxmr001权限; 12. 执行cxmr001,测试报表。

    c#和vb.net报表设计器

    1、可根据SQL语句自动生成报表格式,打印格式,用户只要稍微调整就可形成一张普通报表。 2、可设置报表分组、小计、合计等。 3、可设置报表的过滤窗口条件以及条件的参照内容。 4、可设置报表导出到Excel的格式。 5...

    21天学会SQL

    3.3 使用SQL语句创建、修改、 删除数据库 59 3.3.1 用CREATE DATABASE语句 创建数据库 59 3.3.2 用ALTER DATABASE语句 修改数据库 60 3.3.3 用DROP DATABASE语句 删除数据库 62 3.4 附加与分离数据库 63 3.4.1 分离...

    SQL Server 2008管理员必备指南(超高清PDF)Part3

    6.8.2 设置SQL Server的默认语言 6.8.3 允许和禁止嵌套触发器 6.8.4 控制查询的执行 6.8.5 配置2000年的支持 6.9 管理数据库设置 6.9.1 设置索引填充 6.9.2 配置备份和还原超时选项 6.9.3 配置备份和还原保持选项 ...

Global site tag (gtag.js) - Google Analytics