在web报表项目的填报流程中,用户经常会遇到需要按照某个模板来填报内容。本文介绍用快逸报表如何实现数据的回填功能。
第一步设计两张填报表,第一张作为接受回填数据的报表,第二张张作为填入数据的模板,其中第二张报表是通过第一张报表的超链接打开的。
首先制作一张接收数据回填的填报表,在B2单元格输入:”单击此处打开填报模板”,并在右侧B2单元超链接的表达式中输入如下内容:”javascript:openNewWindow(’showReport.jsp?raq=/填报模板.raq&refreshFather=yes’,800,600)”
调用JS函数openNewWindow打开填报模板。第一张报表的样式如下图所示:
然后设计第二张填报模板,在C2单元格内填入”回填” ,设置C1单元格为可写属性,在C2单元格的超链接属性的表达式里写入:”javascript:changePTCellValue(’B4′,’B2′,’B2′,’0′,4)”,调用JS函数实现数据的回填。提问模板的样式如下图所示:
第二步需要设计两个JS函数来实现这个回填的功能,其中在超链接中打开新窗口的JS函数,本文起名叫openNewWindow,代码内容如下:
function openNewWindow(URL,width,Height)
{ var top,left; left=(window.screen.width-width)/2; top=(window.screen.height-Height)/2-40;
window.open(URL,””,”left=”+left+”,top=”+top+”,width=”+width+”,height=”+Height+”,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes, resizable=no”);}
第二个函数是回填的函数,其代码如下:
function changePTCellValue (aimCell,showValue,realValue,count,oldNumber)
{ var cell=’report1_’+showValue; var aimData=document.getElementById(cell).value; count=parseInt(count); var aimCell=”B”+(oldNumber+count*10).toString();
window.parent.opener.document.all["report1_"+aimCell].value=aimData;//保存数据库的值,提交的值
window.parent.opener.document.all["report1_"+aimCell].innerText=aimData;//页面显示值
window.parent.close();
}
这段代码的含义是取到模板中填入数据的单元格的ID,通过遍历要回填的模板中单元格ID,取到这些ID对应的单元格的值,然后赋给接受回填的报表中相应的单元格。然后把这两段JS函数的代码放到一个新建的JS文件中,把这个JS文件起名为appQuicker.js,JS文件的样式如下图所示:
第三步用快逸自带的showReport.jsp发布这两个报表,要在JSP里引入刚才写好的JS文件,在JSP中加入如下内容:,并把JS文件appQuicker.js放在reportJSP文件夹中,与showReport.jsp在同一路径下即可。JSP引入JS文件的方式如下图所示:
然后用快逸自带的tomcat发布这两张报表,单击”单击此处打开填报模板”,弹出提问模板,在提问模板中填入:测试回填,然后点击回填按钮,就会看到数据自动回填到接受回填的报表中,这样回填功能就实现了。测试过程的截图如下面三个图所示: