Если вы запрашиваете только одного клиента, тогда это возможно без блокировки документа, но для этого нужны некоторые продвинутые методы:
Вы можете использовать NotesUIWorkspace, чтобы получить открытый в данный момент документ для любого данного внутреннего документа, если вы установилипараметр "newInstance" в false.
Чтобы получить текущий открытый документ (как uidocument, но, конечно, вы можете использовать свойство .Document, чтобы получить из него NotesDocument), вы используете следующий код.Если он ничего не возвращает, то документ не открыт:
Dim ses as New NotesSession
Dim ws as New NotesUIWorkspace
Dim docToGetFrontendFor as NotesDocument
Dim uidoc as NotesDocument
Set docToGetFrontendFor = .... 'somehow get the document you wanna have the frontend for
Call ses.SetEnvironmentvar( "PreventOpen" , "TRUE" )
Set uidoc = ws.EditDocument( False, docToGetFrontendFor, False, "", True, False )
If not uidoc is Nothing then '-document was open already
'- do whatever with the frontend- document
Почему ses.SetEnvironmentvar( "PreventOpen" , "TRUE" )
?
EditDocument открывает документ независимо от того, открыт он или нет.
Необходимо запретить открытие документа, если он еще не открыт.Для этого вы манипулируете «QueryOpen» - Событие формы документа:
Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
Dim ses as New NotesSession
Dim strPrevent as String
strPrevent = ses.GetEnvironmentstring( "PreventOpen" )
Call ses.SetEnvironmentVar( "PreventOpen" , "" )
If strPrevent = "TRUE" Then Continue = False
End Sub
Итак: документ НЕ открывается, если установлен PreventOpen, поэтому, если он еще не открыт, он останется закрытым.
У этого подхода есть один большой недостаток: у клиента Notes есть «ОШИБКА»: если вы откроете документ и сохраните его, а затем снова откроете его с моим кодом, то он откроется во втором окне, УДАЛИТЕ параметр«newInstance» имеет значение false, если вы не закрыли и не открыли этот документ заново.
Объяснено:
==> Попытка открыть второй экземпляр для документа и затем НИЧЕГО вернуть, так как этот новый экземпляр не открывается из-за кода ...