行式填报表轻松搞定流水号

简介: 多用户填报主键重复,常会造成数据丢失,为避开这个问题我们长依赖于数据库的主键自增,那么,怎样可以做到不依赖数据库实现流水号自增呢,去乾学院看个究竟:<a href="http://c.raqsoft.

在各式各样的报表业务需求中,有这样一类,不仅要对数据进行统计呈现,还要基于这些数据做增、删、改的操作并与数据库进行交互。这种情况下,无论从数据库统一管理还是数据合法性角度考虑,都难免需要进行诸如自动计算、校验、跨表取数之类的计算。今天,小编就带领大家 get 其中的一个新姿势:自动计算特殊用法之“流水号”。
场景举栗如下:
实际项目应用中,当多用户并发填报时我们常常会遇到主键重复的问题,造成的结果便是前一个用户填报的内容,会被另一个用户给覆盖掉,从而造成数据丢失。如果由开发人员通过编程来解决这个问题,一般都是比较麻烦的事情。而如果交由数据库去处理,就变得简单多了,因为不管多少个用户,对数据库来说只是一个更新数据库的命令队列,数据库本身会对主键的问题进行判断。这也就是大多数数据库能够提供字段自动增长功能的原因。
不过选对了报表工具,我们也可以不依赖数据库就轻松生成流水号,避免因为主键重复造成数据丢失。下面我们就以润乾报表为例,看一下具体的做法:
方法一:序号格
报表设计界面如下图所示:
1

其中,
数据处理部分选择【多源 SQL】然后【使用向导生成脚本】,“数据来源”设置如下:
2

“数据去向”指定编号字段作为主键,如下图所示:
3

保存对象的旧数据,提取前两步设置的对象名供报表取数回填使用。
4

报表设计方面
第 2 行标题名均与数据库字段名称一致;
A3 单元格,设置字段名称为 employee. 编号;
I3 单元格,表达式为 =H3*1.2, 实现自动计算;
A3-I4 单元格类型为数值格。
要求新增行时,编号自动增长,最终效果如下图所示
5

重点来了,实现方法只需选中 A3 单元格,勾选右侧属性【类型】–【序号格】即可。
6

【注】此方法采用数据全查询且按照间隔为 1 的递增规则,也就是在当前值的基础上进行递增计算,然后把每一次计算出的新值作为当前值。
方法二:UUID 算法
首先,在报表展现的 jsp(如:previewInput.jsp) 页面中定义 js 方法如下:

function newUUID() 
{ 
        var uuid = ""; 
        for (var i = 1; i <= 16; i++){ 
         var n = Math.floor(Math.random()*16.0).toString(16); 
         uuid +=   n; 
      } 
    var len = uuid.length; 
    return uuid;    
} 

然后,修改方法一中的报表,不要勾选【序号格】,然后将【缺省值表达式】设置为 newUUID(),调用自定义的 UUID 算法。如下图
7

最终页面上新增行展现效果如下,生成 16 位的字符串。
8

【注】此方法将按照一定规则随机产生主键,由数字、字符串等组成的 16 位字符串。
通过以上 2 种方法,我们在报表端就可以轻轻松松搞定主键自增长,永久避免因主键冲突导致数据丢失的事情。
最最后,我们来回顾一下其中的技术要点:

  1. 生成间隔为 1 的连续递增数值做主键:
    【技能】报表设计区域右侧属性栏–类型–序号格 勾选即可。
  2. 生成由数字,字母组成的 16 位随机字符串做主键:
    【技能】巧妙运用 UUID 方法 +【缺省值表达式】。

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

目录
相关文章
|
SQL 大数据 HIVE
电商项目之交易订单明细流水表 SQL 实现(上)|学习笔记
快速学习电商项目之交易订单明细流水表 SQL 实现(上)
电商项目之交易订单明细流水表 SQL 实现(上)|学习笔记
|
4月前
|
XML JSON API
义乌购API接口揭秘:轻松获取海量商品列表数据
义乌购商品列表数据接口基于RESTful架构,支持HTTP协议,使开发者能按关键词或条件搜索商品列表。需先注册获取App Key/Secret,完成认证后使用Access Token调用接口。接口返回商品标题、价格等信息,适用于电商应用开发、数据分析及第三方服务对接。更多详情参阅:b.mrw.so/2Pv6Qu。
|
6月前
|
分布式计算 大数据 关系型数据库
MaxCompute产品使用问题之如何修改表的字段或者在表中间加入某些字段
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
117 1
|
SQL 大数据 开发者
电商项目之交易订单明细流水表 SQL 实现(下)|学习笔记
快速学习电商项目之交易订单明细流水表 SQL 实现(下)
电商项目之交易订单明细流水表 SQL 实现(下)|学习笔记
|
SQL 存储 JSON
XssFilter使用记录
xss意思是跨域网站攻击,这里不探讨xss的起源,单纯记录下xss在项目中的实际应用,xss防止javascrpts脚本注入类似于sql注入,项目中使用到了xssfilter所以记录在此
130 0
宜搭,删除入库表如何更新库存底表,把删除入库表的数量加回底表库存中
删除入库表如何更新库存底表,把删除入库表的数量加回底表库存中
|
数据处理 数据库
简单的EXCEL导入实战(错误数据记录原因,正确数据入库)
简单的EXCEL导入实战(错误数据记录原因,正确数据入库)
1587 0
简单的EXCEL导入实战(错误数据记录原因,正确数据入库)
|
SQL 数据库
使用 DDL 语句分别创建仓库表、供应商表、产品表和入库表,并对其进行操作
使用 DDL 语句分别创建仓库表、供应商表、产品表和入库表,并对其进行操作
196 0
|
BI 数据处理
脚本填报表的条件查询
在上一篇《脚本模式下的填报表制作》中,我们详细讲述了如何使用脚本进行数据处理、制作填报表,今天我们盘道一下脚本模式下如何实现条件查询。 一、需求描述 然后再进行增删改操作。例如,先过滤出所关心城市的客户信息,然后再对查询结果进行更新操作。