Тема: Desktop Private View - предлагается решение проблемы

Создан:Sergey Gorobets 10/06/2004 05:03 PM
Папка:
06. Разработка Notes-приложений
Тип сообщения:
Решение

Сообщение:

В форуме несколько раз подымался вопрос использования "Shared, DESKTOP private on first use" view (SDPFU view) как альтернативы обычным "Shared, private on first use" view (SPFU view). Как известно из практического опыта, SPFU view имеют проблемы с обновлением индексов. В этом смысле, SDPFU view более надежны, но для них актуальна проблема изменения дизайна уже существующих desktop private view.
Т.о., вопрос стоит так: как построить работу с SDPFU view таким образом, чтобы осталась возможность менять дизайн сформированных desktop private view по желанию разработчика без участия пользователя.

После некоторых экперементов я нашел решение, базирующееся на недокументированной, но известной :-) функции @UpdateViewDesign.
Итак, пусть dskViewName - имя нашего DPFU view.
Создаем в базе скрытую shared view с именем, например, "(templateViewName)" и копирум в нее дизайн DPFU view (в том числе и критерий отбора). Не страшно, если критерий отбора содержит @UserName - подразумевается, что эта view не будет использоваться.

Далее, в событие PostOpened базы помещаем следующий код (формульный):
PRIVATEVIEW_DESIGN_VERSION := "1";

VIEWNAME_DESKTOP := "dskViewName";
VIEWNAME_TEMPLATE := "(templateViewName)";

@If(@Environment("PrivateViewVer") = PRIVATEVIEW_DESIGN_VERSION; @Return(""); "");

db := @DbName;

@UpdateViewDesign(VIEWNAME_DESKTOP; VIEWNAME_TEMPLATE);

@Environment("PrivateViewVer"; PRIVATEVIEW_DESIGN_VERSION);

@PostedCommand([FileCloseWindow]);
@PostedCommand([FileOpenDatabase]; db)


Важно! Код события должен быть именно формульный. Если оформить его ввиде агента и вызвать из LS - работать не будет.

Комментарий.
Идея в следующем - при открытии базы на клиенте проверять текущую версию DPFU view. Если не совпадает с версией, указанной в дизайне базы, проводим обновление дизайна desktop private view при помощи @UpdateViewDesign, используя в качестве источника дизайна shared view, затем переоткрываем базу.

Т.о., если мы хотим изменить дизайн сущ. view, делаем следующее:
1. Вносим необходимые изменения в ОБЕ View - "dskViewName" и "(templateViewName)" (некоторое неудобство - но не сильно большое)
2. Изменяем переменную PRIVATEVIEW_DESIGN_VERSION

При следующем открытии базы на клиенте произойдет автоматическое обновление дизайна desktop private view. Пользователь отметит некоторую задержку при открытии базы :-)



Иерархия документов данной дискуссии:
Desktop Private View - предлагается решение проблемы (Sergey Gorobets) (06.10.2004 17:03:41)
.... Работает ли это на БД со скрытым дизайном? (-) (Vlad Sh) (07.10.2004 11:40:54)
........ А какая разница (+) (Sergey Gorobets) (07.10.2004 17:00:40)
............ @DbName (+) (Vlad Sh) (08.10.2004 17:36:16)
................ @dbname (+) (Andrey V Firsov) (08.10.2004 18:29:03)
.................... Что значит 'сервер - локальный '? Объясните пожалуйста. (Vlad Sh) (11.10.2004 11:10:31)
........................ как я разумею(+) (Anonymous) (11.10.2004 16:27:43)
............................ а что, все ACL в форуме похерились?(AFirsov) (Anonymous) (11.10.2004 16:29:30)
................................ В новых постах точно! (-) (Anonymous) (11.10.2004 17:29:38)
............ Немного о разнице... (Vlad Sh) (08.10.2004 17:32:20)
.... красиво (-) (Dmitry Akulov) (06.10.2004 17:31:34)


Разработчикам и администраторам: курсы, книги, сертификация