卡片式报表的增删改
需求背景:
对于行式报表可利用其提供的默认的插入,删除,追加行功能完成数据库记录的增删改操作。对于卡片式报表,一条记录在不固定行上进行显示,要实现对记录的增删改操作,需要建立不同的报表模板来实现。客户需求为根据用户输入的id,查找数据库表,如果有记录则显示查询结果,并可进行修改和删除。若无id对应的记录,则允许用户新建,用户录入数据提交会在数据库表中插入新记录。
实现思路:
1. 卡片式报表的新增和修改,用参数填报表单+卡片式填报表实现。
2. 卡片式报表的删除可单独建立一张报表,该报表接收传入的id参数,并根据id删除数据库相应记录。
具体实现:
1. 卡片式报表新增和修改功能实现:
a.报表模板:
报表参数spid,该参数为用户输入的参数。数据集会根据该参数检索数据库表,查询是否有相应记录。
模板设计如下:
其中第二行的隐藏行用表达式控制,if(ds1.count()==0,false,true),如果没有找到相应记录显示”编码小票不存在”,用户可填写单元格值,利用填报功能在数据表中插入相应记录。如果有记录则显示该记录,用户修改单元格值后,利用填报功能可在数据库中更新相应记录。
第三行的隐藏行属性同样用表达式控制,if(ds1.count()>0,false,true),如果数据库中查找到相应记录,显示“删除“按钮,可通过按钮删除该条记录。
N3单元格的超链接属性:“javascript:del(“+A6+”,”+N1+”)”,其中del函数在报表展现页面中定义。
该报表为普通填报表,设计步骤不详细描述。
b.报表发布页面部分代码:
……
<script language=”javascript”>
//删除按钮调用的js函数
function del(spid,bxmpid)
{
if(confirm(“确定要删除记录吗?”))
window.open(“BMXP_Delete.jsp?raq=delete_BMXP.raq&spbm=”+spid+”&bmxp_id=”+bxmpid);
}
</script>
……
//分别发布参数表单及结果报表模板
<report:param name=”form1″ paramFileName=”BMXP_result_arg.raq”
needSubmit=”no”
params=”<%=param.toString()%>”
/>
……
<report:html name=”report1″ reportFileName=”BMXP_result.raq”
funcBarLocation=”top”
needPageMark=”yes”
generateParamForm=”no”
needImportExcel=”yes”
params=”<%=param.toString()%>”
width=”-1″
exceptionPage=”/reportJsp/myError2.jsp”
/>
2. 卡片式报表删除功能实现
a.模板设计:
报表参数:spbm
其中A1单元格:=query2(“wfdb1″,”delete from bi_bmxp where bmxp_spdm=?”,spbm),调用query2函数执行sql语句根据传入id删除数据库相应记录
b.删除页面部分代码:
……
<body topmargin=0 leftmargin=0 rightmargin=0 bottomMargin=0 onunload=”btn_Onload();”>
<script language=”JavaScript” type=”text/javascript”>
<!–当前页面关闭时,刷新父窗口内容,可以看到记录结果已经删除。–>
function btn_Onload(){
window.opener.location.reload();
window.close();
}
</script>
……
<report:html name=”report1″ reportFileName=”delete_BMXP.raq”
funcBarLocation=”top”
exceptionPage=”/reportJsp/myError2.jsp”
/>
当然删除功能可以用java代码来实现,本例是利用报表模板实现了,避免了自己编写代码。
实现效果:
1.当输入代码,数据库没有相应记录,提示”编码小票不存在”,用户填入数据点提交可以在数据库中新增记录。
2. 当输入代码,数据库有相应记录,用户可修改数据,点提交可以在数据库中更新记录。
1. 在有相应记录情况下,点击上图中的删除,会删除相应记录,关闭窗口会刷新原来查询的页面,原来的页面会显示”该编码小票不存在!”