Разработка приложений в Lotus Domino 7

Применение новых элементов разработки в приложении ITSO Electronics

Показывать лекцию целиком

Новые функции и возможности Lotus Domino Designer 7 основаны на более тесной интеграции с развивающимися стандартами Web, увеличении функциональной совместимости с другими стандартами программного обеспечения IBM и упрощении использования приложений разработчиками и пользователями.

В этой лекции мы проиллюстрируем, как новые функции Lotus Domino 7 используются для улучшения приложения ITSO Electronics. Рассмотрим следующие функции:

  • команды контекстного меню;
  • свойство формы AutoSave;
  • общие столбцы;
  • расширенные настройки для представлений и папок;
  • дополнения к языку формул;
  • дополнения к классам LotusScript, COM и OLE;
  • дополнения к классам Java и CORBA.
  • 4.1 Команды контекстного меню

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

    В приложении ITSO Electronics в представлении ).

    (рис 4.1) Параметр Include in right mouse button menu

    После щелчка правой кнопкой мыши в представлении появится контекстное меню, в котором будет только что добавленное действие (рис 4.2). Мы также добавили в контекстное меню и другие действия.

    Замечание Контекстное меню не доступно для пользователей, ограниченных в возможностях. Все действия, выполняемые в контекстном меню, должны быть также доступны в меню Actions. (рис 4.2) Действие включено в контекстное меню

    4.2 Свойство формы AutoSave

    AutoSave в клиенте Lotus Notes – это функция, с помощью которой осуществляется регулярное автоматическое сохранение документов Lotus Notes в локальную базу через определенные интервалы времени, определяемые пользователем. В случае сбоя программы, рабочей станции или перебоев в питании пользователь сможет восстановить документ, который редактировал.

    4.2.1 Включение поддержки функции AutoSave в клиенте Lotus Notes

    При установке Lotus Notes 7 функция AutoSave не включена по умолчанию. Для ее включения необходимо выбрать соответствующий параметр в Lotus Notes Client User Preferences (Параметры пользователя клиента Lotus Notes).

  • Выберите File => Preference => User Preferences (Файл $$\Rightarrow$$ Параметры $$\Rightarrow$$ Параметры пользователя).
  • На вкладке ).
  • (Дополнительно) увеличьте или уменьшите интервал выполнения AutoSave.
  • Щелкните по кнопке ОК.
  • Замечание По умолчанию AutoSave производится каждые 15 минут. Интервал выполнения этой операции находится в пределах от 1 до 999 минут. (рис 4.3) Активация функции AutoSave в User Preferences

    Параметры AutoSave в окне User Preferences соответствуют трем переменным в файле NOTES.INI. Эти переменные приведены в табл. 4.1.

    Переменные в файле NOTES.INI
    Переменная Параметр в User Preference
    AUTO_SAVE_ENABLE=n Функция AutoSave отключена, когда n=0
    AUTO_SAVE_INTERVAL=<mins> <mins> устанавливает временные интервалы между выполнением AutoSave
    AUTO_SAVE_USER,<Abbreviated User Name>=<Database name relative to data directory> Устраняет конфликты имен в базах данных с функцией AutoSave

    4.2.2 Активирование AutoSave для формы

    В Lotus Domino Designer использованы преимущества новой функции ). Если функция AutoSave активирована в клиенте Lotus Notes, ее выполнение каждый раз будет отображаться в строке состояния.

    (рис 4.4) Параметр Allow AutoSave в окне свойств Form

    Разработчикам приложений следует убедиться в том, что функция AutoSave при активации в формах приложения корректно работает с их приложением. Во многих приложениях Lotus Notes и Domino присутствует код, создающий элементы по событиям Save (Сохранение) и Postsave (Постсохранение) или производящий проверку достоверности в момент загрузки. Из-за того что коды проверки достоверности и события формы не выполняются во время автоматического сохранения документа, автоматически сохраненный документ может не загрузиться после восстановления. Возможно, потребуется добавить код в событие Queryopen, чтобы установить значения по умолчанию для конкретных элементов, чтобы гарантировать правильную загрузку документов после восстановления.

    Элемент $AutosaveRecovery можно использовать для работы с восстанавливаемыми документами. $AutosaveRecovery доступен для восстановленных документов до события PostOpen, а после этого события он удаляется. Например, форма может содержать код Queryopen, предотвращающий открытие документа в режиме редактирования, если поле Status не эквивалентно полю Draft. Если пользователь изменил статус на "Public" и произошло автоматическое сохранение, а после этого произошел сбой в работе компьютера, пользователю все еще необходимо открыть этот документ в режиме редактирования, несмотря на то, что значение поля Status кажется некорректным. Обратите внимание на следующий код:

    Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant,
    Continue As
    Variant)
    Dim doc As NotesDocument
    If Mode And Not Isnewdoc Then
    Set doc = Source.Document
    If doc.Status(0) <> "Draft" Then
    Continue = False
    Messagebox "Only Draft documents may be edited.", _
    MB_ICONSTOP, "Edit Error"
    End If
    End If
    End Sub

    Вместо этого можно написать:

    If doc.Status(0) <> "Draft" And Not doc.HasItem("$AutosaveRecovered ") Then

    Элемент $DontAutosave можно использовать для отключения функции AutoSave в данном конкретном документе. Функция AutoSave может быть снова активирована путем удаления $DontAutosave.

    4.2.3 Восстановление документов, сохраненных с помощью AutoSave

    Автоматически сохраненные документы могут быть восстановлены либо сразу после загрузки, либо в любое другое время после запуска. При выполнении запуска после сбоя системы или перебоя в питании, после аутентификации пользователю предлагается восстановить несохраненный документ (см. рис 4.5).

    (рис 4.5) Предложение восстановить несохраненный документ

    Если вы щелкнете по кнопке ).

    (рис 4.6) Окно Recover Unsaved Documents

    В таблица 4.2.

    Варианты, предлагаемые в окне Recover Unsaved Documents
    Вариант Описание
    Recover (Восстановить) Восстановление выбранных документов и удаление их из списка.
    Recover All (Восстановить все) Восстановление всех документов и удаление их из списка; в этом случае не нужно подтверждать выполнение операции для каждого элемента
    Remove (Удалить) Удаление выбранных документов из базы данных AutoSave
    Remove All (Удалить Все) Удаление всех документов из базы данных AutoSave

    Если пользователь щелкнул по кнопке No, то восстановление документов, сохраненных автоматически, можно осуществить позже, выбрав File => AutoSave => Recover AutoSaved Documents (Файл $$\Rightarrow$$ Автоматическое сохранение $$\Rightarrow$$ Восстановить документы, сохраненные автоматически). После этого появится окно Recover Unsaved Documents, и пользователь сможет восстановить или удалить документы описанным выше способом.

    Документ не может быть восстановлен, если не найдена реплика базы данных документов. Он остается в базе данных AutoSave "как есть", и позже можно снова его восстановить. Если документ был модифицирован с момента автоматического сохранения, появится соответствующее сообщение и пользователю будет предложено либо переписать документ, используя сохраненный вариант, либо сохранить внесенные изменения. Если пользователь решит восстановить документ, полученный в результате автоматического сохранения, документ будет открыт в Lotus Notes в режиме редактирования. AutoSave не будет автоматически сохранять документ от лица пользователя после восстановления. Если документ восстановлен из базы данных AutoSave, он также удаляется из базы данных, что позволяет поддерживать приемлемые размеры базы данных AutoSave.

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

    Замечание Этот вариант работает только в том случае, если в форме активировано автоматическое сохранение.

    Иногда пользователю, редактирующему документ, требуется немедленно его сохранить. Текущий документ можно сохранить в базу данных AutoSave, выбрав File => AutoSave => Autosave Now (Файл $$\Rightarrow$$ Автоматическое сохранение $$\Rightarrow$$ Выполнить автоматическое сохранение немедленно).

    4.2.5 Получение доступа к базе данных AutoSave

    База данных AutoSave находится в пользовательской директории Data. После создания база данных AutoSave именует файлы так же, как файлы почты. К названию базы данных добавляется приставка as_. В нашем сценарии у пользователя Manny Santana база данных AutoSave будет называться: as_msantana.nsf. Если база данных с таким именем уже существует, то к названию будет добавлена цифра 1 и далее, до тех пор, пока не будет создано уникальное имя.

    Учитывая особенности присвоения имен в базе данных AutoSave будут возникать конфликты с такими именами пользователей, как John Doe, Jane Doe, James Doe и т. д. Чтобы быть уверенными в том, что AutoSave соответствует текущему пользователю, после создания базы данных необходимо проверить пользователя, указанного в файле NOTES.INI:

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

    В нашем приложении этот элемент будет добавлен к файлу NOTES.INI пользователя Manny Santana:

    AUTO_SAVE_USER,Manny Santana/ITOSElectronics=as_msantana.nsf

    Когда пользователь запускает Lotus, происходит проверка файла NOTES.INI на наличие элементов, относящихся к базе данных AutoSave. Если такие элементы найдены, название базы, заданное в элементе, используется в качестве названия базы данных AutoSave. Если пользователь не обладает доступом к заданной базе данных AutoSave, он получит сообщение об ошибке и функция AutoSave будет отключена. Если заданной базы данных не существует, будет создана новая база данных, при этом будет использовано имя, заданное в элементе. Если соответствующий элемент с именем пользователя отсутствует в файле NOTES.INI, то он в нем создается, соответственно создается база данных с учетом правил присвоения имен, описанных выше.

    4.3 Общие столбцы (Shared Columns)

    Программа Lotus Domino Designer 7 предоставляет возможность создания общих столбцов, используемых в представлениях и папках. Общий столбец – это отдельный элемент дизайна, однако, будучи вставленным в представление, он становится его частью. Разрабатываемый общий столбец обладает теми же свойствами и внешним видом, что и неотделяемый столбец в представлении и папке. Кроме того, общий столбец обладает специфичными свойствами. В окне свойств ), можно задать название столбца (обязательно), псевдоним (не обязательно) и комментарий (не обязательно).

    (рис 4.7) Окно свойств Shared Column

    Представление или папка, содержащие общий столбец, обратно совместимы для доступа из Всемирной сети и Lotus Notes. Общие столбцы могут быть использованы в DB2 Query View, о чем уже упоминалось в п. 2.3 "Query Views". Общие столбцы, подобно общим полям, не являются многоязычными элементами.

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

    4.3.1 Создание общего столбца

    Чтобы создать новый общий столбец, выберите Column в меню Shared Code. Щелкните по кнопке New Shared Column (Создать общий столбец) или выберите Create => Design => Shared Column (Создать $$\Rightarrow$$ Разработка $$\Rightarrow$$ общий столбец). Также можно копировать и вставлять существующий разрабатываемый общий столбец.

    Чтобы создать новый общий столбец, основываясь на разработке существующего столбца в представлении, откройте представление, выделите столбец, затем выберите ).

    (рис 4.8) Использование контекстного меню для создания нового общего столбца

    После этого появится окно, в котором надо ввести название нового общего столбца (см. рис 4.9). В результате будет создан новый общий столбец, а текущий столбец останется без изменений. Существующий столбец полностью независим от только что созданного общего столбца, поэтому если пользователю захочется унаследовать изменения дизайна из нового общего столбца, ему необходимо удалить существующий столбец в представлении и вставить новый общий столбец, чтобы заменить тот неотделяемый столбец.

    (рис 4.9) Присвоение имени новому общему столбцу

    В приложении ITSO Electronics существует представление "Sales People By Name", в котором есть столбец Sales Person (Торговый агент). Нам необходимо отобразить такую же информацию в представлении "Sales People By Number". Следовательно, столбец Sales Person будет использован для создания нового общего столбца, который мы назовем Sales Person. Представления, в которых использованы общие столбцы, могут быть открыты в предыдущих версиях клиента Lotus Notes.

    4.3.2 Использование общего столбца

    Для использования общего столбца в представлении откройте представление и выберите ). Отметьте галочкой опцию Use Formula Only (Использовать только язык формул), если хотите заменить свойства отображения колонки, такие как шрифт и расположение колонки в представлении.

    Не выбирайте этот параметр, если хотите зафиксировать свойства отображения. Programmatic Name (Программное имя) (в окне Properties => закладка Advanced ) вставленного/присоединенного столбца не наследуется из общего столбца, вне зависимости от параметра опции Use Formula Only ; следовательно, это значение всегда может быть изменено. Тем не менее, значение столбца (формула) не может быть изменено.

    (рис 4.10) Окно Insert Shared Column

    Чтобы использовать общий столбец представлено обновленное представление со вставленным общим столбцом.

    (рис 4.11) Обновленное представление Sales People By Number со вставленным общим столбцом Sales Person

    Для изменения дизайна общего столбца откройте список общих столбцов, щелкнув . Обновленные представления повторно сохраняются, используя ID текущего пользователя, к тому же в представлениях, использующих опцию Use Formula Only (Использовать только формулу), обновляется только формула.

    (рис 4.12) Сохранение общего столбца

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

    (рис 4.13) Удаление общего столбца

    Щелкнув по командной кнопке .

    (рис 4.14) Информационное окно, отображающее все представления, использующие этот столбец

    4.4 Расширенные настройки представлений и папок

    Свойство столбца, называемое ).

    (рис 4.15) Свойство столбца "User-definable"

    Мы хотим улучшить приложение ITSO Electronics с помощью добавления столбца, показывающего регион, выбранный в этом месяце, а также указывающего на то, относится ли документ к текущему пользователю. Иконка в виде звезды отображается в том случае, если данный регион выбран в текущем месяце. Синяя стрелка указывает на то, что данный документ относится к текущему пользователю. В противном случае в этом столбце ничего не отображается. Перед добавлением столбца профиля пользователя мы предполагаем, что приложение содержит профильный документ, который называется SalesProfile. Для столбца профиля пользователя может быть использован только один "общий" профильный документ; следовательно, при создании профильного документа дополнительный параметр uniquekey не используется. За более подробной информацией о профильных документах обратитесь к статье IBM developerWorks $$\text{\textregistered}$$ "The hidden power of Profile documents" по адресу: http://www.ibm.com/developerworks/lotus/library/ls-Profile_documents/

    Для того чтобы добавить новый столбец профиля пользователя в представление "Sales Person By Name" приложения ITSO Electronics, сделайте следующее:

  • Откройте представление в Domino Designer и вставьте новый столбец, щелкнув Create => Insert new column (Создать $$\Rightarrow$$ Вставить новый столбец).
  • Откройте окно свойств ):
  • Активируйте опцию Display values as icon (Отображать значения в виде иконок), так как столбец профиля пользователя будет отображать иконку, которая соответствует региону, выбранному в текущем месяце, или индикатор, показывающий отношение к текущему пользователю.
  • Активируйте опцию User definable (Определяемая пользователем).
  • Определите существующий профильный документ в базе данных SalesProfile в поле Profile Document.
  • Используйте @UserName в качестве формулы значения столбца ( Column Value ).Замечание Формула значения столбца должна быть непостоянной, такой как @Username, @Created или @Random. В качестве формулы значения столбца можно использовать любую непостоянную формулу, так как ее значение не вычисляется. Если использована постоянная формула, такая как "", или специальная текстовая функция, такая как @DocNumber, профильный столбец пользователя не будет отображаться корректно, и для каждого документа в представлении появится сообщение Replication or Save Conflict (Конфликт репликации или конфликт сохранения). (рис 4.16) Определение столбца профиля пользователя
  • В закладке ), в поле (рис 4.17) Закладка Advanced в окне свойств Column

    Конечный пользователь, редактирующий профильный документ, в большинстве случаев не сможет написать эту формулу. Вычисляемое поле, содержащее формулу, а в нашем случае это представлен дизайн формы SalesProfile и показано значение поля в поле $ToRegion, которое генерирует значение формулы.

    (рис 4.18) Форма SalesProfile в Domino Designer
  • На рис 4.19 представлен профильный документ SalesProfile. Введите значения в поля RegionSelection и HighlightUser. Формула поля $ToRegion вычисляет новую формулу, которая будет использована для столбца, определяемого пользователем. Например, если выбран регион South East и отмечена галочкой опция Highlight User, значение формулы $ToRegion будет следующим:
    @If(SName = @Username; 111; SRegion = "South East"; 159; 0)
    (рис 4.19) Профильный документ SalesProfile

    Опция, выбранная пользователем, будет доступна всегда, а не только когда выбрано ).

    (рис 4.20) Сообщение об ошибке, касающееся столбца профиля пользователя

    После того как представление будет сохранено, столбец профиля пользователя появится в представлении Sales People By Name (рис 4.21).

    (рис 4.21) Столбец профиля пользователя, отображающий иконки в представлении
  • Замечание Будьте осторожны при использовании кавычек и обратных косых черт в вычисляемой формуле поля. Из-за того что множество макроформул содержат кавычки, а некоторые содержат обратные косые черты, вычисляемая формула значения поля профиля часто должна содержать кавычки (или обратные косые черты) внутри кавычек, что приведет к путанице. Поэтому следует делать вычисляемые поля видимыми только на время разработки, как мы и сделали в данном случае, что позволяет редактировать поля, видеть результирующую формулу и определять синтаксически правильные элементы. Также следует помнить о том, что когда вы вставляете данные из других полей в вашу формулу, в них могут содержаться кавычки или обратные косые черты. Поэтому вам придется использовать @ReplaceSubstring(название поля; "\\":"\"; "\\\\"; "\\\"") для преобразования этих символов в правильные строковые литералы.

    4.5 Дополнения к языку формул

    Язык формул Lotus Notes обновлен в Domino Designer 7. Новые @-функции внедрены как для поддержки интеграции IBM DB2 и IBM Workplace Client TechnologyТМ, так и для поддержки средств безопасности политик и блокирования ECL. Также была добавлена новая @-команда, предназначенная для обнаружения всех папок, в которых располагается выбранный документ.

    К новым командам относятся следующие:

  • @AdminECLIsLocked: новая функция, которая проверяет текущий статус Administration ECL в адресной книге.
  • @DB2Schema: функция, которая по заданному в виде текстовой строки названию базы данных возвращает текстовую строку, содержащую схему DB2 заданной базы данных, если это база данных db2nsf, или же пустую строку, если это база данных не db2nsf. Эта функция полезна в формуле SQL Query в Query View, (см. п. 2.3, "Query View") где вы должны определить формулу, генерирующую SQL-запрос, который возвращает записи, необходимые вам. SQL-запрос должен использовать полное точное табличное имя, включающее название схемы, и желательно использовать именно функцию @DB2Schema, а не название жестко закодированной схемы, чтобы дизайн можно было переносить на другие серверы и приложения.
  • @IsDB2: новая функция, которая по заданному серверу и имени файла или серверу и replica-копии ID базы данных сообщает о том, включена ли в данной базе данных поддержка DB2 или нет.
  • @IsEmbeddedInsideWCT: новая функция, которая определяет, встроена ли какая-либо часть текущей сессии Notes в клиент Workplace.
  • @PolicyIsFieldLocked: новая функция, которая определяет, когда поле заблокировано административной политикой и не может быть изменено.
  • @Command([DiscoverFolders]): команда, отображающая окно Folders containing current document (Папки содержащие текущий документ).
  • Замечание функция @IfError вышла из употребления в Lotus Domino Designer 7.0, однако она полностью совместима с предыдущими версиями.

    Для получения дополнительной информации об этих новых функциях и командах см. Lotus Domino Designer 7 Help по адресу: http://www.lotus.com/ldd/doc/domino_notes/7.0/help7_designer.nsf.

    4.6 Дополнения к классам LotusScript, COM и OLE

    К языку LotusScript были добавлены улучшенные возможности:

  • поддержка новых средств профилирования кода, обсуждением которых мы займемся в п. 5.1, "Профилирование кода в приложении ITSO Electronics";
  • новые возможности работы с коллекциями документов;
  • расширенная поддержка XML;
  • необходимая поддержка для интеграции с технологией Workplace Client. Также следует отметить одно новое свойство Lotus Domino Designer 7, добавленное к LotusScript. Это свойство класса NotesUIDocument называется ModifiedSinceSaved и выявляет изменения, произведенные в документе в режиме редактирования с момента последнего сохранения.
  • Для получения дополнительной информации об обновлениях в языке LotusScript в Lotus Domino Designer 7 перейдите к Lotus Domino Designer 7 Help по адресу: http://www.lotus.com/ldd/doc/domino_notes/7.0/help7_designer.nsf

    4.7 Дополнения к классам Java и CORBA

    Программное обеспечение Lotus Domino Designer 7 поддерживает новые версии Java, Java Virtual Machine (JVMTM) 1.4.2 и новую версию программы синтаксического анализатора расширяемого языка разметки гипертекста (XML). С помощью отладки Java можно настраивать агенты Java, Web-сервисы и библиотеки скриптов для осуществления удаленной отладки с помощью клиента Lotus Notes.

    К Lotus Domino Designer 7 добавлены следующие средства и функции:

  • документация к ядру SunTM Java для классов Java и CORBA;
  • поддержка платформы Sun JavaTM 2, Technology Edition, V1.4.2;
  • новый метод approveHostedOrgStorageDeletion класса AdministrationProcess;
  • новый метод getModifiedDocuments класса Database;
  • новое свойство UntilTime класса DocumentCollection;
  • поддержка Java Platform Debugger Architecture (JPDA) (Архитектура отладчика платформы Java).
  • Для получения дополнительной информации о поддержке Java и CORBA в Lotus Domino Designer 7 перейдите к Lotus Domino Designer 7 Help по адресу: http://www.lotus.com/ldd/doc/domino_notes/7.0/help7_designer.nsf

    Вернуться к учебному плану