填报表如何用自定义规则生成主键

在做填报表单录入时,一些主键字段往往不需要用户手动录入,希望系统自动生成,主键字段的生成一般有几种方式:

一:数据库自增长,往数据库 insert 数据时,对应主键字段由数据库自动生成,如 sqlserver、mysql 字段可以设置自增长。

二:由报表页面生成,润乾填报表支持通过 js 函数生成流水号,这样在 js 函数中可以生成相应的主键值,这种一般在行式填报表中插入行时用的较多,但是缺点是比较难和数据库做交互。

三:由报表初始化生成,并且生成时可以获取到数据库中的初始值,然后根据自己的业务规则生成新的主键值,下面以一个新员工入职申请单录入填报表为例介绍下主要需求以及润乾中是如何实现的。

需求:

要求主键由报表生成,并且主键组成规则是“部门名称”+“录入年月”+ 自增长,由 0001 开始,本部门当月自增长,下月或者其他部门从 0001 开始,比如 IT 部门的第一天是 IT2021090001,如果同月同部门再录入就是 IT2021090002,下面看下报表是如何实现的。

1、 设计填报模板,填报模板按照实际表样定制就行,如图:

imagepng

具体填报模板定制可以参考报表文档中的填报教程。

2、 数据来源

主键的自定义生成主要是在数据来源中设置,如下:

imagepng

A1:=connect(“mysql”),连接 mysql 数据源

A2:>empcode=A1.query@1(“select max(code) from employee where dept=?”,deptName),code 字段存储的主键,这个表达式含义是取当前部门内最大的那个 code 值,也就是最后的那个主键赋值给 empcode 变量,这里没加当月,实际中有需求再加个当月的判断就行,注:deptName 是报表中定义的参数,用于接收部门。

A3~A4,判断 empcode 是否为空,如果空的话编号要从 0001 开始,>empcode=deptName+string(now(),“yyyyMM”)+“0001”,这里做了个字符串拼接生成主键值,赋值给 empcode 变量

B6:=int(right(empcode,4))+1,如果不为空,则取右四位,然后值 +1

B7:=fill(“0”,4-len(string(B6)))+string(B6),B6 单元格转换成了整数,所以这里前边拼接相应个数的 0,形成 000n 这种格式

B8:>empcode=left(empcode,7)+B7,生成主键赋值给 empcode 变量。

B6~B8 分成了三个单元格执行脚本,这里主要为了看着方便点,实际中可以合并到一个脚本格子里

A9:>employee=create(code,name,gender,birthday,workdate,dept,native,salary).insert(0,empcode),像这种信息录入报表,一般情况下都是新增数据,所以此处生成了多个字段组成的空序表,然后 insert 了一条记录,对应 code 的值就是之前处理后的主键值(empcode),并赋值给 employee 变量放到填报表中展示。

这样报表展示时就会根据相应规则生成主键,如下图:

imagepng

3、 数据去向

一般情况下数据去向脚本是通过向导自动生成,此处要更改下,如图:

imagepng

A2:>A1.update@ik(employee,employee,‘code’,‘name’,‘gender’,‘birthday’,‘workdate’,‘dept’,‘native’,‘salary’;code),因为主要是 insert 操作,所以去掉了原表达式中的 旧对象 employee_od,然后在 update 函数中加上了参数 @i 选项,表示每次都是 insert。

4、 访问页面后,编号默认为 IT2021090001,更改其他数据点提交后刷新页面,
imagepng

编号会自动增加 1,这样就可以实现自定义规则生成主键。当然实际应用中也可以用其他规则,思路都是一样的,都是在数据来源那里根据规则自己生成对应的主键放到相应位置。

以下是广告时间

对润乾产品感兴趣的小伙伴,一定要知道软件还能这样卖哟性价比还不过瘾? 欢迎加入好多乾计划。
这里可以低价购买软件产品,让已经亲民的价格更加便宜!
这里可以销售产品获取佣金,赚满钱包成为土豪不再是梦!
这里还可以推荐分享抢红包,每次都是好几块钱的巨款哟!
来吧,现在就加入,拿起手机扫码,开始乾包之旅



嗯,还不太了解好多乾?
猛戳这里
玩转好多乾