Всё про автосохранение в Lotus Notes/Domino 7

Ох, какой кошмар – весь ваш каторжный труд за последний час пошёл насмарку, и всё из-за сбоя в компьютере. Как жаль, что вы не сохранялись во время работы… Но теперь это не проблема, благодаря появившейся в Lotus Notes/Domino 7 функции автосохранения AutoSave.

Ала Махмуд, программист, IBM

Ала Махмуд (Alaa Mahmoud) работает программистом в IBM с середины 1990-х. Он работал в техподдержке в командах Lotus Notes Core Services и Editor, работая с Notes начиная с R5. Ала – эксперт по интернационализации программ, особенно в двунаправленных языках (арабском и иврите).



04.07.2007

Бывало ли у вас, что после многочасовой работы над отчётом для руководителя, после часов набирания, форматирования и вычитывания текста ваш компьютер внезапно прекращал реагировать на подаваемые вами сигналы, и плоды вашего труда пропадали? И именно в этот момент вы вспоминаете "О нет, я ж ничего не сохранил!". И вы спрашиваете себя (в 2 часа ночи вряд ли рядом есть ещё кто-то): "Стоит ли делать все сначала или пора начинать искать другое место работы?". Если подобное происходило с вами, то в этот момент вы наверняка мечтали об ангеле-хранителе, который бы время от времени сохранял за вас всю работу, чтоб вы могли после сбоя получить её обратно.

Функция AutoSave – это и есть тот ангел-хранитель! Это одно из замечательных усовершенствований, которые мы внедрили в Notes 7.0. При включённом автосохранении документы Notes через указанные промежутки времени сохраняются в локальную базу данных. Таким образом, если Notes или ваш компьютер дадут сбой, у вас будет готовая для восстановления копия работы.

Готовы ли вы познакомиться с функцией AutoSave, разобраться, как она устроена, и научиться ее настраивать и использовать? Если да, то читайте! В этой статье предполагается, что вы опытный пользователь Notes. Больше информации обо всех возможностях Notes 7.0 вы найдёте в статье developerWorks "Новые возможности Lotus Notes и Domino Designer 7.0."

Разработка функции AutoSave

При разработке функции автосохранения AutoSave мы преследовали следующие цели:

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

Типичный сценарий

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

Идей было несколько. Например, можно запустить таймер и сохранять документ через определённые фиксированные интервалы времени. У этого решения много недостатков. Во-первых, что если 1000 пользователей установят себе интервалы автосохранения в 1 минуту, и каждую минуту все они будут сохраняться на сервере? Производительность сильно упадёт, и ответов от сервера придётся ждать долго. Во-вторых, что если вы не доделали свой документ, и он находится в полуготовом виде, а вы не хотите, чтобы кто-либо увидел его таким? Что если у вас есть доступ лишь для записи, но не для удаления? Что если ваша база данных содержит поля, которые обязательно должны быть заполнены до сохранения документа, иначе же они выдают кучу ошибок? Или если в форме есть код, закреплённый за событиями Post Save или Query Save, рассылающий всем письма, предлагающие посмотреть на ваш документ? Что если… в общем, понятно. Как вы поняли, мы не пошли этим путём.

Была и другая мысль, похожая на первую, только мы делаем тихое (без вызова каких-либо событий) сохранение в локальную зашифрованную базу данных. Когда пользователь запускает клиент Notes после сбоя, мы проверяем, есть ли в этой базе какие-либо документы. Если есть, то мы предоставляем пользователю возможность решить, восстанавливать ли хранящиеся в базе документы. Мы пошли этим путём, и это сработало!

Таким образом, сохраняя документы в локальной базе, мы не перегружаем сервер. Кроме того, это решение обеспечивает безопасность (зашифрованная база данных), предотвращает слишком раннее оповещение об имеющемся документе (поскольку мы не вызываем никаких событий), и даёт вам возможность самому решить, восстанавливать ли документ.


Использование функции AutoSave

Работа с функцией автосохранения включает следующие моменты:

  • Включение функции автосохранения в клиенте
  • Включение функции автосохранения в форме
  • Нормальное функционирование автосохранения
  • Восстановление сохраненного документа

