Действия При Открытии Бд

Kizarek86

Lotus team
20.07.2007
864
4
#1
Доброго времени суток.

Есть код выполняемый при открытии БД, замечательно работающий.
Есть почтовое сообщение в котором есть прямой линк на документ в этой БД, так вот при открытии документа по этой ссылке код на открытии БД не работает.
Как можно побороть?
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#2
Наверное только отлавливать событие открытия документа.
 

doka

Well-known member
18.02.2010
118
0
#4
Установить переменную в notes.ini через SetEnvironment, и потом проверять её значение в событие открытия документа и открытия базы. Только тут нужно учитывать что, если за компьютером работают несколько пользователей, то и лотус должен стоять многопользовательский, а то работать не будет.


P.S. это вариант если нужно узнать открывал ли пользователь эту базу когда-либо
 

RAJ

Well-known member
17.01.2007
440
0
#5
попробуй вызов при открытии документа с newInstance=False
Код:
Call notesUIWorkspace.OpenDatabase( server$, file$, view$, key$, newInstance, temp )
или попробуй на QueryOpen документа:
Код:
Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
Dim WS As New NotesUIWorkspace
Print WS.CurrentDatabase.Database.Title

проверка WS.CurrentDatabase.Database.ReplicaID и Source.ParentDatabase.ReplicaID - должны быть одинаковы(не забывая проверку Is Nothing)

End Sub
 

hosm

* so what *
18.05.2009
2 442
6
#6
Print WS.CurrentDatabase.Database выдаст object variable not set, если БД открыта "неправильно" - по ссылке из другой БД на документ в неоткрытой БД (что и есть у топикстартера) или при открытии через view-goto. Имхо, не стоит давать таких советов без указания необходимости обработки возможной ошибки.
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#8
Вообще надо плясать от назначения скрипта.

Может уже тогда лучше использовать какую-то дополнительную базу, а не переменную окружения?
Открыл базу - записался. Закрыл - удалился.
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#9
или попробуй на QueryOpen документа:
Код:
Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
Dim WS As New NotesUIWorkspace
Print WS.CurrentDatabase.Database.Title

проверка WS.CurrentDatabase.Database.ReplicaID и Source.ParentDatabase.ReplicaID - должны быть 
одинаковы(не забывая проверку Is Nothing)

End Sub
Это не будет работать... ИМХО
 

nvyush

Lotus team
22.04.2009
2 317
0
#11
Может уже тогда лучше использовать какую-то дополнительную базу, а не переменную окружения?
Открыл базу - записался. Закрыл - удалился.
Профиль в Cache.NDK, кмк, вполне достойная кандидатура. Но, согласен с NickProstoNick, плясать надо от задачи, а она не озвучена.
 

Kizarek86

Lotus team
20.07.2007
864
4
#12
Код:
	Dim WS As New NotesUIWorkspace
Print WS.CurrentDatabase.Database.Title
RAJ, то что надо. спасибо.




Добавлено: Ну если интересно кому, обрисую всю ситуацию.

После накатки обновления на БД (что происходит довольно часто) пользователю нужно переоткрыть базы (кеш кода, все дела), делать это нужно ненавязчиво, периодически напоминая о этом пользователю.

решено так:
В БД есть
профайл БД - в котором храниться дата последнего обновления
профайлы пользователей - в которых хранятся даты последнего открытия пользователем БД

при открытии БД обновляем профайл пользователя.
при открытии любого документа проверяем даты, и выдаем пользователю соответствующее сообщение если требуется.
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#13
эм.... не думаю что удачное решение...
Загаживать базу профайлами... не очень люблю я их.
А по сути - то как я и говорил. Зашел - записался...