我正在创建一个代理将取消的文档移动到存档数据库,在复制到存档数据库之前,我想检查该文档是否已存在于存档数据库中。数据库中有一些文档的主字段是相同的,因此我无法使用这些字段来检查它是否相同。有没有办法检查两个数据库中的文档是否是同一个文档?我发现对于同一个文档,unid的某些部分在两个数据库中是相同的(例如:源数据库中的unid:613D530A7B107F468 52578E9001DCC89目标数据库中的unid:85258289002735FB852 578E9001DCC89),但我不确定这是否是正确的标志。
由于文档的 unid(如果未被篡改)由根据数据库副本 ID 计算的一部分和“创建”的转换时间戳组成,因此“相同”文档具有相似的 unid,这并非纯粹巧合。
但这不是您可以依赖的,并且取决于您在存档中创建文档的方式。
如果你做了类似的事情
Set docArchive = New NotesDocument( dbArchive )
Call doc.CopyAllItems( docArchive, True )
Run Code Online (Sandbox Code Playgroud)
那么这些单位之间就没有任何关系了。
如果您使用doc.CopyToDatabase,这将取决于尝试次数,并可能导致
要识别您的文档,您必须有一个找到它的“钥匙”。
一种方法是使用相同的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)
| 归档时间: |
|
| 查看次数: |
1160 次 |
| 最近记录: |