doc2...
Есть несколько способов его определить...
1. При открытии формы
В самой форме, в секцию (Global), в подсекцию (Declarations) прописать:
Код:
Dim CurrUIDoc as NotesUIDocument
Dim CurrDoc as NotesDocument
Далее в событие формы PostOpen:
Код:
Sub Postopen(Source As Notesuidocument)
Set currUIDoc = Source
Set currDoc = currUIDoc.Document
End Sub
Таким образом при открытии документа заполняем 2 глобальных объекта.
Жить объекты будут до закрытия документа.
Обращаться к ним можно будет из любой кнопки/события/хот-спота на форме.
2. При конкретном действии
В нужное действие, если требуется работа с документом, в самом начале вставляем код:
Код:
Dim CurrUIDoc as NotesUIDocument
Dim CurrDoc as NotesDocument
Dim ws as New NOtesUIWorkspace
Set currUIDoc = ws.CurrentDocument
Set currDoc = currUIDoc.Document
Таким образом при каждом действии будет создаваться новый объект для работы.
И в каждом действии надо будет объявлять переменные.
То есть все манипуляции по работе с документом надо осуществлять через CurrDoc
У каждого подхода есть и плюсы и минусы.
ws.CurrentDocument - может выдать ошибку и вернуть не тот документ.
"Неведомым магическим способом" внутренний фокус лотуса может смениться на одну из открытых вкладок.
Если открыть документ, затем не закрывая его перейти в другую базу, создать документ там, потом вернуться в открытый документ и нажать действие с ws.CurrentDocument. с вероятностью 0,95 вернется объект нового документа, а не текущего.
Есть подозрение, что это связано с механизмом Compose, но глубже я не копал.
С глобальными объектами тоже бывали проблемы, что они хранили в себе не те объекты, которые надо.
Кажется это было в версии 6 и 7, но в последнее время не воспроизводится на версиях выше 8.
Сам использую глобальные переменные в форме.