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

如何基于SalOutCd7Plc与BseCd自动生成TmpltId编号?

实现按SalOutCd7Plc和BseCd分组的TmpltId自动递增方案

核心逻辑

以(SalOutCd7Plc, BseCd)作为分组键,每个分组内的TmpltId独立从1开始递增,不同分组的编号互不干扰。

具体实现步骤

  1. 事务属性配置

    • 确保事务包含SalOutCd7Plc、BseCd、TmpltId三个属性,将TmpltId设置为非自动编号(取消GeneXus默认的自动编号配置),数据类型选用数值型(如Int)。
  2. 新增记录时的自增逻辑编写

    • 打开Work With Plus的Web面板,定位到新增记录的预处理事件(如事务的BeforeInsert事件,或面板的OnNewRecord事件,依GeneXus版本调整)。
    • 编写分组查询与赋值逻辑:
      // 查询当前分组下的最大TmpltId
      &MaxTmpltId = Max(TmpltId) Where SalOutCd7Plc = &SalOutCd7Plc and BseCd = &BseCd
      // 赋值新的TmpltId
      If &MaxTmpltId is null
          &TmpltId = 1
      Else
          &TmpltId = &MaxTmpltId + 1
      EndIf
      
    • 并发防护:为避免多用户同时插入时出现编号重复,需确保操作的原子性——可通过开启事务锁,或在数据库层面添加组合唯一约束来兜底。
  3. 数据库约束加固

    • 在事务对应的数据库表中添加组合唯一约束:UNIQUE(SalOutCd7Plc, BseCd, TmpltId),强制保证同一分组内的TmpltId唯一,即使程序逻辑出现异常,数据库也会拦截违规数据。
  4. 场景测试验证

    • 分别测试以下场景,确认逻辑符合预期:
      • 插入SalOutCd7Plc=1且BseCd=1的记录,验证TmpltId从1开始连续递增;
      • 插入SalOutCd7Plc=1且BseCd=2、SalOutCd7Plc=2且BseCd=1的记录,验证每组的TmpltId均从1开始;
      • 同一分组内多次插入,确认编号无断层、无重复。

内容的提问来源于stack exchange,提问作者dragonquila

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 12:50:26