自定义填报风格实现主子窗口式填报
润乾报表填报功能支持各种类型的编辑风格,为了满足用户灵活多变的需求还预留了自定义编辑风格的js接口,让客户自定义编辑风格。本文利用自定义填报编辑风格来实现主子窗口交互式的填报。
需求描述:
填报表数据分为两部分,一部分为根据用户录入数据从数据库中查询得到的结果,如下图中红色边框部分,另一部分为用户网页录入数据。
填报要求,点击雇员ID对应的对话框(绿色框)弹出子窗口,在子窗口中选择雇员,点击确定子窗口关闭,本填报表页面(父窗口)根据子窗口选择值查询并填充员工基本信息(红色框部分),显示如下图所示效果。
需求实现:
1. 主窗口页面(parent.jsp):该页面完成填报表的发布,定义自定义填报编辑风格的js函数。
部分代码:
Js函数代码:
<script type=”text/javascript”>
function onOpenWindow(){ //showModalDialog的第二个参数是传递给子窗口的值
//在子窗口可以通过window.dialogArguments方法获取
//如果不需要传递,这个参数就用window本身
Var result = window.showModalDialog(“child.jsp”,window,”dialogWidth:300px;dialogHeight:300px”);
if(result != null){
window.location=”parent.jsp?empID=”+ result[0];
function show()
onOpenWindow();
function hidden(){}
</script>
报表发布代码:
<%
StringBuffer param=new StringBuffer();
Enumeration paramNames = request.getParameterNames();
if(paramNames!=null){
while(paramNames.hasMoreElements()){
String paramName = (String) paramNames.nextElement();
String paramValue=request.getParameter(paramName);
if(paramValue!=null){
//把参数拼成name=value;name2=value2;…..的形式
param.append(paramName).append(“=”).append(paramValue).append(“;”);
%>
<report:html name=”report1″ reportFileName=”main.raq”
funcBarLocation=”top”
needPageMark=”yes”
generateParamForm=”no”
params=”<%=param.toString()%>”
needSaveAsExcel=”yes”
exceptionPage=”/reportJsp/myError2.jsp”
needOfflineInput=”yes”
width=”-1″
/>
填报表:main.raq,该报表为填报表,可根据参数empID查询员工基本信息。
参数:empID,数据类型为整数
数据集:ds1:SELECT 雇员.雇员ID,雇员.姓氏,雇员.名字,雇员.尊称,雇员.职务,雇员.出生日期,雇员.城市,雇员.家庭电话,雇员.地址,雇员.地区,雇员.国家,雇员.邮政编码,雇员.照片 FROM 雇员 WHERE 雇员.雇员ID = ? 参数为empID。
C3的编辑风格:自定义,调用jsp中定义好的js函数。
2. 子窗口页面(child.jsp):该页面完成员工id(empID)填报值选择,并将填报值返回给主窗口。该页面嵌入参数表单:sub.raq。
部分代码:
<table align=”center”><tr ><td>
<report:param name=”form1″ paramFileName=” sub.raq”
needSubmit=”no”
/></td></tr>
<tr><td align=”top”><input type=”submit” name=”Submit” value=”确定” onclick=’onOK();’ /> <input type=”submit” name=”Submit” value=”取消” onclick=’javascript:form1.reset();’ /></td>
</tr></table>
<script type=”text/javascript”>
function onOK(){
var runValue=new Array;
//获取填报表中变量名为empname的单元格的值返回给主窗口
runValue[0]=document.getElementById(“empname”).value;
window.returnValue = runValue;
window.close();}
</script>
参数表单:sub.raq
B1单元格编辑风格为下拉数据集,B1单元格的变量名为empname
实现效果:
初始页面:
子窗口:
选择雇员并点击确定,子窗口关闭,主窗口将根据返回的id得到员工基本信息。