• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Database Script: Source.close() На Postopen

  • Автор темы alik86
  • Дата начала
A

alik86

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

savl

Lotus Team
28.10.2011
2 601
312
BIT
216
Если в локальной копии базы все отработает, то скорее всего сама база уже битая... Лучше пересоздать.
Кэш удалить, клиент переоткрыть. Все как всегда.
 
A

alik86

Не, не, не -- не всё так просто. ;)
Похоже при наполнении приложения элементами дизайна (и даже скорей всего каким-то конкретным), штукенция эта работать и перестаёт. На просторах интернета я нашел лишь: . Но 100%-го подтверждения этому экспериментально не получил.
 
A

alik86

Хм, похоже действительно вся эта магия как-то связана с Frameset'ом: заменил базе Launch с "Open desinated Frameset" на "Restore as last viewed..." и Source.Close() отработало должным образом. Вот только заменяте базе Launch -- не решение. Да и нельзя.
 

savl

Lotus Team
28.10.2011
2 601
312
BIT
216
Хм... тогда вариант такой:
1. Делаем фреймсет с одним фреймом
2. Делаем его вычисляемым (Named Element, Value = Computed), на основании ролей может быть производить вычисления.
3. Если вычисления не прошли (False) , то открываем во фрейме форму, в событии postOPen которой стоит UiDb.Close
Ну а если вычисления вернули True - открываем рабочий фреймсет.
Ну и да, придется сменить автозапуск базы на новый фреймсет.

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

alik86

А вот и спасибо! Воспользовался Postopen'ом одной из Page, имеющихся во фрэймсэте. Пока полёт нормальный.
Но осадок остался... ;)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!