2

我有一个领域的莲花多米诺应用

UNIDID -数字(计算)...

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

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

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

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

4

4 回答 4

3

使用文档锁定以确保顺序文档编号解决方案中的编号唯一性

于 2011-12-16T10:34:39.140 回答
3

要回答您的具体问题:

lastEntry := @Subset(mFind;-1); “UNID”+最后一个条目;

但这里有几件事你应该考虑:

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

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

于 2011-12-16T13:50:48.683 回答
2

阅读IBM 人 Andre Guirard 编写的Notes/Domino 中对顺序编号的综合处理。他认为使用@DBColumn 进行顺序编号会带来重大的性能风险,并为替代方法提供算法和代码。

我推荐使用清单 2 中的代码在“按需编号生成”标题下的方法。文档锁定是多余的——仅检测编号文档在读取后是否已被修改并做出相应的反应就足够了。

于 2011-12-16T18:52:29.213 回答
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 notes 客户端和设计器一起使用它,并且从未需要更改公式,事实上,多年来它在所有更高版本中被多次重用。如果文档是在多个服务器上创建的,它将无法工作,因为调度代理是获得真正唯一的顺序编号的唯一方法。

于 2011-12-17T15:29:06.180 回答