Дальше эти действия расписаны подробно:

Включение функции автосохранения в клиенте

При установке Notes 7.0 функция автосохранения AutoSave по умолчанию отключена. По той причине, что увидев работу функции впервые, пользователь может не понять, что происходит. Кроме того, некоторые пользователи могут работать на медленных компьютерах, на которых автосохранение больших документов займёт немало времени. Так что, если вы хотите включить функцию автосохранения, это надо сделать в новой опции диалогового окна User Preferences (см. рисунок 1):

Рисунок 1. Диалоговое окно User Preferences
Диалоговое окно User Preferences

Мы добавили поле, в котором можно включить либо выключить автосохранение, и ещё одно поле, в котором можно указать интервал времени. Этот интервал может быть от 1 до 999 минут. Эти пользовательские настройки автосохранения соответствуют трём переменным в клиентском файле Notes.ini. В таблице далее показано соответствие опций и переменных в Notes.ini:

Установка в Notes.ini Установка в пользовательских настройках
AUTO_SAVE_ENABLE = n1 – автосохранение включено, 0 – автосохранение отключено.
AUTO_SAVE_INTERVAL = <mins>Устанавливает интервал времени между автосохранениями.
AUTO_SAVE_USER,<Abbreviated User Name>=<Database name relative to the data dir>Разрешает конфликты имен (будет разъяснено ниже в статье).

Включение функции автосохранения в форме

Как мы уже заметили выше, «тихое» сохранение не вызывает никаких событий. Мы потому и используем "тихое" сохранение – оно незаметно до того момента, когда вдруг случается что-то неожиданное, и тогда функция автосохранения сообщает, что вы можете восстановить несколько документов. Некоторые же события, инициированные при сохранении незавершенного документа, могут вызвать ошибки. Эти события могут инициировать почтовые рассылки, что приведёт к неожиданным результатам. Поэтому при автосохранении мы эти события не инициируем. Вам уже, наверное, интересно – а что если форма зависит от этих событий? Ответ прост – она не сработает.

Именно потому мы и добавили в свойства формы опцию, определяющую возможность автосохранения формы. Это позволит разработчику либо программисту проверить своё приложение и возможность его автосохранения и восстановления. Если да, то можно открыть окно свойств формы, перейти на первую вкладку и отметить опцию Allow AutoSave (см. рисунок 2):

Рисунок 2. Настройка Allow AutoSave
Настройка Allow AutoSave

Автоматически сохранены могут быть лишь документы, созданные из форм со включённым автосохранением. Это единственная возможность быть уверенным в том, что документ после автосохранения может быть восстановлен. Многие приложения Notes/Domino включают в событиях Save и Post Save код, создающий объекты, или выполняющий определенные проверки при загрузке формы. Поскольку мы не можем инициировать подобные события при автосохранении, они и не выполняются, и автосохранённый документ будет сохранён неправильно. Это может привести к сбою при загрузке документа после восстановления.

Если ваше приложение при сохранении записывает объекты, и зависит от них, вам стоит добавить в событие Query Open код со значениями по умолчанию для этих объектов. Можно даже предусмотреть специальную обработку восстановленных документов, используя элемент $AutoSaveRecovered. Этот элемент будет доступен только в восстановленных документах до события Post Open, после которого он будет удалён.

Программно запретить автосохранение отдельного документа можно, добавив элемент $DontAutosave. Этот элемент предотвращает автосохранение данного документа. Если убрать $DontAutosave, документ снова можно сохранять автоматически.

ПРИМЕЧАНИЕ: В поставку Notes/Domino 7.0 входит единственный шаблон формы с разрешенным автосохранением - Memo.

Нормальное функционирование автосохранения

Теперь, когда вы включили автосохранение в клиенте и в форме, можно действовать. Когда вы открываете документ и начинаете набирать текст, таймер начинает отсчитывать заданный вами интервал. Этот таймер запускается только в том случае, если вы модифицируете документ, что предотвращает излишние обращения к диску, когда вы его лишь просматриваете.

