巧用标志字段实现填报数据的暂存与锁定

简介: <br>用户页面端数据录入时,由于数据的不确定性,通常会需要将数据暂存而不真正入库,类似草稿功能,等能确保数据准确时再进行数据入库操作,来乾学院看看如果简单的通过一个标志字段实现数据的暂存与锁定。<a href="http://c.

需求场景
在用户录入完数据后,如果能确保数据正确,可以在页面端点击锁定按钮,从而将数据锁定,以便防止误操作对数据产生影响,并且限定锁定状态的数据才是有效数据,在查询统计时只需要统计有效数据。
解决方案
针对这个需求,我们可以在数据表中增加一个标志字段,通过该标志字段的状态来确定数据是否处于“锁定”状态。
下面是具体的实现步骤:
一:在数据表中增加字段:flag
1

FLAG 字段为 0 时表示数据为暂存数据,为 1 是表示是锁定数据
二:根据需求制作订单明细表,表样如下图:
2

A3 单元格类型为维度格,表达式为 =dd.(DDID), 字段名称设置为:dd.DDID
B3~E3 单元格类型为数值格,字段名称分别设置数据表中对应的名称。
数据处理中使用多源 SQL,数据来源为:
3

接下来就看一下如何通过增加标志位字段进行数据控制。
在报表后追加一数据列(F 列),将 F3 单元格设置成数值格,并在字段名称属性处设置“FLAG”,这样就能在 F3 单元格取出状态位,其余单元格可根据 F3 的值进行是否可写控制,值为 1 时为锁定状态。
在 B3~E3 单元格的是否可编辑表达式中写入表达式:F3!=“1”, 这样当 F3 单元格的值不为 1(非状态锁定)时,这些单元格可编辑。
现在报表展现时就能够根据状态位的值来控制数据是否可被修改了。接下来再看一下,如何控制状态位的标志值。
用户操作时是在页面端点击锁定按钮,所以可以在点击该按钮时先更改报表中的状态位,然后再执行数据保存操作,而更改状态位的值可以通过 javascript 脚本更改报表单元格 (F2) 的值来实现。
接下来看下 F2 单元格设置,如图:
4

F2 单元格既要接受 js 控制,又要将值回写到数据库表中。在通过多源 SQL 回写数据时,需要设置表达式,这里将 F2 单元格类型设置成数值型,字段名称中写入:a.TYPE,表示 F2 单元格放入对象 a 中,名字为 TYPE,并且该单元格要读取数据表中的初始值,所以单元格中写入 =F3。然后在数据处理的数据去向中设置如下:
5

也就是说,保存时会将 a.TYPE 的值保存到 FLAG 字段中。这里对通过 string() 函数把 a.TYPE 转换成字符串,这样就可以将 F2 单元格的值保存到数据库表的对应状态位中。F 列为控制状态列,设置完成后将列宽设成 0 即可。
接下来看一下如何动态更改 F2 的值。
1、 在填报表工具条中增加锁定按钮。
填报表工具条是在 showInput.jsp 中引入的:inputtoolbar.jsp,用文本编辑器打开,在里边增加一个按钮:
锁定
注:按钮样式可自行设置,此处用简单的文本。
2、 在 showInput.jsp 中增加 js 函数
function save(arg1){
document.getElementById(arg1+“0_F”+2).setAttribute(“value”,“1”);
_inputSubmit(arg1);// 保存报表
}
该 js 函数控制,如果页面端点击锁定按钮后,将 F2 单元格的值设成 1,然后再执行保存报表操作,从而能够将标志位保存到数据库中。
页面如下:
6

再将 F 列隐藏掉即可(列宽设成 0)
这样,我们就实现了点击“锁定”按钮将数据锁定以防在页面端再次修改。
如需要在查询统计时只针对锁定的有效数据,那么只需要在 where 条件中增加 FLAG=’1’就行了。
需求扩展
有了标志位的使用,在实际中可以做更复杂的控制,比如将填报嵌入业务流程中,实现数据的审核,回退,入库等操作,后续文章我们会做详细的介绍。

作者:gxy
链接:http://c.raqsoft.com.cn/article/1542007656738?r=IBelieve
来源:乾学院
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

目录
相关文章
|
9月前
|
运维 监控 Linux
|
4月前
|
缓存 NoSQL 关系型数据库
redis和缓存及相关问题和解决办法 什么是缓存预热、缓存穿透、缓存雪崩、缓存击穿
本文深入探讨了Redis缓存的相关知识,包括缓存的概念、使用场景、可能出现的问题(缓存预热、缓存穿透、缓存雪崩、缓存击穿)及其解决方案。
316 0
redis和缓存及相关问题和解决办法 什么是缓存预热、缓存穿透、缓存雪崩、缓存击穿
|
6月前
|
jenkins Java 测试技术
Jenkins 在持续集成/持续交付(CI/CD)管道中的应用
【8月更文第31天】 在现代软件开发过程中,持续集成(Continuous Integration, CI)和持续交付(Continuous Delivery, CD)已经成为提升开发效率和软件质量的重要实践。Jenkins 是一个广泛使用的开源工具,它能够帮助团队实现自动化构建、测试和部署,是 CI/CD 流水线的核心组件之一。本文将详细介绍 Jenkins 在 CI/CD 管道中的应用,并提供具体的代码示例。
296 0
|
4月前
|
Ubuntu 应用服务中间件 nginx
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
本文是关于Ubuntu系统中使用ffmpeg 3.2.16源码编译OpenCV 3.4.0的安装笔记,包括安装ffmpeg、编译OpenCV、卸载OpenCV以及常见报错处理。
307 2
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
|
4月前
|
Java Apache
Apache POI java对excel表格进行操作(读、写) 有代码!!!
文章提供了使用Apache POI库在Java中创建和读取Excel文件的详细代码示例,包括写入数据到Excel和从Excel读取数据的方法。
229 0
|
SQL 关系型数据库 MySQL
从一个案例深入剖析InnoDB隐式锁和可见性判断(2)
从一个案例深入剖析InnoDB隐式锁和可见性判断
160 0
从一个案例深入剖析InnoDB隐式锁和可见性判断(2)
|
NoSQL 关系型数据库 索引
从一个案例深入剖析InnoDB隐式锁和可见性判断(1)
从一个案例深入剖析InnoDB隐式锁和可见性判断
104 0
从一个案例深入剖析InnoDB隐式锁和可见性判断(1)
|
9月前
|
算法 Java 大数据
利用Java实现随机采样
利用Java实现随机采样
300 0
|
关系型数据库 MySQL 索引
从一个案例深入剖析InnoDB隐式锁和可见性判断(3)
从一个案例深入剖析InnoDB隐式锁和可见性判断
127 0
|
存储 关系型数据库 MySQL
从一个案例深入剖析InnoDB隐式锁和可见性判断(4)
从一个案例深入剖析InnoDB隐式锁和可见性判断