我在Lotus Domino中有一个带有字段的应用程序
UNIDID - 值(计算的)...
我希望每次创建一个新条目时,此字段增加1,新值应存储在新记录文档中。
我有一个@dbcolumn公式,它将为我提供UNIDID字段中的最后一个条目 -
mFind:= @ DbColumn(“”:“NoCache”; @DbName;“lkpEmpMasterbyOnlyUnidCode”; 1);
如何增加mFind并以“ UNIDXXXX ”的形式提交?
答案 0 :(得分:3)
回答您的具体问题:
lastEntry:= @Subset(mFind; -1); “UNID”+ lastEntry;
但是你应该考虑以下几点:
“UNID”是一个在Notes和Domino中具有非常特定含义的术语。它指的是自动分配给每个数据库中每个文档的通用ID。如果您在应用程序中将此术语用于其他目的,那么当某些其他Notes专家必须查看您的应用程序时,您可能会引起混淆。
分配顺序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注释客户端&设计师并且从未需要改变配方,事实上它在所有后期版本中多次重复使用。如果在多个服务器上创建文档,它将无法工作,因为预定代理是获得真正唯一序列编号的唯一方法。