Когда указанный интервал времени проходит, функция AutoSave производит "тихое" сохранение документа, не вызывая ни единого события (как указано выше). В копии сохранённого документа в локальной базе автосохранения есть несколько дополнительных полей, которые помогут функции AutoSave восстановить документ в случае сбоя. Вот эти поля:

Название поляОписание
$AutoSaveDataBaseИмя базы данных, в которой размещён документ
$AutoSaveDocTitleЗаголовок документа
$AutoSaveNoteIDID документа.
$AutoSaveOrgDocRLСсылка на ресурс, который используется для открытия документа
$AutoSaveServerИмя сервера, на котором хранится реплика базы данных
$AutoSaveTimeВремя последнего изменения документа

После начала автосохранения на панели статуса появляется следующее сообщение: Autosaving document : <заголовок документа>...

И когда автосохранение завершено, на панели статуса появляется следующее сообщение (см. рисунок 3):

AutoSave complete : <заголовок документа>...

Рисунок 3. Сообщение функции AutoSave
Сообщение функции AutoSave

сли автосохранение уже завершено, то ваши данные сохранены и могут быть восстановлены при запуске Notes после сбоя. Значит ли это, что в вашей локальной базе хранятся тонны документов? Не совсем! Когда вы сохраняете документ, выходите из него или отправляете его по почте, мы удаляем его автосохранённую копию из базы для экономии места. Благодаря этому вам будет легче найти именно те документы, которые вы хотите восстановить.

На данный момент мы решили проблему на случай сбоя, поскольку автосохранение будет происходить через регулярные промежутки времени (надеемся, незадолго до момента сбоя). Но что если в процессе редактирования документа вам кажется, что не всё с системой хорошо (экран мигает, курсор замирает, возникает синее окно, и т.д.)? В этом случае вызвать автосохранение можно в любой момент. Для этого идите в меню File, выберите AutoSave, и нажмите AutoSave Now. Это вызывает немедленное автосохранение.

Восстановление автосохранённого документа

Вот что происходит, когда вы перезапускаете клиента Notes после сбоя. При загрузке клиента, после аутентификации, мы проверяем наличие документов в базе автосохранения. Если они там есть, мы запрашиваем, желаете ли вы восстановить несохранённую работу (см. рисунок 4).

Рисунок 4. Диалог с запросом на восстановление несохранённой работы
Диалог с запросом на восстановление несохранённой работы

Если вы выбираете Yes, мы спрашиваем, какие из несохранённых документов вы хотите восстановить. Вы увидите диалоговое окно, как на рисунке 5, отображающее все доступные для восстановления документы, со следующими возможностями:

ВозможностьОписание
Восстановить Восстанавливает выбранный документ и удаляет его из списка.
Восстановить всеВосстанавливает, не спрашивая отдельного подтверждения, все документы, и в случае отсутствия ошибок, закрывает диалоговое окно.
УдалитьУдаляет данный документ из локальной базы автосохранения, не внося никаких изменений в оригинал.
Удалить все Удаляет все документы из локальной базы автосохранения, не внося никаких изменений в оригинал.
Рисунок 5. Окно восстановления несохранённых документов
Окно восстановления несохранённых документов

Поля в окне восстановления несохранённых документов отображают следующую информацию: время автосохранения документа, заглавие документа, путь и название исходной базы данных и имя сервера, на котором находится база данных.

Если мы не можем получить доступ ни к одной реплике исходной базы данных Notes, то документ мы восстановить не можем, и оставляем его как есть; позже вы можете опять попробовать его восстановить. Если документ был изменён после последнего автосохранения, то мы сообщаем, что оригинал был изменён с момента сбоя, и вы можете перезаписать вариант из автосохранения или же оставить новый оригинал. Если вы решаете восстановить документ, то мы открываем его в Notes и предлагаем сохранить или отменить изменения. Функция AutoSave не сохраняет автоматически документ от вашего имени после восстановления.


База данных автосохранения

