Database Script: Source.close() На Postopen

alik86

Well-Known Member
Lotus team
20.11.2008
465
1
Беларусь, Мiнск
#1
Доброго времени!
И вновь лотус, и вновь непонятно, и вновь я тут...
Ситуация следующая:
Повелеваю я (глупец!) на событии Postopen в Database Script быть Source.Close(). И вот в чем беда: на боевой базе, в которой мне это и надо, должного эффекта нет. Во вновь созданной -- всё ок, в ряде других баз -- всё ок, в нужной -- нет.
Эксперимент:
Код:
Код:
Sub Postopen(Source As Notesuidatabase)
MsgBox "Postopen"
Call Source.Close()
End Sub
Там где ок: база открылась -> сообщение выдало -> база закрылась
Там где нет: база открылась -> сообщение выдало -> база НЕ закрылась (если делать дело под отладчиком, то имеем "Command is not available.")
Кто расскажет почему? Кто расскажет как бороться? Кто? ;)
 

savl

Well-Known Member
Lotus team
28.10.2011
2 116
157
32
#2
Если в локальной копии базы все отработает, то скорее всего сама база уже битая... Лучше пересоздать.
Кэш удалить, клиент переоткрыть. Все как всегда.
 

alik86

Well-Known Member
Lotus team
20.11.2008
465
1
Беларусь, Мiнск
#3
Не, не, не -- не всё так просто. ;)
Похоже при наполнении приложения элементами дизайна (и даже скорей всего каким-то конкретным), штукенция эта работать и перестаёт. На просторах интернета я нашел лишь: "Если при открытии базы запускается Frameset то данный метод не отрабатывает.". Но 100%-го подтверждения этому экспериментально не получил.
 

alik86

Well-Known Member
Lotus team
20.11.2008
465
1
Беларусь, Мiнск
#4
Хм, похоже действительно вся эта магия как-то связана с Frameset'ом: заменил базе Launch с "Open desinated Frameset" на "Restore as last viewed..." и Source.Close() отработало должным образом. Вот только заменяте базе Launch -- не решение. Да и нельзя.
 

savl

Well-Known Member
Lotus team
28.10.2011
2 116
157
32
#5
Хм... тогда вариант такой:
1. Делаем фреймсет с одним фреймом
2. Делаем его вычисляемым (Named Element, Value = Computed), на основании ролей может быть производить вычисления.
3. Если вычисления не прошли (False) , то открываем во фрейме форму, в событии postOPen которой стоит UiDb.Close
Ну а если вычисления вернули True - открываем рабочий фреймсет.
Ну и да, придется сменить автозапуск базы на новый фреймсет.

Еще вариант посмотреть что в этом фреймсете и в одном из элементов прописать код закрытия базы.
Короч, все решаемо ;)
 

alik86

Well-Known Member
Lotus team
20.11.2008
465
1
Беларусь, Мiнск
#6
А вот и спасибо! Воспользовался Postopen'ом одной из Page, имеющихся во фрэймсэте. Пока полёт нормальный.
Но осадок остался... ;)