如何检查 IBM Domino 中已存在的文档

Fra*_*uan 0 lotus-domino

我正在创建一个代理将取消的文档移动到存档数据库,在复制到存档数据库之前,我想检查该文档是否已存在于存档数据库中。数据库中有一些文档的主字段是相同的,因此我无法使用这些字段来检查它是否相同。有没有办法检查两个数据库中的文档是否是同一个文档?我发现对于同一个文档,unid的某些部分在两个数据库中是相同的(例如:源数据库中的unid:613D530A7B107F468 52578E9001DCC89目标数据库中的unid:85258289002735FB852 578E9001DCC89),但我不确定这是否是正确的标志。

Tor*_*ink 5

由于文档的 unid(如果未被篡改)由根据数据库副本 ID 计算的一部分和“创建”的转换时间戳组成,因此“相同”文档具有相似的 unid,这并非纯粹巧合。

但这不是您可以依赖的,并且取决于您在存档中创建文档的方式。

如果你做了类似的事情

Set docArchive = New NotesDocument( dbArchive )
Call doc.CopyAllItems( docArchive, True )
Run Code Online (Sandbox Code Playgroud)

那么这些单位之间就没有任何关系了。

如果您使用doc.CopyToDatabase,这将取决于尝试次数,并可能导致

  • 目标中的相同单位
  • 目标中类似的unid(文档的第一个副本)
  • 目标中完全不同的unid(后续副本)

要识别您的文档,您必须有一个找到它的“钥匙”。

一种方法是使用相同的universalid:

Set docArchive = New NotesDocument( dbArchive )
Call doc.CopyAllItems( docArchive, True )
docArchive.Universalid = doc.Universalid
Call docArchive.Save()
Run Code Online (Sandbox Code Playgroud)

然后你可以检查是否存在,例如:

Set docArchive = New NotesDocument( dbArchive )
Call doc.CopyAllItems( docArchive, True )
Run Code Online (Sandbox Code Playgroud)

如果您不想直接使用universalid,您可以计算一个密钥或再次使用源文档的universalid作为密钥:

Set docArchive = New NotesDocument( dbArchive )
Call doc.CopyAllItems( docArchive, True )
docArchive.Universalid = doc.Universalid
Call docArchive.Save()
Run Code Online (Sandbox Code Playgroud)

然后通过搜索找到存档文档,或者更好地通过按 ArchiveKey 排序的视图中的 GetDocumentByKey 找到存档文档:

On Error Resume Next
Set docArchive = dbArchive.getDocumentByUnid( doc.UniversalID )
On error Goto 0
If Not docArchive is Nothing then 'EXISTS
    ....
End If
Run Code Online (Sandbox Code Playgroud)