You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

表单未保存仅打开关闭时Number seq自动递增问题求助

解决表单未保存时编号序列自动递增的问题

核心原因

默认的编号序列(Number Sequence)生成逻辑是生成即消耗,只要调用了numberSeq.num()或类似方法获取编号,系统就会将该编号标记为已使用,即便后续未完成表单保存操作,也不会回滚这个编号。

解决方案

1. 使用编号序列的预留(Reserve)机制

在表单初始化或获取编号时,调用预留方法而非直接生成:

NumberSeq numberSeq;
NumberSeqId numberSeqId = NumberSeqReference::findReference(typeId2ExtendedTypeId(tableStr(YourTable))).NumberSeqId;
// 第三个参数false表示预留编号,不立即消耗
numberSeq = NumberSeq::newGetNum(numberSeqId, true, false); 

// 保存时正式消耗编号
if (yourTable.validateWrite())
{
    numberSeq.used(); // 标记编号为已使用
    yourTable.insert();
}
else
{
    numberSeq.abort(); // 放弃预留编号,编号会回到序列池
}

2. 调整编号序列的系统配置

  • 进入Organization administration > Number sequences > Number sequences,找到目标编号序列
  • 将Continuous属性设置为No:非连续模式下,未使用的编号会被系统回收,但此配置会导致编号出现断号,仅适合对编号连续性要求不高的业务场景

3. 表单事件中添加回滚逻辑

在表单的关闭或取消事件中,判断未保存时回滚预留的编号:

public void close()
{
    if (numberSeq && !this.isSaved())
    {
        numberSeq.abort();
    }
    super();
}

注意事项

  • 预留机制仅适用于支持该逻辑的编号序列类型,部分系统内置编号序列可能无法修改此行为
  • 非连续编号配置需结合业务需求评估,避免影响业务流程对编号的依赖

内容的提问来源于stack exchange,提问作者Restler-B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 19:48:25