Appearance
编号
编号是由系统生成的唯一的标识一条记录的序列号
说明
说明项 | 内容 |
---|---|
分类 | 静态字段 |
存储类型 | 字符串 |
是否可排序 | 是 |
是否支持过滤 | 是 |
支持过滤器类型 | 包含、不包含、等于、不等于、等于空、不等于空、开始是、结尾是、在列表中、不在列表中 |
设置项
设置项 | 说明 |
---|---|
编号计算表达式 | 使用表达式设计编号的生成逻辑 |
自增序列重置方式 | 可设置编号自增序列的重置周期 选项: 不重置 、每日重置 、每月重置 、每年重置 |
在数据库中的存储格式
字段类型 | 说明 |
---|---|
varchar(128) | 可变长字符串,最多128个字符 |
编号的生成规则
每一个编号系统都会自动生成一个自增序列seq
,每创建一条记录seq
的值都会增加1。编号由表达式计算得出,表达式的返回值是一个字符串。 在表达式中可以使用当前记录record
和seq
组合的方式生成。在不设置表达式的情况下,编号就是seq。
下面是一个生成编号的示例
注意事项
编号必须是唯一的,在创建记录时系统会做唯一性检查。编号只在新增记录时计算,不能修改。
如果需要修改编号字段,需要调用脚本函数
javascript
informat.table.update()
//或者
informat.table.updateList()
自增序列重置
在一些业务场景中需要对编号字段的seq序列进行重置。编号字段提供了自动重置
和手动重置
自动重置
在一些基于日期生成记录编号的系统中,。编号的生成规则 yyyy-mm-dd-seq,这里的seq每天都需要重置。
- 每日重置 在每天的00:00重置seq为1
- 每月重置 在每个月第一天的 00:00重置seq为1
- 每年重置 在每年的第一天的 00:00重置seq为1
生成yyyy-mm-dd-seq的表达式为
javascript
${Misc.formatDate(Date.sysdate(),'yyyy-MM-dd')}-${seq}
手动重置
在一些场景下,期望将编号字段的seq也重置为从指定位置开始时,可以通过脚本对数据表的编号字段进行设置。
比如重置模块标识符为order
的订单表中的字段标识符为orderNO
的订单编号字段。
js
// 将编号seq重置为从1开始
informat.table.setIdFieldSeq('order', 'orderNO', 1);
使用场景举例
- 数据表数据清空数据后,将编号的seq序列重置为1
- 数据表数据来自其他系统,将编号的seq序列重置为指定的大小
- 基于日期生成的编号,重置不是基于
年
、月
、日
或者重置时需要是指定的大小。
排序
编号在数据库中会被存储为字符串,所有排序规则会遵循字符串的方式进行,例如系统中数据如下
编号 | 名称 |
---|---|
1 | 数据1 |
2 | 数据2 |
3 | 数据3 |
4 | 数据4 |
5 | 数据5 |
6 | 数据6 |
7 | 数据7 |
8 | 数据8 |
9 | 数据9 |
10 | 数据10 |
因为编号是字符串
类型,对该字段排序时,数据库会按照字符串的排序规则进行排序。比如在升序排列时,最终的顺序为
编号 | 名称 |
---|---|
1 | 数据1 |
10 | 数据10 |
2 | 数据2 |
3 | 数据3 |
4 | 数据4 |
5 | 数据5 |
6 | 数据6 |
7 | 数据7 |
8 | 数据8 |
9 | 数据9 |
如果希望编号是按照数字顺序排列,那么需要增加一个函数字段将字符串转换为数字,然后对函数字段进行排序
sql
CAST_NUMERIC (idnumber)
示例
编号是递增的6位数字,例如T000001
js
T${String.lpad(seq,6,'0')}
编号是带日期的递增6位数字,例如2024-07-19-000001
js
${Misc.formatDate(Date.sysdate(),'yyyy-MM-dd')}-${String.lpad(seq,6,'0')}
使用类型字段作为前缀,6位数字编号
js
${record.type}-${String.lpad(seq,6,'0')}