Skip to content

编号

编号是由系统生成的唯一的标识一条记录的序列号

说明

说明项内容
分类静态字段
存储类型字符串
是否可排序
是否支持过滤
支持过滤器类型包含、不包含、等于、不等于、等于空、不等于空、开始是、结尾是、在列表中、不在列表中

设置项

设置项说明
编号计算表达式使用表达式设计编号的生成逻辑
自增序列重置方式可设置编号自增序列的重置周期
选项:不重置每日重置每月重置每年重置

在数据库中的存储格式

字段类型说明
varchar(128)可变长字符串,最多128个字符

编号的生成规则

每一个编号系统都会自动生成一个自增序列seq,每创建一条记录seq的值都会增加1。编号由表达式计算得出,表达式的返回值是一个字符串。 在表达式中可以使用当前记录recordseq组合的方式生成。在不设置表达式的情况下,编号就是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不是从1开始的场景,需要使用脚本搭配定时任务进行手动重置。

手动重置

在一些场景下,期望将编号字段的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')}

展示效果

展示效果