PeopleSoft-序号自增

序号自增

代码写在页面对应表的RowInit中,每次点击添加一行时,会触发该代码,代码如下:

实践证明:代码写在Rowinit中,每次加载该表时,直接生成的序号保存在缓存中,保存时,如果该行数据无实际业务数据,但是有必填字段,会出触发必填校验。应该将代码写在该表的某个必填字段的fieldchange中,只有当填写了实际业务数据时,才会自增序号,否则不触发自增序号,缓存中也就无数据,保存时便不会触发必填校验。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/*==========================================================
任务编号:
说 明: 序号自增
----------------------------------------------------------
日期 作者 说明
2020-05-11 创建
===========================================================*/
Local number &seq = 0;
If None(C_SOCI_RELA_TBL.SEQNBR) Then
Local Rowset &rs = GetLevel0()(1).GetRowset(Scroll.C_SOCI_RELA_TBL);
For &i = 1 To &rs.ActiveRowCount
If &rs(&i).C_SOCI_RELA_TBL.SEQNBR.Value > &seq Then
&seq = &rs(&i).C_SOCI_RELA_TBL.SEQNBR.Value;
End-If;
End-For;
C_SOCI_RELA_TBL.SEQNBR.Value = &seq + 1;
End-If;

2022年6月26日,在工作实践中发现,使用以上逻辑处理序号问题时,会出现缓存区中的序号与数据库中数据出现冲突无法保存的情况。

解决方案:

​ 在组件加载时,先查询数据库中最大序号保存至组件级字段,生命周期为该组件加载至关闭;然后,每次新增一条记录时,该字段+1,即可避免缓存区中序号与数据库序号冲突。

优点:可完全避免数据冲突保存失败。

缺点:序号只能在原有基础上+1,导致序号无法充分使用。