如何在莲花多米诺骨牌中创建自动递增字段?

时间:2011-12-16 09:42:27

标签: lotus-notes lotus lotus-domino

我在Lotus Domino中有一个带有字段的应用程序

UNIDID - 值(计算的)...

我希望每次创建一个新条目时,此字段增加1,新值应存储在新记录文档中。

我有一个@dbcolumn公式,它将为我提供UNIDID字段中的最后一个条目 -

mFind:= @ DbColumn(“”:“NoCache”; @DbName;“lkpEmpMasterbyOnlyUnidCode”; 1);

如何增加mFind并以“ UNIDXXXX ”的形式提交?

4 个答案:

答案 0 :(得分:3)

回答您的具体问题:

lastEntry:= @Subset(mFind; -1);   “UNID”+ lastEntry;

但是你应该考虑以下几点:

  1. “UNID”是一个在Notes和Domino中具有非常特定含义的术语。它指的是自动分配给每个数据库中每个文档的通用ID。如果您在应用程序中将此术语用于其他目的,那么当某些其他Notes专家必须查看您的应用程序时,您可能会引起混淆。

  2. 分配顺序ID的最佳方法是让服务器为您执行此操作。即,使用空字段保存文档,并创建在新文档和已编辑文档上运行的代理,检查空字段,并在必要时分配下一个可用ID。由于一次只能在数据库中运行一个代理程序,并且它一次只能处理一个文档,因此可以保证您不可能同时使用相同的唯一ID保存两个文档。这样做的缺点是,在代理有机会运行之前,您无法向用户显示顺序ID。

答案 1 :(得分:2)

答案 2 :(得分:2)

阅读IBMer Andre Guirard撰写的comprehensive treatment of sequential numbering in Notes/Domino。他认为使用@DBColumn进行序列编码会产生重​​大的性能风险,并为替代方法提供算法和代码。

我推荐使用清单2中的代码标题“按需生成数字”标题下的方法。文档锁定过度 - 只是检测编号文档是否已被修改,因为它已被读取并且相应的反应就足够了。

答案 3 :(得分:1)

此公式来自我的技术说明数据库,使用表单上的计算合成字段生成顺序递增的数字,以便用户可以看到该数字,但只有在保存文档时才会修复。

T_List:= @ DbColumn(“”:“NoCache”;“”;“RefNumView”; 1); @If(@IsNewDoc& @Elements(T_List)= 0; 1; @IsNewDoc&!@ IsError(T_List); @ Subset(T_List; 1)+ 1; RefNumber)

您需要一个视图第一列按降序排序,并带有存储您的号码的字段,如果视图没有记录,则上面的代码开始编号为1

该数据库是在Notes 4.5中开发的,但我现在仍在使用8.5注释客户端&设计师并且从未需要改变配方,事实上它在所有后期版本中多次重复使用。如果在多个服务器上创建文档,它将无法工作,因为预定代理是获得真正唯一序列编号的唯一方法。