Программный Outline

MMN

Well-known member
11.12.2008
97
0
#1
Встала задача создать дополняемое меню
из кода дописываю пункты меню в Outline

создаю Click и пытаюсь обновить
Call workspace.SetTargetFrame("MenuFrame")
Call workspace.OpenPage("PageMenu")
или
Call workspace.ReloadWindow

ничего не обновляется

если я в дизайнере просто открою Outline, то в клиенте Click отработается и чудесным образом вижу обновленный Outline
как заставить его обновиться ??
каким образом происходит его обновление когда открываю его в дизайнере??
 

savl

Lotus team
28.10.2011
2 136
105
#2
Если 8-ка попробуйте так:
OutlineReload method
Reloads a specified outline.

Note This method is new with Release 8.

Defined in
NotesUIWorkspace

Syntax
Call notesUIWorkspace.OutlineReload( outlinename$, databasefilename$ )

Parameters
outlinename$

String. The name of the outline to be reloaded.

databasefilename$

String. The path and file name of the database. The current server is used, or incorporate the server name at the beginning of the path. Use a null string, "", to indicate the current database.

Usage
This method can be used to to redisplay a modified outline after you have edited its design programmatically using the NotesOutline class. Otherwise, you would have to close and reopen the application to see these changes.
Еще можно обходным путем попробовать:
Закрываем текущую базу, затем сразу открываем её снова.
 

MMN

Well-known member
11.12.2008
97
0
#3
в восьмерке OutlineReload не работает, даже разработчики пишут, что в хелпе есть, но для красоты
а кроме как переоткрытие базы ??
 

savl

Lotus team
28.10.2011
2 136
105
#4
Фреймсет переоткрыть можно. Думаю тут дело в кэше дизайна.

За OutlineReload спасибо, буду знать, хотел заюзать как раз.

Добавлено: ОН работает!!!
Надо просто 2 раза подряд вызывать :
Код:
Call ws.OutlineReload(OutName,db.FilePath)
Клиент 8.5.3 FP2
 
A

Anonimous

#6
Я вот тоже тут спрошу кое-что...
У меня есть Frameset. В нем 2 фрейма: верхний большой и нижний. В нижнем у меня навигатор с action hotspot - ами. Надо сделать так, чтоб при щелчке по хотспотам в верхнем фрейме открывался вид какой-то базы.
Содержимое нижнего фрейма - форма с action hotspot - ами. На этой форме есть скрытые поля, в которых указатели на базы - соответственно по ним открываем базу при щелчке по хотспоту.
Допустим, есть хотспот А и хотспот Б. И поля соответственно FieldA и FieldB. При клике на хоспот А базу А открываю по указателю в поле А, при клике на хотспот Б - базу Б.
Все хорошо, при клике на хотспот A база в верхнем фрейме открывается командой @Command([Compose]; сервер:путь; форма). Но только когда я потом кликаю на хотспот Б, значения полей перестают быть доступными для кода в хотспоте Б, а вид базы Б не открывается без указателя в поле Б. Это после выполнения команды @Command([Compose]; путь; форма)

Вот код, но причина - в команде @Command([Compose]; путь; форма). А обоих хотспотах код обинаковый, отличается только 1-я строчка

FieldA := Значение поля А;

// С помощью FieldA узнаю путь к базе и сервер, тут ничего не влияет

@SetTargetFrame("Верхний фрейм");
@Command([Compose]; сервер:путь; "Форма")

Команда @SetTargetFrame("Нижний фрейм") не помогла. RefreshFrame тоже. Если кто поделится опытом, то заранее спасибо.
 
A

Anonimous

#7
Пока переменными окружения воспользовался. Еще значения полей формы в нижнем фрейме остаются видными, если обращаться к ним с помощью кнопок на LS. А вот если на языке @, то после Compose значения полей все равно перестают быть доступными