Автооткрытие формы при старте базы

  • Автор темы SparkLone
  • Дата начала
S

SparkLone

Доброго,
Необходимо реализовать следующую логику: админ патчит мейловую базу пользователя, в первый запуск мейловой базой у пользователя должна открыться форма (там будет текст указывающий как проинсталлировать нужные компоненты и прочие лицензионные соглашения). При следующем открытии форма уже открываться не должна.
Вопроса 2:

1) Как сделать автооткрытие формы при старте базы.
Я рыл в сторону Other -> Database resources -> Database script -> Postopen. По идее идеальное место, MessageBox срабатывает, но как вот открыть документ..
Код:
	Dim workspace As New NotesUIWorkspace
Call workspace.ComposeDocument( "", "", "InstallForm" )
Этот код не сработал.. Как я понимаю потому что на момент старта базы не до конца все что надо инициализировано. Я что то делал не так, или нужно вообще по другому действовать (из другого места стартовать)?

2) Где хранить состояние, была ли уже открыта база после патчинга или нет. Обычно все подобные данные требуются в формах и хранятся в скрытых полях. Не знаю сейчас тот же случай или по уму надо делать по другому (к тому что, опять таки будут ли доступны поля во время определения необходимости открытия формы).

Был бы благодарен за советы, особенно подкрепленные сорцами )
 
K

Kee_Keekkenen

1.
Код:
Dim ws As New NotesUIWorkspace
Dim doc As New NotesDocument(source.Database)
Call doc.ReplaceItemValue("Form","InstallForm")
Call ws.EditDocument(True, doc,False)

2. там же где хранятся все настройки в профайле с именем CalendarProfile
 
S

SparkLone

Kee_Keekkenen
Спасибо, но не совсем то, что нужно.. При открытии базы основным документом остается мейловая база, а хотелось бы чтобы активным становился InstallForm. Ибо работа с мейловой базой без установки компонентов из InstallForm по сути бессмысленна..
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
Для: SparkLone
Прописать инструкцию в "About Database".
 
S

SparkLone

Medevic
Не думаю, что мне позволят изменять стандартный about..
К тому же база то будет для пользователя не вновь, следовательно эта опция не сработает:
Show "About database" document when database is opened for first time
С данной опцией тоже что то не вышло, хотя утверждать, что способ не рабочий не буду..
Show "About database" document when database is modified

В идеале все таки чтобы открывалось "левое" окошко, больше шансов что не перезатрешь что нибудь важное или оставленное каким другими плагинами..
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
Для: SparkLone
А просто письмо послать? Что-то типа приветствия. Как в аутлуке.
 
S

SparkLone

Medevic
Думали, но отказались. Письмо можно удалить до просмотра, не получить почту при первом запуске, а так гарантировано, что после патчинга базы - юзер схлопочет диалог по установке доп. компонентов.

Неужели нельзя заставить работать ComposeDocument из PostOpen?
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
Предлагаю такой вариант. Отдельная база, которая будет делать рассылки. Также в этой базе будут содержаться пометки (отдельные документы с именем пользователя).
Пользователям идёт рассылка. Документ с формой. На форме инструкция и кнопка. Можно еще таймер замутить, чтобы сразу не жали. Как пользователь нажимает на кнопку, так в отдельной базе создается документ с его именем. И рассылка на него прекращается. Иначе рассылка будет повторена до полной победы. :)
 
S

SparkLone

Medevic
Круто.. ))
Скажу честно - хоть вариант и интересен, и даже очень, маловероятно что мне позволят мутить такую систему. А где кстати предлагается создавать новую базу, в смысле я может чего не понимаю, но она должна принадлежат ьпользователю, или как?