Изначально мы предполагали, что автосохранение будет использовать одну базу данных (Autosave.nsf), созданную из Autosave.ntf. Это шифрованная база данных. Однако мы встретили потенциальную проблему. На этапе предварительного тестирования было обнаружено, что во многих средах Notes/Domino разные пользователи используют один каталог данных Notes Data, только с разными Location для документов каждого пользователя. По умолчанию AutoSave.nsf размещалась в пользовательской директории Data и шифровалась (шифром средней стойкости). Таким образом, когда первый пользователь создаёт базу данных автосохранения, она шифруется ключом этого пользователя. В результате все прочие пользователи использовать эту базу уже не могут, она для них недоступна.

Для разрешения этой ситуации мы решили использовать при создании базы данных автосохранения те же соглашения, что и при наименовании почтовых файлов. Для этого мы в начале файла используем приставку as_ в начале имени базы данных. Например, у пользователя Alaa Mahmoud база данных автосохранения будет называться as_Amahmoud.nsf. Если база с таким именем уже существует, мы добавляем в конец имени 1 и проверяем снова. Если имя существует, добавляем 2 и проверяем вновь, и так до тех пор, пока не будет создано уникальное имя.

Разрешение конфликтов в именах

При выбранном нами решении по именованию имена John Smith, Jane Smith, Jen Smith, Jon Smith приведут к конфликтам. Дабы быть уверенным, что мы используем для данного пользователя его базу данных, после её создания мы помещаем в пользовательский файл Notes.ini следующую строку:

AUTO_SAVE_USER,<Abbreviated User Name>=<Database name relative to the data dir>

Например:

AUTO_SAVE_USER,Alaa Mahmoud/Westford/IBM=as_AMahmoud2.nsf

Это позволяет произойти следующим событиям. Пользователь запускает Notes с определённым ID. Мы проверяем, есть ли у данного пользователя запись в Notes.ini. Если запись есть, то мы используем соответствующую базу данных. Если этой базы нет, мы создаём новую (в том случае, если пользователь удалил базу). Если у пользователя нет доступа к данной базе, он получает ошибку, и автосохранение для него недоступно. Если мы не можем найти запись с именем пользователя, то мы создаём её вместе с базой данных, имя которой составляется по вышеуказанным принципам.

Если пользователь переходит на другой ID, все открытые документы в Notes закрываются. Таким образом, мы не сталкиваемся с проблемой открытых автосохранённых документов.


Установка настроек автосохранения при помощи политик

Администраторы, желающие разрешить или запретить автосохранение (или желающие поставить всем пользователям равные интервалы времени между автосохранениями), могут сделать это посредством определения в документе политик. Для этого откройте клиент Domino Admin и выберите File - Open Server. После чего введите имя сервера, который желаете администрировать. Это открывает на сервере Domino Directory. Выберите на левой навигационной панели Settings. После чего выберите Add Settings - Desktop/Setup Setting, или же выберите уже существующий документ Desktop Settings и нажмите Edit Settings. Открыв документ, выберите вкладку Preferences - Basics для отображения того же, что и на рисунке 6:

Рисунок 6. Окно Desktop Settings
Окно Desktop Settings

Заполните два связанных с автосохранением поля:

  • Разрешить автосохранение (Enable AutoSave) разрешает/запрещает пользователям автосохранение. Если оно запрещено, пользователи не смогут им пользоваться.
  • Сохранять каждые N минут (AutoSave every N minutes) устанавливает время в минутах между автосохранениями.

Заключение

Из этой статьи мы видим, что автосохранение – полезнейшая функция. Оно сберегает вашу работу при сбоях, и его можно настроить как в настройках пользователя, так и через политики администрирования. Разработчикам стоит проверить, чтобы их формы не зависели от невызываемых при автосохранении событий, и включить поддержку автосохранения. Кроме того, мы убедились, что автосохранение работает быстро и безопасно благодаря зашифрованной локальной базе данных.

И если теперь случится неожиданный сбой (а многие ли сбои ожидаемы?), а вы в это время работаете над документом Notes, не волнуйтесь – автосохранение поспешит к вам на помощь!

Ресурсы

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Lotus
ArticleID=238759
ArticleTitle=Всё про автосохранение в Lotus Notes/Domino 7
publish-date=07042007