• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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 597
310
BIT
180
Если в локальной копии базы все отработает, то скорее всего сама база уже битая... Лучше пересоздать.
Кэш удалить, клиент переоткрыть. Все как всегда.
 
A

alik86

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

alik86

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

savl

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

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

alik86

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

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