Неужели нельзя малой кровью? (
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
6
Для: SparkLone
База на сервере.

<!--QuoteBegin-SparkLone+14:02:2008, 14:12 -->
<span class="vbquote">(SparkLone @ 14:02:2008, 14:12 )</span><!--QuoteEBegin-->Неужели нельзя малой кровью? (
[snapback]98104" rel="nofollow" target="_blank[/snapback]​
[/quote]
Можно, конечно. Просто лично мне не нравится вариант с изменением почтовой базы.

Тебе, наверное, лучше page открыть вместо создания лишнего документа. NotesUIWorkspace.OpenPage.
Делаешь Page, там кнопку. Которая в профиль запишет значение.
В Postopen проверяешь значение в профиле и открываешь или не открываешь страницу.
 
S

SparkLone

Medevic
На сервере, и как я понимаю все это будет ездить на агентах, т.е. один рассылает, второй смотрит если письмо забрано и в течении часа не пришел овтет - отсылаем еще раз.. Ну, в случае чего поковыряюсь. Просто если опыт программирования под Лотус небольшой, то опыт админства вообще нулевой, ибо программировал только под клиент )

А базу в любом случае менять прийдется.. Меняется сам механизм отправки писем, вот в чем дело..

Ну можно было бы по идее и так, но ситуация та же что и с ComposeDocument..
Пишет "Page 'InstallForm' does not exist"
Это происходит при действительно первой загрузке базы, что самое печальное.. Если после этого не закрывая клиент закрыть базу и вновь ее открыть - все рабоатет.
 
S

SparkLone

Хм.. Заработало.. Местами.. Во первых у сервера (то ли у клиента) какое то непонятное кеширование. Выключаешь сервер заменяешь nsf мейловой базы, загружаешь сервер, затем клиент - а там вполне может быть база до изменений, бесит ужасно, еще и кучу времени тратится (

Ну да не суть, смог запустить столь желанный ComposeDocument. Хитрость была в том, что надо было все таки указывать сервер/путь к базе.. Печально, это уже накладные расходы по патчингу и уменьшение стабильности системы, вдруг ту же базу пропатчишь а база переедет или еще чего, маловероятно но и все же.
Но. Главное в том, что точно так же сначала открывается нужный мне документ а затем уже мейловая база, становясь активной, мне же надо, чтобы моя форма после запуска базы была активной, а не основная мейловская.. (
Опять таки, может есть способ обойти проблему?..
 
O

Omh

Вот примерно такой код можно забубенить на PostOpen базы
Код:
dim db as notesdatabase
Set db = Source.database

dim profile as notesdocument
set profile = db.getprofiledocument("superprofile")

if profile.getitemvalue("processed")(0) <> "1" then
dim dlgDoc as notesdocument
Set dlgDoc = db.createdocument
dim ws as new Notesuiworkspace
if ws.DilaogBox(параметров не помню) then
Call profile.replaceitemvalue("processed", "1")
Call profile.save(true, false)
esle
Call Source.Close
end if
end if

Компилировано в голове, так что могут быть ошибки.
 
S

SparkLone

Для: Omh
Отличное решение! )

Я правильно понимаю, что название superprofile выбрано случайным образом, и если профайла не существовало, он просто создастся?
 
O

Omh

Для: SparkLone
Ну это как тебе надо, я выбрал такое название, т.к. не знаю, как зовётся профайл у тебя.
Тебе скорее всего надо будет
Код:
set profile = db.getprofiledocument(PROFILE_NAME, session.UserName)
 
S

SparkLone

Для: Omh
Просто раньше никогда не работал с профайлами, я правильно понимаю, что профайлы никак не посмотреть в дизайнере и они бывают двух видов:
1) завязанные за конкретной формой, доступ идет по уникальной добавке, обычно тот же session.UserName
2) 1 на всю базу данных.

В моем случае 100% будет форма пусть называться будет SparkInstallComponents, в ней будут файлы приложенные, может еще чего, я так понимаю - надо будет делать доступ так:
Код:
set profile = db.getprofiledocument("SparkInstallComponents", session.UserName)
И это будет гарантировать выполнение требований. Пример: есть 3 пользователя лотуса и 1 комп, сначала логинится 1й, работает с базой, потом 2й, потом третий. Гарантируется, что код
Код:
profile.getitemvalue("WasInstalled")(0) <> "1"
для каждого покажет TRUE.

Все так, или я где то наврал?
 
O

Omh

Для: SparkLone
Ну если каждый со своим ID, то ты прав.
 
S

SparkLone

Для: Omh
Ок, меня просто волновал больше всего вопрос - надо завязывать имя профайла за существующей формой, или она на автомате создастся.. Точнее профайл вроде как даже создается на автомате (при отладке кода с superprofile'ом обнаружил), просто интересовало какой подход более правильный.
Может профайл без формы плохо, а может пихать данные в профайл который завязан на непустую форму - плохо..
 
O

Omh

Для: SparkLone
Профайл без формы, это нормально.
логично даже :)
 
Мы в соцсетях:

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