卡片式报表的增删改

需求背景:

对于行式报表可利用其提供的默认的插入,删除,追加行功能完成数据库记录的增删改操作。对于卡片式报表,一条记录在不固定行上进行显示,要实现对记录的增删改操作,需要建立不同的报表模板来实现。客户需求为根据用户输入的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.当输入代码,数据库没有相应记录,提示”编码小票不存在”,用户填入数据点提交可以在数据库中新增记录。

1.bmp

2. 当输入代码,数据库有相应记录,用户可修改数据,点提交可以在数据库中更新记录。

1. 在有相应记录情况下,点击上图中的删除,会删除相应记录,关闭窗口会刷新原来查询的页面,原来的页面会显示”该编码小票不存在!”