在客户的应用中通常存在一种情况,报表展现由他们自己原有程序实现,使用润乾只是用在报表的打印和导出上。或者说在某页面上选择查询条件及报表名称,选择完成后直接点击打印或导出按钮实现对该表的打印或导出操作,润乾能满足该需求,但要对页面做下相关修改,实现方法如下:
润乾内置了几个打印或导出的js函数,如report1_print(),report1_saveAsExcel()等函数,但是如果使用这几个函数,必须要在页面上展现报表后才行,客户要求不展示报表,这里可以自己定义js函数实现相关功能。
1、 在页面上增加打印导出按钮,如:
<a href=”#” onClick=”excel();return false;”>导出excel</a>
<a href=”#” onClick=”word();return false;”>导出word</a>
<a href=”#” onClick=”print();return false;”>打印</a>
这样页面上点击相关操作实际上调用的是该js方法。
2、 参数传递
客户系统中通常有一些参数对数据过滤,这样打印或导出时也要把该参数传到报表中计算,润乾在打印导出时取参数值时主要是通过参数缓存ID得知,即reportParamsId
所以要将客户的参数转换成reportParamsId,代码如下:
String raqName=”ppp.raq”;//报表名称,到时候改成干部任免表
String reportParamsId = null;//定义reportParamsId
Hashtable hash = new Hashtable();
hash.put( “arg1″, “1111111″ );//将参数和值放到hashtable中,arg1为报表中定义的参数,保监会中改成人员id那个参数名,111111为参数值,将userid放在这
if( hash.size() > 0 ) {
//生成一个ID,并把这个ID与刚才准备的hash形成键值关系
reportParamsId = com.runqian.report4.view.ParamsPool.createParamsId();//生成参数缓存id
com.runqian.report4.view.ParamsPool.put( reportParamsId, hash );//将id放到缓存中
}
System.out.println(“reportParamsId=”+reportParamsId);
这样就生成了缓存ID,能将相关参数传递给报表服务器参与计算
3、 js函数编写
前边提到了,在页面上点击按钮时实际上是调用了js函数,所以要在页面中实现该js函数。
<script language=javascript>
function print() {
document.report1_printIFrame.location = “http://127.0.0.1:6002/demo/reportServlet?action=2&name=report1&reportFileName=<%=raqName%>&srcType=file&savePrintSetup=yes&appletJarName=runqianReport4Applet.jar&serverPagedPrint=no&mirror=no&reportParamsId=<%=reportParamsId%>”;
}
function excel() {
document.report1_saveAs_frame.location = “http://127.0.0.1:6002/demo/reportServlet?action=3&file=<%=raqName%>&columns=0&srcType=file&width=-1&height=-1&reportParamsId=<%=reportParamsId%>”
}
function word(){
document.report1_saveAs_frame.location = “http://127.0.0.1:6002/demo/reportServlet?action=7&file=<%=raqName%>&columns=0&srcType=file&reportParamsId=<%=reportParamsId%>”;
}
</script>
最后,由于打印或导出时用到了report1_saveAs_frame和report1_printIFrame,为避免js错误,在页面中增加:
<iframe name=”report1_saveAs_frame” id=”report1_saveAs_frame” src=”a.html” style=”display:none”></iframe>
<iframe name=”report1_printIFrame” id=”report1_printIFrame” src=”a.html” style=”position:absolute;left:-100px;top:-100px” width=50 height=50></iframe>
这样就能实现报表不展现,点相关按钮后执行打印或导出操作。