在实际的项目开发中,填报表的应用十分广泛。
多数情况下,填报表会作为整个项目的一部分配合需求灵活使用,下面就举例介绍一下。
要求:
当前用户在页面上修改了某行数据,报表自动将用户名更新到这些行的【操作人】字段,但在报表展现内容中不要显示。
当前报表设计如下,首先实现基本的填报操作:
数据来源:
数据去向:
至此,填报表的基本功能已经实现, 下面我们继续以这个报表为例看一下怎么实现只对修改过的行进行更新。
1. 报表底端增加辅助格,用于获取用户名。
2. 在数据回填执行 update 前对要更新的数据做处理。方式如下:
通过对比新旧对象的记录来实现,如果新旧对象不同,则在新对象中保留不同的记录供后面更新使用,如果新旧对象一致则不参与执行更新,以此达到只更新修改行的效果。
注:旧对象保存的是修改前的数据,新对象保存的是修改后的数据。
3. 具体的数据处理过程如下:
数据来源脚本不做任何修改,数据去向脚本修改如下:
其中:
B1 单元格表达式:=employee.([编号, 部门, 姓名, 性别, 出生日期, 入职日期, 籍贯, 工资]),列出对象 employee 中需要对比的字段;
C1 单元格表达式: =employee_old.([编号, 部门, 姓名, 性别, 出生日期, 入职日期, 籍贯, 工资]),列出对象 employee_old 中需要对比的字段;
2-3 行 使用 for 循环对比 employee 与 employee_old 对象记录并从 employee 中删除两者相同的记录,从而整理出被用户修改的行;
A5 单元格 使用 db.update() 函数实现更新,这里用变量 Operator 模拟后台获取的用户名。
其中,后台获取当前用户名可以参考以下实例:
在报表展现界面 showInput.jsp 中获取用户名,并将其拼接到系统变量 param 中,供更新使用
通过上面的脚本,我们就可以实现只对修改过的行标记【操作人】了。
效果如下:
修改前,操作人为空。
在 Web 端访问报表,修改其中任意几行
然后,在数据库端查询数据,检查一下,我们会发现只有刚才修改过的几行才标记了【操作人】,Bingo!没想到吧,就这么轻松搞定了。
最最后,一定不要忘记把辅助格隐藏起来噢!!!
辅助行,行高设置为 0,这样就完美了。
课外知识扩展
什么是填报表:
通常我们看到的报表基本都是对已有数据的读取展现,但还有一类报表不仅能读取展现数据还可以做增删改的操作并与数据库交互,这类报表我们称为填报表。
填报表的用处有哪些:
-
作为一种“介质”,如:收集各地区的某项指标数据,供中央汇总统计使用;
-
作为审核流程的“材料”,如:项目经理填写预算报表,提交后由对应部门审批处理。
填报更新原理:
目前,行式填报表在提交的时会自动对比修改前和修改后的数据:首先对比主键,根据主键是否有新增或缺失确定数据的增删操作;然后再针对前后都有的记录对比每条记录值是否有不同,如有不同则执行 update 操作。
所以,建议数据处理(数据来源、数据去向)中的字段名称与报表中的字段名称个数要保持一致,不然填报更新时就会因新旧对象字段不匹配导致更新失败。
另外细心的你会发现,更新前后的数据是分开编辑的,这样设计有什么好处?容我卖个关子,想了解更多的就关注关注我吧!!!