在其中一个 lotus notes 数据库中,由于计划代理和同时处理文档的任何用户,导致复制/保存冲突过于频繁。
有什么办法可以避免这种情况。
谢谢,惠普
在其中一个 lotus notes 数据库中,由于计划代理和同时处理文档的任何用户,导致复制/保存冲突过于频繁。
有什么办法可以避免这种情况。
谢谢,惠普
除了合并冲突之外的几个选项:
更改计划避免这种情况的最佳方法是让您的计划代理在用户不太可能访问系统的时间运行。如果客户端文档上的 LastContact 字段在检查所有联系人文档时由代理每小时更新一次,那么代理可能应该在夜间运行。
在用户操作时运行代理也可能是代理不应该按计划运行,但应该在用户执行某些操作时运行。例如,当用户保存支持的联系人文档时,运行代理来更新客户端文档。
将表单分解成更小的部分 要考虑的第三件事是重新设计表单,以便并非每条数据都位于主表单上。例如,如果对最近与客户联系的评论当前保存在客户文档的某个字段中,您可以更改设计以使用单独的 ClientMeeting 表单,从该表单中,会议评论显示在嵌入视图或计算文本中(或使用 Xpages 设计)。
尽管我是一名开发人员,但我认为代表/保存更多是设计决策的结果,而不是其他任何事情。
如果这是一个关键任务应用程序,请考虑创建一个带有锁定文档的数据库。这意味着,每次用户打开文档时,都会创建一个单独的锁定文档。
然后对代理进行编码以查看代理想要修改的每个文档是否存在锁定文档。如果是,请跳过该文档。
文档关闭应该删除文档锁。
lock-doc 应该在文档打开时创建,而不仅仅是读取。这样,当用户以阅读模式打开文档时,代理也将无法修改。这是为了禁止用户在之后更改为编辑模式并进行更改。
如果代理的修改时间很长,它也应该创建锁定文档。
您可以在相关表单上使用“冲突处理”选项并选择“合并冲突”或“合并/无冲突”,以便让 Notes 处理编辑冲突的合并。
从帮助数据库:
At the "Conflict Handling" section of the Form Info tab, choose one of the following options for the form:
Create Conflicts -- Creates conflicts so that a replication conflict appears as a response document to the main document. The main document is selected based on the time and date of the changes and an internal document sequence number.
Merge Conflicts -- If a replication conflict occurs, saves the edits to each field in a single document. However, if two users edit the same field in the same document, Notes saves one document as a main document and the other document as a response document marked as a replication conflict. The main document is selected based on the criteria listed in the bullet above.
Merge/No Conflicts -- If replication occurs, saves the edits to each field in a single document. If two users edit the same field in the same document, Notes selects the field from the main document, based on time and date, and an internal document sequence number. No conflict document is generated, instead conflicting documents are merged into a single document at the field level.
Do Not Create Conflicts -- No merge occurs. IBM® Lotus® Domino(TM) simply chooses one document over another. The other document is lost.
恕我直言,解决用户和代理之间冲突的最佳方法是确保他们在不同的文档上进行操作。即,有两个文档具有共同的密钥。如果可以方便地在视图中以这种方式显示他们,他们可以是父母和孩子,但他们不一定是。出于讨论的目的,只需将它们称为 DocA 和 DocB。
DocA 由用户阅读和更新。当用户查看 DocA 时,计算域公式可以通过 DbLookup 或 GetDocField 从 DocB 中提取信息。用户从不更新 DocB。
另一方面,DocB 由代理读取和更新,但代理只读取 DocA。他们从不更新它们。
如果您以任何其他方式设计应用程序,那么您要么必须使用锁定 - 这可能会导致无法在需要时更新某些内容,或者接受冲突可能偶尔发生并且需要解决的事实.
请注意,即使使用此策略,如果您有多个数据库副本,您仍然可能会发生冲突。根据@Per Henrik Lausten 的回答,您可以使用表单属性的“冲突处理”部分来帮助最小化复制冲突,但是由于您正在谈论现有的,请参阅我对他的回答的评论,以获取有关您会做什么的更多信息必须做才能使用此功能。
在以后的 Notes 版本中,有文档锁定的概念,正确使用可以防止冲突(但也会增加复杂性)。
通常可以通过计划在用户不在系统上的深夜运行代理来避免大多数冲突。如果这不是一个选项,那么锁定可能是最好的解决方案。如果冲突不是太多,您可能会受益于添加过滤视图以仅显示冲突,这将使查找和解决它们更容易。