Как Lotus Notes может определить, открывается ли документ в данный момент? - PullRequest
0 голосов
/ 30 января 2019

В качестве заголовка.

Как Lotus Notes может определить, открывается ли документ в данный момент?

Решение должно быть без "Блокировка документа" из-за потребностей пользователя.

У меня есть 1 maindoc и 1 subdoc, но subdoc и maindoc не являются родителями.

Я использую «IsUIDocOpen», но он просто работал в currentdocument.

Есть ли другой способ сделать это?

1 Ответ

0 голосов
/ 31 января 2019

Если вы запрашиваете только одного клиента, тогда это возможно без блокировки документа, но для этого нужны некоторые продвинутые методы:

Вы можете использовать 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, если вы не закрыли и не открыли этот документ заново.

Объяснено:

  • Создать документ
  • Сохранить документ
  • Закрыть документ
  • Открыть документ
  • Использовать мой код ==> Работает, так как код просто «повторно» использует окно

  • Создать документ

  • Сохранить документ
  • Использоватьмой код

==> Попытка открыть второй экземпляр для документа и затем НИЧЕГО вернуть, так как этот новый экземпляр не открывается из-за кода ...

...