润乾报表开发统计图超链接钻取数据

最近一直在跟润乾打交道,越来越发现润乾报表的强大~

最近开发了一个报表,需要出统计图同时还可以点击统计图中的某个板块,以此弹出窗口或是将参数传给地图服务以此实现在地图上定位(原需求是这样的),下面就来简单的总结下,不详或是不对之处还望大家多指正。
第一步润乾报表文件的设计,接触过润乾的做一个润乾的统计图应该是不难的~我下面就以饼图为例(其实什么图像都是一样的),如下图:润乾报表开发统计图超链接钻取数据_第1张图片

打开统计图属性定义——显示外观(润乾设计器版本不同可能所在的位置有点不一样),在图形超链接写上需要跳转到js,如:javascript:parent.btnPointsLocate('@category'),注意这个地方的javascript....不需要在最外面写上"",btnPointsLocate是需要跳入执行的js(当然这些都是后话,我们只要进入了js之后就可以随意的做操作,现在主要讲的还是如何@category或是多个参数)。超链接目标窗口:_self表示在当前窗口弹出一个新窗口。
第二步将通过js提交查询参数和润乾报表文件,下面是部分js代码:

if(type=="腐蚀风险"){
	paramStr += "&type=fushi&raqName=cp/cpExcavationTypeone.raq";//腐蚀风险
}else{
	paramStr += "&type=ganrao&raqName=cp/cpExcavationTypeTwo.raq";//交流干扰风险
}
	segmentname = encodeURI(encodeURI($.trim(segmentname)));
	testdate = encodeURI(encodeURI($.trim(testdate)));
	paramStr += "&segmentname="+segmentname+"&testdate="+testdate+"&segmentid="+segmentid;
	var url = "../../../../cp/cpanalysis/excavation/queryExcavationTotal.do?g=c"+paramStr;
	$.ajax({
		url:url,
		method:'POST',
		success:function(result){
			resultHtml = result;
			startProgressBar();
		},
		error:function(){
			$.messager.alert('提示','统计失败','info');
		}
	});
第三步提交到后台controller,代码应该都是一样的:


@RequestMapping(value = "/queryExcavationTotal")
    public ModelAndView queryExcavationTotal(HttpServletRequest request, HttpServletResponse response)
    {
        try
        {
            String raqName = request.getParameter("raqName"); // 报表文件名
            if (raqName == null)
            {
                log.error("报表文件为空。");
            }
            String type = request.getParameter("type");// 测试类型
            String segmentname = request.getParameter("segmentname");//管段
            String segmentid = request.getParameter("segmentid");
            String testdate = request.getParameter("testdate");//测时间
            //raq文件需要的参数,包括字段,testTitle
            String testTitle = "";
            String params = "type = "+type+";";
            params += "testTitle="+testTitle+";";
            segmentname = EncodeUtils.urlDecode(segmentname);
            testdate = EncodeUtils.urlDecode(testdate);
            params += "segmentname="+segmentname+";"+"testdate="+testdate+";"+"segmentid="+segmentid+";";
            request.setAttribute("params", params);
            request.setAttribute("raqName", raqName);
            return new ModelAndView("/cp/cpanalysis/protectestatus/excavation/queryExcavation.jsp");
        }
        catch (Exception e)
        {
            e.printStackTrace();
            log.error("统计分析失败。");
        }
        return null;
    }
第五步,走到这的时候应该是将参数通过jsp页面将传给润乾报表文件了。在这个跳转的过程中我一般是先有一个xx.jsp还有一个xxDetail.jsp页面。xx.jsp页面负责将参数接受并通过url将参数带入xxDetail.jsp页面。
<td>
	<iframe name="_reportDetailName" src="queryTestDataDetails.jsp?params=${requestScope.par        ams}&reqName=${requestScope.raqName}" id="dailyDetailIFrame" frameborder="0" scrolling="        no"></iframe>
</td>

一下是xxDetail.jsp页面嵌入的一段java代码:


<%
	request.setCharacterEncoding("utf-8");
	String reqFileName = request.getParameter("reqName");
	String param = request.getParameter("params");
			
	String reportFileHome=Context.getInitCtx().getMainDir();
	//读取报表模板

	String filepathOld = application.getRealPath(reportFileHome + File.separator + reqFileName);
	String filePathNew = filepathOld.replace("\\", "\\\\");
	ReportDefine rd = (ReportDefine) ReportUtils.read(filePathNew);
	Map<String,String> paramMap = new HashMap<String,String>();
	if(param.length() > 0){
		String[] paramArr = param.split(";");
		for(int i=0;i<paramArr.length;i++){
		String paramsStr = paramArr[i];
		if(paramsStr.indexOf("=") > 0){
			String paramName = paramsStr.substring(0,paramsStr.indexOf("="));
			String paramValue = paramsStr.substring(paramsStr.indexOf("=")+1);
		    	paramMap.put(paramName,paramValue);
		}
	    }
        }
	String	segmentid = paramMap.get("segmentid");
	String	excavationDate = paramMap.get("testdate");
		    
	//设置统计图图形超链接		
	INormalCell inc = rd.getCell(2, (short) 1);
	GraphProperty gp = inc.getGraphProperty();
	String oldurl = gp.getLink();
	String newurl = oldurl.replace(")", ",'" + segmentid + "','"+excavationDate+"')");
        //重新拼接新的url地址,其实就是javascript:parent.btnPointsLocate('@category')这个,而且还在           //'@category'后加上参数。         
        gp.setLink(newurl);
	inc.setGraphProperty(gp); rd.setCell(2, (short) 1, inc);

        //设置request中报表定义对象
	String rptName = "RPT_" + Double.toString(Math.random());
        request.setAttribute(rptName, rd);
%>

这样点击报表统计图时就会将你要的参数传到js中去了。



 
  
 


你可能感兴趣的:(润乾报表开发统计图超链接钻取数据)