Поскольку unid документов (если не подделан) состоит из части, вычисленной по идентификатору реплики базы данных, и преобразованной временной метки для «созданного», это не является простым совпадением, что «тот же» документ имеет аналогичный unid.
Но это НИЧЕГО, на которое вы можете положиться, и зависит от того, как вы создаете свои документы в архиве.
Если бы вы сделали что-то вроде
Set docArchive = New NotesDocument( dbArchive )
Call doc.CopyAllItems( docArchive, True )
, тогда юниды не будут иметь ничего общего друг с другом.
Если вы используете doc.CopyToDatabase
, это будет зависеть от количества попыток и может привести к
- одинаковому unid в цели
- аналогичному unid в цели (сначалакопия документа)
- совершенно другой unid в целевом объекте (последующие копии)
Чтобы идентифицировать документ, у вас должен быть «ключ» для его поиска.
Один из способов - использовать ТО ЖЕ ВСЕГДА:
Set docArchive = New NotesDocument( dbArchive )
Call doc.CopyAllItems( docArchive, True )
docArchive.Universalid = doc.Universalid
Call docArchive.Save()
Тогда вы можете проверить наличие, например:
On Error Resume Next
Set docArchive = dbArchive.getDocumentByUnid( doc.UniversalID )
On error Goto 0
If Not docArchive is Nothing then 'EXISTS
....
End If
Если вы не хотите идтинапрямую с помощью universalid вы можете вычислить ключ или снова использовать универсальный идентификатор исходного документа в качестве ключа:
Set docArchive = doc.CopyToDatabase( dbArchive )
strArchiveKey = doc.Universalid
'or compose unique key from 3 individual fields:
strArchiveKey = doc.getItemvalue( "OneField" )(0) & "-" & doc.getItemvalue( "AnotherField" )(0) & "_" doc.getItemvalue( "YetAnotherField" )(0)
Call docArchive.ReplaceitemValue( "ArchiveKey", strArchiveKey )
Call docArchive.Save(True, True, True)
, а затем найти архивный документ в результате поиска или, что лучше, из GetDocumentByKey в представлении, отсортированном поArchiveKey:
Set docArchive = db.Search( {ArchiveKey = "} & strArchiveKey & {"}, Nothing, 0).getFirstDocument()
Set docArchive = viwLkp.GetDocumentByKey( strArchiveKey )