Uploaded by workmartynov

Lotus Domino. Разработка приложений Domino Designer R7

advertisement
InterTrust
E.B. Поляков
Разработка приложений в
Domino Designer R 7
тел./факс: (495) 956-7928
http://www.intertrust.ru
E-mail: intertrust@inttrust.ru
УДК 004.45
ББК 22.18
П 16
Поляков Е. В.
«Разработка приложений в Domino Designer R 7»
Книга посвящена вопросам «визуальной» разработки приложений в среде Lotus Domino версии R 7.
Основное внимание уделено рассмотрению элементов дизайна и их свойствам, влияющим на поведение
приложения. В книге была сделана попытка «параллельного» рассмотрения элементов дизайна Lotus
Domino в интерфейсе как клиента Notes, так и браузера. В книге практически не рассматриваются вопросы
собственно программирования, поэтому желательно использовать настоящее пособие совместно с
литературой, представленной в главе 20.
Изложение материала сопровождается обширным набором иллюстраций и примеров, наглядно
демонстрирующих варианты применения конкретных элементов дизайна.
Книга предназначена разработчикам приложений в среде Lotus Domino, и может быть полезна как
начинающим разработчикам, так и специалистам со стажем.
Lotus, Lotus Domino и Lotus Notes являются зарегистрированными торговыми знаками фирмы IBM
Company. Все другие упомянутые в данном издании товарные знаки и зарегистрированные товарные
знаки принадлежат их законным владельцам.
©InterTrustCo., 2006
© Поляков Е., 2006
© Оформление обложки Букина А., 2006
Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни
было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских
прав.
ООО «Светотон»
109341, г. Москва, ул. Верхние Поля, д. 18
E-mail: svton@ from.ru
Подписано в печать 24.05.2005 г. Формат 60x90/8
Печать офсетная. Бумага офсетная № 1.
Усл. печ. л. 62,0. Тираж 500 экз. Заказ 5521.
Отпечатано с готового оригинал-макета
в ФГУП «Производственно-издательский комбинат ВИНИТИ»,
140010, г. Люберцы Московской обл., Октябрьский пр-т, 403.
ISBN 5-7419-0048-8
3
Предисловие автора
Светлой памяти Николай Николаевича Ионцева, человека, внесшего значительный вклад в дело
становления и популяризации технологий IBM/Lotus в России, посвящается эта книга.
Книга, которую Вы держите в руках, посвящена вопросам создания приложений под управлением
Lotus Domino/Notes версии R 7 - программного продукта компании IBM Company.
Материал книги состоит из 17 основных частей и сегмента приложений. Вторая глава книги дает
представление о собственно базе данных Lotus Domino, процедуре ее создания, а также свойствах БД. В
третьей главе рассматривается интерфейс среды Domino Designer. Каждая последующая глава книги, из
основной части, представляет описание конкретного элемента дизайна верхнего уровня (формы, виды,
папки и т.д.). Для каждого элемента дизайна рассматриваются его роль в иерархии приложения Lotus
Domino, процедура создания и описание его свойств. Так же в этих главах рассматриваются элементы
дизайна более низкого уровня (поля, кнопки, столбцы и т.д.), которые можно разместить на текущем
элементе дизайна верхнего уровня. Сегмент приложений содержит ряд параграфов, которые можно
опустить при первоначальном знакомстве с продуктом Domino Designer, однако, их содержание может
помочь разработчику при более глубоком «погружении» в технологии Lotus Domino.
Автор будет искренне рад Вашим замечаниям и предложениям по содержанию книги и любой
информации технического характера по затронутым в книге вопросам. Направляйте их по e-mail:
ibicus77@rambler.ru или «оставляйте» на WWW-сервере нашей компании http://www.intertrust.ru.
Автор выражает искреннюю благодарность и признательность всем, кто оказывал прямую или
косвенную помощь в работе над книгой. Особые благодарности ведущим сотрудникам компании InterTrust
Co.: Киселеву Е. А., Баранову О. В., Панову В. А., Иванову Д. Ю. - без помощи которых, книга выглядела
бы другой. Специальные благодарности: Линеву А. А., Бреусу И. Б., Зыковой Н. П., Евсееву П. П.,
Улазовской С. Д., Поляковой Г. Д. и Полякову В. Г. за существенную помощь, оказанную при написании
настоящей книги.
С уважением, Е. Поляков
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
4
1 Введение
В настоящей книге мы попытаемся последовательно пройти большинство этапов построения
приложения под управлением Lotus/Domino версии R 7, от создания пустой базы данных, до наполнения
ее элементами дизайна. По возможности полно рассмотрим свойства и поведение всех стандартных
элементов дизайна, определенных в Domino Designer, который является базовым средством разработки
приложений в Lotus/Domino. Внешний вид и функциональность элементов дизайна будут «параллельно»
рассматриваться как в интерфейсе клиента Notes, так и браузера.
Основное внимание будет уделено стандартным базам данных (БД), т.е. таким, у которых в окне
свойств для поля Туре установлено значение Standard. Следует заметить, что у некоторых элементов
дизайна в нестандартных БД могут появляться дополнительные свойства и параметры. Однако
рассмотрение таких свойств выходит за предмет настоящей книги.
Так же хотелось бы отметить, что, к сожалению, стандартная документация, поставляемая с
продуктом Domino/Notes, не всегда поспевает за изменениями в самом продукте. Поэтому автору
приходилось проверять действие большей части свойств и объектов дизайна на собственном опыте.
Бывали случаи, когда поднятие определенных флагов и свойств в одном месте приложения, вызывало
появление недокументированных свойств или характера поведения совершенно в другом месте
приложения. В связи с этим хочу обратиться к Вам - Читатель. Если Вы нашли ошибки или неточности в
этой книге, а так же если, исходя из собственного опыта, знаете о специфических особенностях
стандартных БД - пожалуйста, не поленитесь, напишите автору по e-mail: ibicus77@rambler.ru. Кроме
искренней признательности, обязуюсь в следующих опусах указать ссылку на источник.
За рамками настоящей книги остаются разделы, связанные собственно с языками
программирования, используемыми при создании приложений под Lotus/Domino. Этим вопросам
посвящены книги, перечисленные в главе 20.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
5
2
Базы данных
База данных в Lotus/Domino представляет собой контейнер для хранения данных пользователей,
элементов дизайна (формы, виды, папки и т.д.), списка управления доступом к информации (Access
Control List-ACL) и дополнительной информации (Header БД и т.д.). Любое приложение под управлением
Lotus/Domino использует хотя бы одну базу данных (БД). В настоящей главе будут рассмотрены вопросы
создания БД как «с нуля» (т.е. практически все элементы дизайна будут в дальнейшем созданы
разработчиком), так и создание БД на основе существующих БД или их шаблонов с возможностью
последующего наследования элементов дизайна.
В 7-й версии БД Lotus/Domino могут хранить свою информацию в двух форматах: NSF и DB2. Первый
- NSF (Notes Storage Facility) известен с самых ранних версий Lotus/Domino и, с точки зрения
операционной системы, представляет собой файл в файловой системе сервера или рабочей станции под
каждую БД Lotus/Domino. Формат DB2 (называемый так же NSFDB2) появился только в 7-м релизе
продукта и позволяет хранить информацию БД Lotus/Domino в рамках одноименной реляционной базы
данных компании IBM.
В настоящее время (релиз Domino/Notes 7.0.1) формат NSFDB2 представлен исключительно для
тестовых целей и не предназначен для промышленного использования. Кроме этого, формат NSFDB2
сейчас официально не поддерживается техническими службами компании IBM. Тем не менее,
рассмотрению нового функционала Domino Designer, связанного с NSFDB2, отведено в настоящей книге
ряд разделов.
Формат NSFDB2, по крайней мере в более поздних версиях 7-го релиза, должен существенно
повысить производительность приложений БД Lotus/Domino. Кроме этого, данный формат обеспечивает
разработчиков новыми возможностями (DB2 Access View и DB2 Query View) по созданию приложений.
Внешние отличия между форматами NSF и NSFDB2, с точки зрения разработчика и пользователей, не так
существенны, и в рамках этой книги, про формат хранения будет далее идти упоминание только при
различиях в реализации конкретных элементов дизайна.
Формат NSFDB2 поддерживается только для БД, размещенных на сервере Domino, на котором
должны быть выполнены определенные настройки для взаимодействия с сервером DB2. Кроме этого,
если планируется использовать DB2 Access View и DB2 Query View, то необходима установка
дополнительного программного обеспечения - DB2 Access server.
В настоящее время (R 7.0.1) ряд служебных серверных БД Domino могжет быть представлен только
в формате NSF, но не NSFDB2 (подробный список таких БД приведен в документации). При создании
новых БД их формат обычно определяется настройками сервера Domino (документ Server -> закладка
DB2 -> поле DB default creation). В ряде специальных случаев формат БД можно определить в процессе
их создания. Например, при регистрации нового пользователя можно определить формат БД их почтового
ящика. Для преобразования БД из формата NSF в NSFDB2 можно использовать задачу compact с ключом
-р. К сожалению, для обратного преобразования у задачи compact нет соответствующего ключа.
Выполнить эту операцию можно, установив на сервере формат по умолчанию для создаваемых БД в
значение NSF, и затем воспользоваться механизмом репликации.
Для работы с БД в формате NSFDB2 разработчику не требуется под каждую БД Lotus/Domino
создавать свои собственные объекты DB2 (базы, таблицы, схемы и т.д.), все эти операции берет на себя
сервер Domino. Если не планируется использовать DB2 Access View и DB2 Query View, то даже
администратору (не говоря уже о разработчике и конечном пользователе) не требуется иметь отдельные
ID пользователей DB2.
2.1 Создание БД «с нуля» или с использованием шаблона
Для создания новой базы данных через главное меню Lotus Notes необходимо выбрать пункты меню
File -> Database -> New. Это приведет к выводу модального окна New Database (новая БД) для
определения параметров новой базы:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
6
Рис. 2.1 Окно создания новой базы данных
При этом в секции Specify New Database Name and Location (укажите имя и местоположение новой
БД) необходимо определить поля:
•
Server - в выпадающем списке нужно выбрать (или ввести новый) сервер, на котором будет
расположена создаваемая БД. Выбор в качестве сервера любого значения отличного от Local влечет
за собой при реальном создании (т.е. после заполнения всех необходимых полей и нажатии на Ok)
проверку Ваших прав на создание новых БД на выбранном сервере. Вы можете не иметь таких прав,
или Вам вообще может быть запрещен доступ на данный сервер, и т. п. Дабы не рассматривать такие
случаи, мы везде в дальнейшем (если это не оговорено дополнительно) будем считать, что имеем все
права для выполнения необходимых операций;
•
Title - заголовок базы данных. Длина допустимого значения для этого поля - 96 символов (следует
не забывать, что при использовании русских букв каждая из них будет занимать 2 байта);
•
File Name - имя файла базы данных. Формат и ограничения должны соответствовать
используемой операционной системе. Если создаваемая БД будет использоваться в качестве
шаблона, то расширение файла должно быть *.ntf (более подробно шаблоны БД будут рассмотрены в
разделе 2.4), для БД, которые будут хранить документы - расширение *.nsf, *.ns4, *.ns5 и *.ns6 - для
баз которые будут использоваться в Lotus Notes/Domino версии R4, R5 и R6 соответственно. В случае
Size Limit (максимальный размер БД в
*.ns4 в секции появляется дополнительная кнопка
Гбайтах). При ее нажатии появляется модальное окно, в котором можно выбрать дискретное значение
размера создаваемой БД от 1 до 4 Гбайт.
Рис. 2.2 Окно выбора максимального размера БД для Lotus Notes/Domino версий R 4.x
Обратите внимание, что даже если БД создается в формате NSFDB2, расширение *.nsf (или его
разновидности) у БД все равно присутствует.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
7
Возвращаемся опять в секцию Specify New Database Name and Location окна New Database:
, расположенная справа от поля File Name, позволяет выбрать папку локальной станции
•
кнопка
или сервера, в которой будет лежать создаваемая БД. При нажатии на нее появляется диалоговое
окно:
Рис. 2.3 Диалоговое окно выбора папки для создаваемой БД
•
кнопка Encryption позволяет определить параметры локального шифрования БД. При нажатии на
эту кнопку появляется модальное окно:
Рис. 2.4 Окно параметров локального шифрования
Локальное шифрование осуществляется с использованием ID-файла пользователя (или ID-файла
сервера для БД, расположенных на сервере). По умолчанию выбрана радиокнопка Do not locally encrypt
this database (не шифровать локально данную БД). Разработчик может выбрать радиокнопку Locally
encrypt this database using (локально шифровать эту БД с использованием), при этом становится
доступным следующее поле, определяющее уровень шифрования Simple Encryption (простой), Medium
Encryption (средний) или Strong Encryption (сильный). Стоит не забывать, что чем выше уровень
шифрования, тем больше времени может затрачиваться на процесс шифрования/дешифровки.
Возвращаемся опять в секцию Specify New Database Name and Location окна New Database:
•
флаг Create full text index for searching (создание полнотекстового индекса для поиска) позволяет
сразу при создании БД сгенерировать для нее полнотекстовый индекс;
•
кнопка Advanced (дополнительные свойства БД). При нажатии на эту кнопку появляется
модальное окно:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
8
Рис. 2.5 Окно дополнительных свойств БД
Все свойства из этого модального окна представлены на закладке Advanced tab окна свойств БД и
будут рассмотрены позднее в параграфе 2.3.7.
Секция Specify Template for New Database (укажите шаблон для новой БД), как видно из названия,
предназначена для создания БД на основании уже имеющихся в системе шаблонов и содержит
следующие элементы интерфейса:
•
поле Server определяет сервер, на котором находятся БД шаблонов;
•
поле Template (шаблон) - состоит из подпунктов -Blank-, Database Library, Design Synopsis и т. д. и
позволяет выбрать шаблон БД, из которого будет взят дизайн создаваемой БД. Если мы хотим
самостоятельно разработать все (или большинство) элементов дизайна, то нужно выбрать подпункт Blank-;
•
поле File Name недоступно для ввода, но в нем будет отображаться имя файла, соответствующее
БД шаблона, если таковая выбрана в предыдущем поле;
•
флаг Show advanced templates (показывать расширенные шаблоны) позволяет включить в поле
Template дополнительные шаблоны;
При выборе любого шаблона отличного от-Blank-, становятся доступными:
•
кнопка About, которая выводит документ About This Database (об этой базе данных), если
таковой имеется для выбранного шаблона БД;
•
поле флаг Inherit future design changes (наследовать будущие изменения дизайна с шаблона).
Выбор этого флага позволит БД наследовать изменения, произошедшие в шаблоне. Для БД,
расположенных на сервере, может происходить автоматическое обновление дизайна, для локальных
БД - «вручную».
Заполнение рассмотренных выше полей (Server, Title, File Name и Template) достаточно для
создания новой БД.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
9
Все рассмотренные параметры и свойства БД (за исключением имени файла БД, сервера и папки ее
содержащей) можно затем изменить через окно свойств БД и для большинства из них программным
путем.
2.2 Создание новой БД путем копирования с существующей
Иногда бывает необходимо создать новую БД, которая будет содержать элементы дизайна (и
возможно документы с данными) уже существующей БД. В этом случае откроем БД, из которой мы хотим
создать копию, и выберем пункт меню File -> Database -> New Сору. При этом появится модальное окно:
Рис. 2.6 Окно создания новой копии БД
Поля Server, Title, File Name, Create full text index for searching и кнопки Encryption,
и Size
Limit (появляющаяся для БД с расширением *.ns4) имеют тот же смысл, что и в рассмотренном ранее
окне создания новой базы «с нуля» или из шаблона (см. Рис. 2.1). Новыми для нас являются поля:
•
радиокнопки Database design and documents (дизайн БД и документы) и Database design only
(только дизайн). Первая опция, при ее выборе, позволяет скопировать в новую БД не только элементы
дизайна, но так же и документы с данными пользователей. Соответственно вторая опция (Database
design only) предназначена для копирования только элементов дизайна;
•
флаг Access Control List (список управления доступом). При его выборе осуществляется полное
копирование списка управления доступом в новую БД из существующей.
При копировании надо помнить о списке управления доступом к существующей БД (может так
оказаться, что Вы не имеете такового ко всей БД или каким-то элементам дизайна и/или документам).
Если БД, с которой осуществляется копирование, наследует свой дизайн с шаблона, то и создаваемая по
ее образу копия так же будет это делать. Изменить последнее можно через окно свойств БД.
2.3 Свойства БД
В предыдущих параграфах мы научились создавать новые БД как «с нуля» так и на основе
существующих шаблонов или БД. Какими еще свойствами обладает БД, и что с этими свойствами
связано. Для отображения этих свойств надо открыть БД (или выбрать ее иконку на рабочем пространстве
Notes) и выбрать пункт меню File -> Database -> Properties. При этом появляется окно с закладками:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
10
Рис. 2.7 Окно свойств БД
Рассмотрим подробнее поля и кнопки этого окна по закладкам.
2.3.1
Database Basics tab - основная закладка
На первой закладке
, называемой Database Basics tab (основная закладка), некоторые из полей
нам уже знакомы. В первой секции расположены следующие элементы интерфейса:
•
Title (заголовок БД). Значение поля можно изменить при наличии соответствующих прав;
•
FileName и Server определяют соответственно имя файла БД и сервер, ее содержащий. Поля
только для чтения;
•
Туре - тип базы данных. Поле доступно для редактирования. В Lotus/Domino R 7 может быть:
• Standard (стандартный), наиболее часто встречающийся тип БД;
• Library (библиотечный). Используется для БД, которые содержат ссылки на другие БД.
Основное предназначение таких БД - аккумулировать ссылки на имеющиеся БД с их краткими и
расширенными описаниями, идентификатором реплики и списком менеджеров БД. Добавление
новых БД в библиотечную базу данных осуществляется через меню File -> Database -> Publish. В
стандартной поставке Lotus/Domino R 7 входит шаблон Database Library (7) (DBLIB4.NTF), на
основе которого можно создать библиотечную БД;
• Personal Journal (персональный журнал). Основное предназначение этой БД - ведение
частных записей типа черновик. В стандартной поставке Lotus/Domino R 7 входит шаблон Personal
Journal (7) (JOURNAL6.NTF), на основе которого можно создать БД типа «персональный журнал»;
• Domino Directory (каталог Domino - термин, использующийся вместо «адресной книги»,
начиная с версии R 5). Применяется обычно для БД, которые служат в качестве адресных книг. В
стандартной поставке Lotus/Domino R 7 существует несколько шаблонов с данным типом БД,
например, Personal Address Book (PERNAMES.NTF);
• Directory Catalog (облегченная адресная книга). Основное предназначение таких БД для
создания компактных по объему каталогов, используемых в частности и для адресации почты. В
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
11
стандартной поставке Lotus/Domino R 7 входит шаблон Directory Catalog (DIRCAT5.NTF) с
соответствующим типом данных. Шаблон входит в набор расширенных шаблонов (кнопка Show
advanced templates);
• Multi DB Search (БД полнотекстового индекса по нескольким другим БД). Основное
предназначение БД для создания полнотекстового индекса с возможностью поиска по нескольким
базам данных. В стандартной поставке Lotus/Domino R 7 входит шаблон Search Site (6)
(SRCHSITE.NTF) с данным типом БД. Шаблон входит в набор расширенных шаблонов (кнопка
Show advanced templates);
• Portfolio (портфолио). Используется для БД, которые содержат гипертекстовые ссылки на
другие ресурсы в виде закладок (bookmark). В стандартной поставке Lotus/Domino R 7 входит
шаблон Bookmarks (7) (BOOKMARK.NTF) с данным типом БД. Шаблон входит в набор
расширенных шаблонов (кнопка Show advanced templates);
• IMAP Server Proxy (прокси-сервер протокола Internet Message Access Protocol).
Используется в процессе получения почты по протоколу IMAP. В стандартной поставке
Lotus/Domino R 7 входит шаблон Mail (IMAP) (IMAPCL5.NTF) с данным типом БД. Шаблон входит в
набор расширенных шаблонов (кнопка Show advanced templates);
• News Server Proxy (прокси-сервер новостей). Используется в процессе работы с
новостями по протоколу Network News Transfer Protocol. В стандартной поставке Lotus/Domino R 7
входит шаблон News Articles (7) (NNTPCL6.NTF) с данным типом БД. Шаблон входит в
расширенные шаблоны (кнопка Show advanced templates);
• Subscriptions (подписка на рассылку). Используется в процессе подписки на получение
изменений из БД Lotus/Domino и Web-сайтов. В стандартной поставке Lotus/Domino R 7 входит
шаблон Subscriptions (6) (HEADLINE.NTF). БД, созданные по этому шаблону, для организации
механизма подписки имеют указанный тип БД. Шаблон входит в расширенные шаблоны (кнопка
Show advanced templates);
• Mailbox (почтовый ящик сервера). Используется в процессе получения почты. Почтовые
БД серверов (MAILn.BOX) Lotus/Domino R 7 имеют данный тип данных;
• Mailfile (почтовый ящик клиента). В документации на текущий релиз автор не нашел
упоминаний про предназначение данного типа БД.
Несколько слов о поле Туре в свойствах БД. При создании своих собственных приложений «с нуля»,
Вы будете очень редко использовать типы БД отличные от Standard.
Во второй секции Settings (установки) закладки расположены четыре кнопки:
•
Archive Settings (параметры архивирования). Более подробно будут рассмотрены в разделе 18.1;
•
Encryption Settings (параметры локального шифрования). Единственное отличие появляющегося
окна от рассмотренного нами в процессе создания новой БД (см. Рис. 2.4) состоит в том, что для
локальных БД стала доступна кнопка For (для). Нажатие на эту кнопку позволяет выбрать
пользователя, ID-файлом которого будет зашифрована текущая БД. Для серверных БД локальное
шифрование всегда осуществляется ID-файлом сервера. Обратите внимание, что при смене IDфайла, которым осуществляется шифрование, можно потерять доступ к информации текущей БД
(клиент Lotus Notes дипломатично об этом предупреждает).
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
12
Рис. 2.8 Окно параметров локального шифрования для существующей БД, размещенной локально
•
Replication Settings (параметры реплицирования). Более подробно будут рассмотрены в разделе
18.2;
•
Replication History (журнал репликаций). Более подробно будет рассмотрен в разделе 18.3;
Следующая секция Web Access (доступ через Web) имеет следующие флаги:
•
Use JavaScript when generation pages (использовать JavaScript для генерации страниц). Это
достаточно важное свойство для Web-приложений. В зависимости от значения этого поля поведение
Web-приложений может различаться. «Последствия» различий поведения приведены в таблице:
Свойство "Use JavaScript..." не выбрано
Свойство "Use JavaScript..." выбрано
Если на форме нет кнопок, то Domino автоматически
генерирует кнопку Submit. Если кнопок несколько, то Domino
оставляет кнопки, содержащие код на Common JavaScript
или Web/JavaScript, и автоматически конвертирует первую
из оставшихся к кнопке типа Submit, при этом следующие из
оставшихся кнопок в Web не транслируются.
Допускается любое количество кнопок на форме.
Для создания Submit можно использовать кнопку,
акцию или гиперобъект, содержащие команды:
@Command([FileSave]);
@Command([FileCloseWindow])
На форме может быть только одна кнопка типа Submit.
Не поддерживаются команды:
@Command([FileCloseWindow]),
@Command([ViewRefreshFields])
Поддерживаются команды:
@Command([FileSave]), @Command([FileCloseWindow]),
@Command([FileSave]),
@Command([ViewRefreshFields])
Domino проверяет акции на содержание неподдерживаемых Акции выводятся в браузере, даже если они
под Web @-функций и @-команд, и, если таковые имеются, содержат неподдерживаемые под Web @функции и @-команды.
то они не отображаются под Web.
Документы и навигаторы загружаются медленнее, т.к. при Документы и навигаторы загружаются быстрее,
вычисление
формул
гиперобъектов
загрузке
осуществляется
вычисление
формул т.к.
происходит
только
в
момент
действий
гиперобъектов.
пользователя, а не при загрузке. Проверить это
утверждение автору не удалось.
Из опыта известно еще одно различие. В Lotus/Domino, начиная с версии R 5, под Web, если в форме
присутствует поле, значение которого зависит от предшествующего поля, и если у таких полей правильно
установлены флаги Refresh fields on keyword change (обновлять поля при изменение значения данного
поля) и Refresh choices on document refresh (изменять значения поля при обновлении документа), то
происходит реальное перевычисление значения связанного поля. Это все справедливо, если у БД
установлен флаг Use JavaScript when generation pages.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
13
Еще одно замечание. Следует не забывать, что у некоторых пользователей в браузерах может быть
отключена поддержка JavaScript. В этом случае приложения, реализующие свои процессы через
JavaScript, соответственно работать не будут.
• Require SSL connection (требовать соединения с использованием Secure Sockets Layer или SSL).
Позволяет для конкретной базы повысить безопасность передачи данных между Domino-сервером и
Web-клиентом, используя защищенный слой SSL обычно поверх протокола HTTP. Следует не
забывать, что для возможности использования данного механизма, на сервере Domino должна быть
установлена поддержка SSL;
• Don't allow URL open (не разрешать использовать URL для открытия объектов БД). Поднятие этого
флага запрещает в Web-приложениях использовать стандартные URL Domino, которые используются
для доступа к объектам БД (сама БД, виды, формы, документы и т.д.). В этом случае возвращается
ошибка Error 500 HTTP Web Server: Lotus Notes Exception - You are not authorized to access that
database (Ошибка 500 HTTP Web Server - вы не авторизованы на доступ к этой БД). Использовать
данный флаг можно в случае, если доступ в рамках Web-приложения к указанной БД осуществляется с
помощью технологий сервлетов, апплетов и т.д., но не напрямую через стандартные URL Domino.
Последняя секция закладки содержит пять флагов:
•
Disable background agents for this database (запретить выполнение фоновых агентов для данной
БД). Суть понятна из названия, запрещает/разрешает выполнение фоновых агентов для текущей БД
(более подробно агенты будут рассмотрены в разделе 13);
•
Allow use stored forms in this database (разрешить использование форм, сохраненных в текущей
БД). Lotus/Domino позволяет вместе с документом сохранять и форму, по которой он был создан.
Данное свойство соответственно разрешает или запрещает использовать сохраняемые совместно с
документом формы (более подробно формы будут рассмотрены в разделе 4);
•
Display images after loading (отображать графические изображения после загрузки). При выборе
данной опции, в процессе открытия документа, сначала будут отображаться неграфические
изображения (т.е. текст), а уже после его загрузки собственно графика. В противном случае загрузка
документа будет идти последовательно сверху вниз. Данное свойство применимо только к
приложениям в интерфейсе клиента Lotus (но не Web);
•
Allow document locking (разрешить выполнять блокировку для документов). Механизм в Domino,
который позволяет заблокировать доступ на изменение к конкретному документу(ам) на момент
выполнения каких-либо операций (обычно изменение документа некоторым пользователем). Более
подробно механизм блокировок будет рассмотрен в разделе 3.2.1;
•
Allow connection to external database using DCRs (разрешить соединения с внешними БД с
использование механизма DCR). DCR (Data Connection Resource) механизм, позволяющий «общаться»
с внешними БД через задачу DECS (Domino Enterprise Connector Services). В отличие от стандартного
DECS для работы DCR достаточно настройки на уровне элементов дизайна конкретной БД, т.е. минуя
создание документов Connection и Activity в БД DECS Administrator. По умолчанию поле недоступно.
Более подробно механизм DCR будет рассмотрен в разделе 16.5.
2.3.2
Info tab - информационная закладка
Закладка Info tab (информационная закладка)
окна свойств БД имеет следующий вид:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
14
Рис. 2.9 Закладка Info Tab окна свойств БД
На ней присутствуют три раздела Size (размер), Activity (активность пользователей) и Replica ID
(универсальный идентификатор реплики БД).
Секция Size содержит информацию о размере (Disk space), занимаемом БД на диске, числе
находящихся в ней документов (Documents), а также две кнопки:
•
% used (процент объема БД, занимаемого реальными данными, т.е. не «окурки» - место,
оставшееся после удаления документов, и т.п.). По нажатии на эту кнопку, слева от нее выводится
данный процент;
•
Compact (сжатие
пространства в БД.
БД).
Осуществляет
запуск
процедуры
освобождения
неиспользуемого
Секция Activity содержит информацию о дате и времени создания БД (Created), модификации
(Modified) и кнопку User Detail (журнал работы пользователей). По нажатию на эту кнопку выдается
диалоговое окно следующего вида:
Рис. 2.10 Окно «журнал работы пользователей БД»
В окне-списке отображается журнал протокола работы с БД, а в правой части экрана присутствует
обобщенная информация из протокола за ряд прошедших периодов времени. В рамках окна-списка можно
выполнять сортировку информации путем клика по заголовку столбца, а также менять размеры столбцов.
Флаг Record
activity (протоколировать активность пользователей) включает/выключает
протоколирование работы с БД в настоящем окне, а поле Activity is confidential (сделать протокол
работы конфиденциальным) позволяет не показывать настоящий протокол пользователям с уровнем
доступа ниже Дизайнера. Кнопка Copy to clipboard (копировать в буфер обмена) осуществляет
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
15
копирование в буфер обмена информации из данного окна. В дальнейшем скопированную информацию
можно «вставить» в другое приложение (например, MS Word).
Секция Replica ID содержит информацию об уникальном идентификаторе реплики БД и ODS version
(on-disk structure) формат, в котором БД LN/Domino сохраняется на диске. Кроме этого для БД в формате
NSFDB2 присутствует строка Database is DB2 enabled.
2.3.3
Printing tab - закладка колонтитулы
Закладка Printing tab (колонтитулы)
окна свойств БД имеет следующий вид:
Рис. 2.11 Закладка Printing tab окна свойств БД
Страница содержит четыре секции: Specify (что определяем), Header/Footer Text (текст
верхнего/нижнего колонтитула), Format (параметры шрифта) и Options (параметры).
Секция Specify содержит две радиокнопки Header (верхний колонтитул) и Footer (нижний
колонтитул), которые определяют к какому колонтитулу относится расположенная в трех нижних секциях
информация. С помощью этих радиокнопок можно определить и верхний, и нижний колонтитулы.
Секция Header/Footer Text содержит собственно поле для ввода текста колонтитула и шесть кнопок
, которые позволяют вставить в статичный текст колонтитула информацию о
«сквозном» номере страницы в рамках всех распечатываемых документов, о номере страницы в рамках
одного документа, дате и времени печати, символ табуляции и заголовок документа соответственно.
Более подробно о псевдоязыке определения колонтитулов см. документацию.
Секция Format определяет имя, размер и начертание шрифта колонтитула.
Секция Options содержит флаг Print header and footer on first page (печатать верхний и нижний
колонтитул на первой странице), который определяет разрешать ли печать колонтитулов на первой
странице документа.
2.3.4
Design tab - закладка «дизайн»
Закладка Design tab (закладка дизайн)
окна свойств БД имеет следующий вид:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
16
Рис. 2.12 Закладка Design tab окна свойств БД
Если дизайн не скрыт, то вверху окна присутствует текст Design is not hidden (дизайн не скрыт). В
секции Options (параметры) расположены следующие элементы интерфейса:
•
флаг Allow design locking (разрешить осуществлять блокировку элементов дизайна). Данный
механизм похож на блокировку обычных документов пользователей и будет подробно рассмотрен в
разделе 3.2.1;
•
флаг List in Database Catalog (включить БД в список баз упомянутых в БД каталога). БД каталог
(CATALOG.NSF) предназначена для хранения информации обо всех БД, имеющихся в организации.
Если пользователь не желает наличия такого упоминания, то флаг нужно опустить. Поле Categories
(категории) позволяет указать категорию, под которой текущая БД будет отображаться в БД каталога;
•
флаг Show in 'Open Database' dialog (показывать имя БД в диалоговом окне открытие
существующей БД). При снятии этого флага имя БД действительно исчезнет из поля списка Database
(база данных) окна открытия БД. Однако, если пользователь знает имя и путь к БД, то он сможет
открыть ее, указав эти значения в поле Filename (имя файла) диалога открытия БД. Более подробно
процедура открытия существующей БД рассмотрена в разделе 2.5;
•
флаг Include in multi-database indexing (включить текущую БД в индекс полнотекстового поиска
по нескольким БД). Следует обратить внимание, что поднятие данного флага не влечет за собой
немедленного включения текущей БД в механизм полнотекстового поиска по нескольким БД (см.
документацию);
•
флаг Do not mark modified documents as unread (не помечать измененные документы как
непрочтенные). При установленном флаге документы, модифицированные в БД после первого их
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
17
прочтения текущим пользователем, не
распространяется на все виды текущей БД;
будут
помечаться
как
непрочтенные.
Свойство
•
флаг Mark parent note on reply or forward (пометить родительскую запись для ответов или
переправленных документов). Данный флаг используется в стандартном шаблоне почтовой БД для
отображения в виде соответствующих иконок, сигнализирующих о том, что документ является ответом
или переправленным с помощью действия Forward документом.
Секцию Inheritance (наследование) можно условно разделить на две подсекции: верхняя
используется в случае, когда текущая БД наследует дизайн с некой БД-шаблона, нижняя - если текущая
БД сама выступает в роли шаблона. Верхняя подсекция содержит следующие элементы интерфейса:
•
флаг Inherit design from master template (наследовать дизайн БД с главного шаблона)
определяет включить или выключить данную возможность для текущей БД. Здесь под термином
«главный» (master) подразумевается тот факт, что вся БД может наследовать дизайн с одного
(главного) шаблона, а некоторые ее элементы дизайна (например, виды, формы и т.д.) с другого (не
главного) шаблона;
•
•
поле Template name (имя БД шаблона) определяет, с какого собственно шаблона будет
осуществляться наследование дизайна. Сам процесс наследования обычно может быть настроен
автоматически для серверных БД или «вручную», через пункты меню File -> Database -> Refresh
Design или File -> Database -> Replace Design. В первом случае осуществляется обновление, а во
втором замена дизайна БД;
•
флаг Refresh design on admin server only (обновлять дизайн только на административном
сервере). Понятие административный сервер (Administration server) рассматривается в разделе
18.5.4. Смысл флага ясен из названия. Флаг недоступен до тех пор, пока не определено поле
Template name.
Кроме этого, в верхней подсекции может появляться дополнительная текстовая информация. Из
личного опыта, такая информация появляется в случае, когда текущая БД наследует информацию с
шаблона, входящего в стандартную поставку LN\Domino. Например, Template version is 7.0 (30.06.2005),
т.е. указывается версия LN\Domino и дата создания БД-шаблона. В случае если шаблон сам был создан
на основании другого шаблона, который в свою очередь входит в стандартную поставку LN\Domino, текст
этой информации может отличаться от приведенного выше. Например, имя_шаблона1 is based on
имени_шаблона2 version is 7.0 (30.06.2005).
Вторая подсекция секции Inheritance содержит следующие элементы интерфейса:
•
флаг Database file is a master template (файл БД является главным шаблоном) при выбранном
значении указывает, что текущая БД является шаблоном;
•
поле Template name (имя БД шаблона) определяет, как будет называться настоящая БД-шаблон.
Обратите внимание, что имя шаблона (Template name) не обязательно должно совпадать с именем
файла (File Name) или заголовком (Title) собственно БД-шаблона. Связь БД со своим шаблоном
осуществляется через поле Template name. При заполнении этого поля становятся доступными
следующие три флага;
• флаг List as advanced template in 'New Database' dialog (вносить шаблон в список
дополнительных шаблонов в диалоговом окне создания новой БД) - смысл понятен из названия (см.
стр. 8).
• флаг Copy profile documents with design (копировать профильные документы с дизайном). С
версии R 6.5 данный флаг не работает (признано ИБМ как ошибка). Профильные документы
представляют собой «невидимые» в видах и папках документы, которые обычно используются для
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
18
хранения настроечных данных
документацию;
приложения.
Более
подробно о
профильных документах см.
•
флаг Single copy template (шаблон с одинарным копированием). В LN\Domino до версии R 6 для
БД, созданной на основании шаблона, в последнюю (т.е. в БД-приемник) копировались все элементы
дизайна из БД-шаблона. С версии R 6 появилась возможность копировать в БД-приемник не сами
элементы дизайна из БД-шаблона, а ссылки на них. Таким образом, можно добиться значительного
сокращения используемого дискового пространства. Поднятие этого флага не ведет к немедленному
изменению структуры БД-приемника. Для этого необходимо запустить утилиту convert или выполнить
Refresh Design и затем Compact у БД-приемника.
Последняя секция закладки Design называется Multilingual Options (параметры многоязыковой
поддержки). Опции секции предназначены для создания приложений, которые могут работать без
изменений дизайна с пользователями разных языковых сред. Для этого в БД создаются однотипные
элементы дизайна (например, формы, виды и т.д.) для каждого поддерживаемого БД языка. Причем, у
таких элементов должны быть одинаковые алиасы (синонимы). Далее у этих элементов дизайна в их
свойствах, как документов дизайна, на закладке Design (см. раздел 3.1) должно быть определено поле
Language (язык). Тогда, при обращении к таким элементам дизайна по алиасу, будет вызываться тот
элемент дизайна, который отвечает текущему языку, установленному на рабочей станции (страница
International -> General окна User Preferences, путь доступа: File -> Preferences -> User Preferences).
Рис. 2.13 Страница International -> General окна User Preferences
Возвращаемся опять в окно свойств БД на закладку Design. Секция Multilingual Options содержит
следующие элементы интерфейса:
•
флаг Multilingual database (БД с многоязыковой поддержкой) определяет, обладает ли текущая
БД многоязыковой поддержкой. Остальные поля отвечают за язык и сортировку по умолчанию, т.е. для
тех случаев, когда настройки рабочей станции не соответствуют указанным языкам у конкретных
элементов дизайна. Это следующие поля:
• выпадающий список Default language (язык по умолчанию);
• выпадающий список Default region (регион для выбранного языка по умолчанию);
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
19
• выпадающий список Default sort order (порядок сортировки языка по умолчанию);
• флаг Unicode standard sorting (стандартная Unicode-сортировка).
2.3.5
Launch tab - закладка «действия при запуске»
Закладка Launch tab (действия при запуске)
окна свойств БД имеет следующий вид:
Рис. 2.14 Закладка Launch tab окна свойств БД
Интерфейс данной закладки контекстно зависим от значения полей When opened in the Notes client
(когда БД открывается в Notes клиенте) и When opened in a browser (когда БД открывается в браузере).
Рассмотрим подробнее поведение данной закладки.
Поле When opened in the Notes client определяет поведение БД при открытии ее в интерфейсе
клиента Notes и имеет следующие возможные значения: Restore as last viewed by user (восстанавливать
последний вид, открывавшийся пользователем), Open "About database" document (открывать документ
«О базе данных»), Open designated Frameset (открывать назначенный фреймсет), Open designated
Navigator (открывать назначенный навигатор), Open designated Navigator in its own window (открывать
назначенный навигатор на весь размер текущего окна), Launch first attachment in "About database"
(запускать на выполнение первый присоединенный файл из документа «О базе данных») и Launch first
doclink in "About database" (запускать на выполнение первую Notes-гиперссылку из документа «О базе
данных»).
При выборе Restore as last viewed by user БД будет открываться по виду или папке, которые
открывались последний раз предыдущим пользователем (не обязательно текущим) этой БД. При выборе
данной опции (и ряде других), а так же при наличии непустого документа «О базе данных» (подробнее см.
раздел 17.1.2) появляются еще два флага:
•
Show "About database" document if modified (показывать документ «О базе данных» в случае его
изменения);
•
Show "About database" document when database is opened for first time (показывать документ
«О базе данных» при первом открытии БД данным пользователем).
Выбрав Open "About database" document, при открытии БД будет первоначально выводиться
документ «О базе данных», для Launch first attachment in "About database" - осуществляться запуск на
выполнение приложения из первого присоединенного файла в документе «О базе данных», а для Launch
first doclink in "About database" - запуск первой Notes-гиперссылки из того же документа.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
20
Выбор Open designated Frameset вызовет при открытии БД фреймсет, который задается в
следующем поле Name (имя). Это поле содержит информацию обо всех доступных в данной БД
фреймсетах, имеющихся на текущий момент.
Опции Open designated Navigator in its own window и Open designated Navigator позволяют при
открытии БД выводить определенный навигатор как в размерах на весь экран по ширине (первый случай),
так и с шириной, указанной разработчиком. Здесь под навигатором понимается не только элемент дизайна
типа навигатор (Navigator), но страницы (Page) и стандартный навигатор Notes, отображающий иерархию
видов и папок (Folders). При выборе этих двух опций у Launch tab появляется новое поле Type of
Navigator (тип навигатора). Его допустимые значения:
•
Folders (папки). Открывает стандартный навигатор Notes, отображающий иерархию видов и папок
(доступен только для Open designated Navigator);
•
Standard Navigator (собственно навигатор, как элемент дизайна);
•
Page (элемент дизайна страница).
Для последних двух значений появляется еще поле Name (имя), в котором собственно и нужно
выбрать имя соответствующего навигатора или страницы.
При определенных значениях поля When opened in the Notes client (например, Open designated
Navigator) на закладке Launch tab появляется флаг Restore as last viewed by user (восстанавливать
последний вид, использовавшийся пользователем) и кнопка Preview Pane Default (положение панели
предварительного просмотра по умолчанию). Смысловая нагрузка флага Restore as last viewed by user
недокументирована и, по личному опыту автора, не влияет на поведение приложения (даже при выборе
открытия навигатора).
По нажатию на кнопку Preview Pane Default выдается модальное окно:
Рис. 2.15 Окно определения положения панели предварительного просмотра документов
Кнопки
Bottom Right (в правом нижнем углу),
Bottom (в нижней части экрана)
Right (в правой части экрана) определяют, где будет находиться панель предварительного
просмотра документов. Данная панель позволяет при навигации по виду или папке осуществлять
просмотр содержимого документа без перехода в режим чтения или редактирования. На кнопках
положение панели предварительного просмотра, относительно экрана, для большей наглядности еще и
подкрашено голубым цветом. Вид экрана при выборе Right отображен на Рис. 2.16. Кроме трех кнопок в
модальном окне присутствует флаг Maximize document preview on database open (увеличить до
максимума панель предварительного просмотра документов при открытии БД). Автор нашел только одно
упоминание в документации на счет этого поля, что данная опция недоступна для установки из
интерфейса клиента Notes.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
21
Рис. 2.16 Положение Right для панели предварительного просмотра документов
Возвращаемся опять к закладке Launch tab. Поле When opened in a browser определяет поведение
БД при открытии ее в браузере, и имеет следующие возможные значения: Use Notes launch options
(использовать при открытии БД параметры, определенные для открытия БД в интерфейсе клиента Notes)
или, другими словами, использовать опции, определенные в поле When opened in the Notes client. Далее
следуют опции Open "About database" document (открывать документ «О базе данных»), Open
designated Frameset (открывать назначенный фреймсет), Open designated Page (открывать назначенную
страницу), Open designated Navigator in its own window (открывать назначенный навигатор на весь
размер текущего окна), Launch first doclink in "About database" (запускать на выполнение первую Notesгиперссылку из документа «О базе данных»), Launch designated doclink (запускать на выполнение
назначенную Notes-гиперссылку), Launch first document in view (открывать первый документ в
определенном виде или папке).
Опции Open "About database" document и Launch first doclink in "About database" имеют тот же
смысл, что и у рассмотренного поля When opened in the Notes client.
Опция Open designated Navigator in its own window отличается от одноименной опции,
рассмотренной в When opened in the Notes client, только тем, что в появляющемся поле Navigator
выбирать можно только элемент дизайна навигатор (но не страницу).
Для выбора открытия именно страницы (Page) в Web-приложениях предназначена опция Open
designated Page. Название страницы при этом задается в поле Page (страница).
Опция Launch designated doclink дает возможность с помощью кнопки Paste Doclink (вставить из
буфера обмена Notes-гиперссылку) определить Notes-гиперссылку, которая будет открываться первой в
браузере при открытии БД. Саму ссылку предварительно необходимо скопировать в буфер обмена.
Например, через пункты меню Edit -> Copy As Link -> Anchor Link, Edit -> Copy As Link -> Document
Link, Edit -> Copy As Link -> View Link или Edit -> Copy As Link -> Database Link. Данные пункты меню
реализуют копирование в буфер обмена Notes-гиперссылок соответственно на закладку типа якорь на
документе, на сам документ, на вид или папку и на базу данных. Проверить, куда ведет ссылка можно по
кнопке Go То DocLink (перейти по Notes-гиперссылке). Кнопка становится доступной после реального
определения Notes-гиперссылки. Замечание: нельзя вставлять гиперссылку на текущую БД, по смыслу это
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
22
«зацикливание», и браузер обычно возвращает ошибку. Однако можно строить цепочки, например, в
первой БД определить ссылку на вторую БД и т.д. В этом случае откроется последняя БД в этой цепочке.
Опция Launch first document in view позволяет, в появляющемся при данном выборе поле View
(вид), выбрать имя вида или папки. В этом случае при открытии БД в интерфейсе браузера первым будет
открываться первый документ из указанной папки или вида.
Рассмотрим подробнее процесс открытия БД в браузере при выборе в поле When opened in а
browser значения Use Notes launch options, в зависимости от значения поля When opened in the Notes
client.
При значении Restore as last viewed by user браузер при открытии БД генерирует страницу с
иконкой БД, ее именем и стандартным навигатором Folders. Такая же страница выводится при выборе
Launch first attachment in "About database" и Open designated Navigator со значением Folders. Других
отличий от уже рассмотренного в When opened in a browser нет, за исключением того, что навигаторы
все открываются на всё окно браузера.
Флаги Show "About database" document if modified и Show "About database" document when
database is opened for first time при открытии БД в браузере игнорируются.
2.3.6
Full Text tab - закладка с параметрами полнотекстового индекса
Закладка Full Text tab (параметры полнотекстового индекса)
следующий вид:
окна свойств БД имеет
Рис. 2.17 Закладка Full Text tab окна свойств БД
В верхней строчке окна присутствует либо строка Database in not full text indexed (БД не имеет
полнотекстового индекса), либо - Last index time: dd.mm.yyyy hh:mm:ss (дата и время последнего
обновления полнотекстового индекса) и Size: ххх (размер индекса).
Полнотекстовый индекс предназначен для осуществления быстрого поиска информации из
документов в рамках БД. Для пользователей, имеющих доступ Дизайнера или выше к текущей БД,
разрешены все операции с полнотекстовым индексом. Можно создавать индекс по кнопке Create Index
(создать индекс), удалить его - Delete Index (удалить индекс), обновить индекс при изменении
информации в БД - Update Index (обновить индекс), посмотреть число непроиндексированных документов
- Count unindexed documents (число непроиндексированных документов), а так же для БД,
расположенных на сервере, изменить частоту обновления индекса в поле Update frequency (server only)
(изменить частоту обновления индекса для серверных БД). В нижней части окна выводятся параметры
полнотекстового индекса.
При создании полнотекстового индекса через кнопку Create Index появляется модальное окно:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
23
Рис. 2.18 Окно создания полнотекстового индекса
Окно имеет следующие элементы интерфейса:
•
флаг Index attach files (индексировать присоединенные файлы). При выборе этой опции
становятся доступными две радиокнопки: Without using conversion filters (indexing is often faster)
(не использовать преобразующие фильтры - индексирование обычно осуществляется быстрее) и
Using conversion filters on supported files (searching is often more accurate) (использовать
преобразующие фильтры для поддерживаемых файлов - поиск обычно идет более точно). Например,
если вы хотите найти русский текст, размещенный в ячейке Excel-таблицы, которая хранится в
документе БД Domino как присоединенный файл, то в этом случае необходимо выбрать радиокнопку
Using conversion filters on supported files (searching is often more accurate);
•
флаг Index encrypted fields (индексировать зашифрованные поля). Включение данной опции
может влиять на систему безопасности принятую в Вашей организации. Например, пользователь,
который не имеет ключа шифрования, отправив соответствующий запрос по индексу, может увидеть
документы (но не прочитать содержимое зашифрованных полей), содержащие в зашифрованных
полях искомую информацию. Более подробно поля с шифрованием будут рассмотрены в разделе
4.3.1;
•
флаг Index sentence and paragraph breaks (word breaks are always indexed) (индексировать
разделители предложений и параграфов в дополнении к разделителям слов). Данная опция позволяет
сохранять информацию в индексе о расположении слов в предложениях и параграфах. Это нужно для
поиска «близкого» расположения слов друг к другу или поиска фраз в предложениях и параграфах.
Для поиска в предложениях используется ключевое слово SENTENCE, а для поиска в параграфах или
абзацах - PARAGRAPH. Как побочный эффект - общий размер индекса увеличивается;
•
флаг Enable case-sensitive searches (when searching, use the EXACTCASE keyword) (поиск
чувствительный к регистру, когда осуществляется поиск - используйте ключевое слово EXACTCASE
(точный регистр)). Установка данного параметра позволяет осуществлять поиск с точным совпадением
регистра, т.е. на запрос EXACTCASE Лондон найдутся документы, содержащие слово Лондон, но
соответственно не найдутся документы, содержащие слово лондон, или лоНдон. Данная опция так же
увеличивает общий размер индекса;
• поле-список Update frequency (servers only) (изменить частоту обновления индекса для
серверных БД). Данное поле для БД, расположенных на сервере, позволяет настроить частоту
обновления полнотекстового индекса. У поля имеются следующие возможные варианты значения:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
24
• Daily (ежедневно). Обновление индекса производится один раз в день серверной задачей
Updall обычно в два часа ночи;
• Scheduled (по расписанию). Обновление индекса производится в соответствии с
документами Program из адресной книги, которые содержат вызов серверной задачей Updall;
• Hourly (ежечасно). В соответствии с расписанием серверной задачи Chronos;
• Immediate (немедленно). Как сказано в документации, выполняется по закрытию
пользователем базы данных сразу, насколько это возможно. Поэтому, если Вы хотите быть точно
уверены, что нашли все, что искали - используйте либо кнопку Update Index, либо обновляйте
индекс программными средствами Чтобы проверить, нужно ли обновлять индекс, можно
воспользоваться кнопкой Count unindexed documents, которая вернет либо число
непроиндексированных документов (например, 8 unindexed documents), либо все документы
проиндексированы (All are indexed).
2.3.7
Закладка
Advanced tab - закладка с дополнительными свойствами БД
Advanced tab (дополнительные свойства БД) окна свойств БД следующий вид:
Рис. 2.19 Закладка Advanced tab окна свойств БД
Первая секция Unread Mark Options (параметры отметок о непрочтении) отвечает за специальные
пометки для непрочтенных документов в рамках текущей БД. Такие пометки могут храниться и
отображаться в видах/папках для каждого уполномоченного пользователя. Секция содержит следующие
элементы интерфейса:
•
флаг Don't maintain unread marks (не поддерживать отметки о непрочтении документов). Смысл
понятен из названия. Для БД, которым такие отметки не нужны (например, БД Help), позволяют,
уменьшить их размер. Установки или снятия флага недостаточно для принятия БД указанных,
изменений. Необходимо еще выполнить задачу COMPACT. Так же данное свойство можно установить
задачей COMPACT с ключом -U и «снять» COMPACT -u;
•
радиокнопки Replicate unread marks (репликация отметок о непрочтении) с возможными
значениями:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
25
• Never (никогда) - т.е. вообще не реплицировать отметки о непрочтении;
• Clustered servers only (только для серверов находящихся в кластере). Выбор этой опции
разрешает распространять отметки о непрочтении только в рамках внутрикластерной репликации;
• All servers (все сервера) - отметки о непрочтении распространяются при любой
репликации, включая сервер <-> клиент.
Секция
интерфейса:
Advanced
Options
(дополнительные
параметры)
содержит
следующие
элементы
•
флаг Optimize document table map (оптимизация таблицы размещения документов). Данное
свойство имеет отношение к оптимизации индексов видов. Причем не всех видов, а только тех,
которые содержат документы, созданные по одной форме. Или, говоря другими словами, формула
отбора таких видов должна содержать фразу Form = "имя_формы". Как сказано в документации,
данное свойство очень эффективно при обновлении индекса видов, которые содержат мало
документов в БД с большим общим числом документов (например, вид Connection (подключения) в
адресной книге сервера). После установки/снятия флага в окне свойств БД необходимо еще
выполнить задачу COMPACT. Так же данное свойство можно установить задачей COMPACT с ключом
-F и «снять» COMPACT -f;
•
флаг Don't overwrite free space (не перезаписывать свободное пространство в БД). Свойство
имеет отношение к механизму удаления записей. По умолчанию Domino после удаления конкретного
документа из БД оставляет от него «окурок», для механизма репликаций, а область данных
замещается шаблонным пустым документом. Этим, как сказано в документации, предотвращается
возможность неавторизованным пользователям с помощью специального ПО прочитать удаленные
данные. При записи новых данных Domino в первую очередь будет пытаться разместить новые
данные в свободное пространство БД, оставшееся после удаления документов. Как видно из
описания, при стандартном удалении возрастает нагрузка на устройства ввода/вывода, из-за операций
перезаписи области данных документа шаблонным пустым документом. Если это критично, или в
случае, когда БД имеет свой механизм перераспределения неиспользуемого дискового пространства
(как, например, у почтовой БД сервера), то для таких БД можно поднять флаг Don't overwrite free
space;
•
флаг Maintain LastAccessed property (поддерживать свойство времени последнего доступа к
документам). В текущей реплике БД по умолчанию поддерживается свойство протоколирования
времени последнего доступа к документу на запись. Если так же требуется протоколировать и время
последнего доступа к документу на чтение, то необходимо поднять настоящий флаг. Это опция (при ее
включении) может снизить производительность приложения из-за увеличения дисковых операций;
•
флаг Disable transaction logging (отключить механизм протоколирования транзакций). В Domino,
начиная с версии R 5, появился механизм транзакций. Для разработчиков SQL БД он хорошо знаком и
позволяет выполнять операции «отката» (rollback) для действий, закончившихся неуспехом, и
фиксации транзакции (commit), соответственно для успешных операций. Так как БД Lotus/Domino не
являются реляционными БД, то и механизм транзакций отличается от общепринятого в SQL БД. В
частности, разработчик не имеет возможности напрямую выдать команды rollback и commit. За всем
этим следит сервер. Вернемся к опции Disable transaction logging. Как видно из названия, этот флаг
запрещает или разрешает механизм протоколирования транзакций для текущей БД. Следует так же
помнить, что для нормальной работы данной опции на сервере должен быть настроен механизм
транзакций. После установки/снятия флага в окне свойств БД необходимо для принятия БД значения
указанного свойства выполнить еще ряд действий:
•
выполнить задачу COMPACT, с ключом -Т при установке свойства и -t при «снятии»;
•
выйти всем пользователям из БД;
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
26
•
выдать с консоли сервера команду Dbcache flush, которая закрывает все БД, в настоящий
момент времени открытые в кеше сервера;
•
флаг Don't support specialized response hierarchy (не поддерживать иерархию для ответных
документов). Для каждого документа в БД Notes хранятся внутренние таблицы, связанных с ним
ответных документов. Данный механизм может снижать производительность приложения. Для
отключения этого механизма и используется рассматриваемый флаг. Как сказано в документации,
таблицы ответных документов используют в своей работе только функции @AIIChildren и
@AIIDescendants, поэтому, если поднят флаг Don't support specialized response hierarchy, то эти
функции работать не будут. Из опыта можно сказать, что данная опция также влияет на свойство
Responses класса NotesDocument для LotusScript, и свойство Responses класса Document для Java.
При поднятом флаге Don't support specialized response hierarchy коллекции документов, собранные
по свойству Responses, будут пустыми, даже при наличии ответных документов для исходного. Другие
механизмы, работающие с иерархией документов (например, свойство видов/папок - показывать
документы в иерархическом порядке и т. д.), флагом Don't support specialized response hierarchy не
затрагиваются. После установки/снятия флага в окне свойств БД необходимо еще выполнить задачу
COMPACT. Так же данное свойство можно установить задачей COMPACT с ключом -Н и «снять»
COMPACT - h ;
•
флаг Use LZ1 compression for attachments (использовать алгоритм LZ1 «сжатия»
присоединенных файлов). До версии R 6 для «сжатия» для присоединенных файлов использовался
алгоритм Хафмана (Huffman), поднятие флага позволяет использовать более эффективный алгоритм
сжатия LZ1. Обратите внимание, что данный флаг может использоваться только в LN/Domino с версии
R6;
•
флаг Don't allow headline monitoring (не поддерживать возможность мониторинга заголовков).
Данная опция связана с механизмом рассылок (subscription). Этот механизм позволяет пользователям
формировать свои листы рассылок, связанные с появлением новой или измененной информации в
определенных БД Notes. Если разработчик не желает, чтобы текущая БД участвовала в механизме
рассылок, то нужно поднять флаг Don't allow headline monitoring;
•
флаг Allow more fields in database (разрешить использовать в БД большее число полей). В
Notes/Domino R 4 и R 5 на общее число полей в БД существует ограничение - длина строки,
полученная конкатенацией всех имен полей БД, не должна была превышать 64 Кбайта, это порядка
3000 полей. При поднятии флага Allow more fields in database можно использовать до 23 000 полей в
одной БД;
•
флаг Allow soft deletions (разрешить использование «мягких» отметок об удалении в БД). Данное
свойство позволяет при удалении документов не сразу стирать на диске информацию о них, а
сохранять документы в течение определенного времени. Разработчики могут предусмотреть в дизайне
возможность восстановления таких документов в нормальное состояние (т.е. в состояние до «мягкого»
удаления документа). Для оперирования с «мягкими» отметками об удалении предназначены
специальные программные команды или операторы (например, @-команда @UndeleteDocument, или
свойство IsDeleted класса NotesDocument);
•
поле Soft delete expire time in hours (предельное число часов хранения документов с «мягкой»
отметкой об удалении). Для ограничения времени хранения «мягко» удаленных документов
используется это поле. По прошествии указанного времени после такого удаления, документ
считается ненужным и физически удаляется с диска. Поле не имеет смысла при опущенном флаге
Allow soft deletions;
•
поле Limit entries in $UpdatedBy fields (предельное число значений для поля $UpdatedBy).
Предопределенное поле $UpdatedBy обычно присутствует в каждом документе и предназначено для
сбора имен пользователей и серверов, которые модифицировали данный документ. Установка в поле
Limit entries in $UpdatedBy fields определенного числового значения (отличного от 0) заставляет
Notes/Domino при очередном редактировании документа проверять число уже имеющихся в поле
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
27
$UpdatedBy значений, сравнивать его со значением в поле Limit entries in $UpdatedBy fields и, в
случае превышения последнего, удалять самую старую запись в поле $UpdatedBy, добавляя при этом
значение нового редактора документа;
• поле Limit entries in $Revisions fields (предельное число значений для поля $Revisions).
Предопределенное поле $Revisions присутствует в каждом документе, и предназначено для сбора
значений даты-времени модификаций текущего документа. Установка в поле Limit entries in
$Revisions fields определенного числового значения (отличного от 0) заставляет Notes/Domino при
очередном редактировании документа проверять число уже имеющихся в поле $Revisions значений,
сравнивать его со значением в поле Limit entries in $Revisions fields и, в случае превышения
последнего, удалять самую старую запись в поле $Revisions , добавляя при этом значение датывремени последнего редактирования документа. Обратите ВНИМАНИЕ, что поле $Revisions
используется в механизме репликаций, поэтому установка в поле Limit entries in $Revisions fields
малых значений (в документации приводится число 10) может привести к репликационным
конфликтам.
2.4 Создание БД шаблона
БД шаблонов предназначены для хранения и распространения элементов дизайна (формы, папки,
виды и т.д.) на другие БД. Шаблоны могут быть полными (т.е., другая БД, которая наследует дизайн с
этого шаблона, содержит все элементы дизайна, что и шаблон) или частичными (в этом случае отдельные
элементы дизайна БД наследуются из одного шаблона, другие из другого, или вообще могут не
наследоваться).
Один из способов создания шаблона БД, при наличии уже готовой БД с функциональным
наполнением, это использовать механизм копирования БД, описанный в разделе 2.2. В появившемся окне
в поле File Name (имя файла базы данных) указать у файла расширение NTF (например, MY_TEMP.NTF)
и выбрать радиокнопку Database design only (только дизайн), затем нажать кнопку Ок. После того как
копия БД будет создана, необходимо в окне ее свойств на закладке «Дизайн» (см. параграф 2.3.4)
установить флаг Database is template (БД является шаблоном), заполнить поле Template name (имя БД
шаблона) и, при желании, флаг List as advanced template in 'New Database' dialog (вносить шаблон в
список дополнительных шаблонов в диалоговом окне создания новой БД). После принятия этих свойств
БД становится шаблоном.
Теперь можно настраивать механизм наследования с шаблона. Для этого у БД, которая будет
принимать наследование дизайна с шаблона, необходимо в окне свойств БД, опять же на закладке
«Дизайн» (см. параграф 2.3.4), установить флаг Inherit design from template (наследовать дизайн с БД
шаблона) и внести значение в поле Template name (имя БД шаблона), соответствующее одноименному
полю с той же закладки свойств у БД шаблона. Механизм полного наследование дизайна настроен.
Частичное наследование дизайна более подробно будет рассмотрено в разделе 3.1.
Само наследование для серверных БД, обычно выполняется автоматически серверной задачей
DESIGN. Для локальных БД обновление может быть только вручную, например, с помощью меню File ->
Database -> Refresh Design (обновить дизайн) или File -> Database -> Replace Design (заменить дизайн).
2.5 Открытие существующей БД
Открытие существующей БД можно осуществить через пункты главного меню File -> Database ->
Open. При этом появляется диалоговое окно:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
28
Рис. 2.20 Диалоговое окно открытия существующей БД
В поле Server (сервер) в выпадающем списке нужно выбрать (или ввести новый) сервер. В полесписке Database (БД) можно выбрать имя (Title) БД (при открытии в интерфейсе Domino Designer в этом
поле видны еще и БД шаблонов). БД, у которых не поднят флаг Show in 'Open Database' dialog
(показывать имя БД в диалоговом окне открытие существующей БД см. раздел 2.3.4), в поле Database не
отображаются. Однако, если пользователь знает имя файла БД и путь к нему, то их можно явно ввести в
поле Filename (имя файла) и, соответственно, открыть по кнопке Open. Кнопка About выводит документ
About This Database (Об этой базе данных), если у выбранной БД таковой имеется. Кнопка Browse
(просмотреть) позволяет для локальных БД выбрать, где в структуре каталогов локальной станции
находится открываемая БД. Кнопка Bookmark (закладки) позволяет без открытия БД определить папку с
закладками, куда будет помещена иконка БД. При этом выводится следующее модальное окно:
Рис. 2.21 Окно определения месторасположения закладки для БД
В этом окне можно выбрать в поле типа список Add to (куда добавить) папку или панель закладок,
куда будет помещена иконка открываемой БД. Кнопка New Folder (новая папка) позволяет создать новую
папку в структуре папок для закладок.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
29
3 Интерфейс Domino Designer
В предыдущей главе мы научились создавать и открывать существующие БД, а также изменять
свойства БД. Теперь для создания внутренних элементов дизайна (формы, виды, папки и т.д.) рассмотрим
основное средство разработчика - Domino Designer. В загруженном состоянии окно Domino Designer
выглядит следующим образом:
Рис. 3.1 Окно Domino Designer
В левой части экрана присутствует дизайн панель. Она содержит иконки БД и папки с однотипными
элементами дизайна, которые могут присутствовать у БД. Если необходимая БД в дизайн панели не
присутствует, то ее можно добавить либо открыв ее (см. раздел 2.5), либо из интерфейса Notes клиента
через пункты меню View -> Design. Под иконкой БД расположены папки, содержащие допустимые для
данной версии Lotus/Domino элементы дизайна БД. При клике по любому из заголовков папок (например,
Views - виды) в правой части экрана, называемой рабочей панелью, открывается список имеющихся у БД
данных элементов дизайна с их общими свойствами. Кроме этого, можно «быстро» открыть нужный
элемент дизайна прямо из дизайн-панели. Для этого нужно раскрыть в дизайн-панели папку с
однотипными элементами дизайна, кликнув по символу «+», напротив имени папки, и затем, выбрав в
списке нужный элемент дизайна, кликнуть по нему.
Находясь в рабочей панели можно либо создать новый элемент дизайна заданного типа (по кнопкеакции New element, расположенной вверху панели (например, New Form (новая форма)), либо выбрать
определенный элемент дизайна и открыть его на редактирование двойным кликом мыши. При этом, в
рабочей панели загрузится элемент дизайна, и панель будет выглядеть следующим образом:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
30
Рис. 3.2 Окно Domino Designer с загруженным на редактирование элементом дизайна
В верхней части рабочей панели будет отображаться панель тела элемента дизайна со своими
внутренними элементами. Нижняя часть панели делится на две части. Правая из них представляет панель
с двумя закладками: Objects (объекты) и Reference (справочник). При выборе закладки Objects в этой
панели отображается иерархическая объектно-событийная модель загруженного элемента дизайна. В
правой нижней части экрана присутствует панель программного кода, вверху которой обычно расположено
поле Run (выполнить). Если это предусмотрено для данного объекта, то в нем можно выбрать язык
программирования для данного события или свойства (например, LotusScript или Formula) и клиент, в
котором это событие будет обрабатываться (Client или Web). При этом, в саму панель кода можно ввести
исполняемый код. Закладка Reference, которая контекстно зависима от объекта и события, позволяет
выбрать и вставить в панель программного кода допустимые функции, методы и поля БД. Кроме этого,
для некоторых элементов дизайна (формы, папки, виды и т.д.) справа от панели тела элемента дизайна
может располагаться панель акций.
Каждый внутренний элемент в панели тела элемента дизайна обладает своими свойствами. Вызвать
окно свойств для конкретного элемента можно, выбрав его кликом мыши, а затем через пункты меню Edit > Properties. Эти свойства для каждого из таких внутренних элементов мы рассмотрим позднее в
разделах, посвященных конкретным элементам.
Кроме этого сами элементы дизайна, из папок в дизайн панели, так же содержат обобщенные
свойства, которые могут быть доступны для изменения. Рассмотрим подробнее эти свойства.
3.1 Свойства элементов дизайна верхнего уровня
Для получения доступа к этим свойствам необходимо в дизайн панели выбрать нужную папку, затем
в рабочей панели встать на конкретный элемент дизайна и воспользоваться пунктами меню Design ->
Design Properties. При этом, появится окно свойств элемента дизайна обычно с четырьмя закладками
следующего вида:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
31
Рис. 3.3 Окно свойств элементов дизайна верхнего уровня
Окно содержит закладки
Info (информационная закладка),
(дизайн)
Document IDs (идентификатор документа дизайна).
Fields (поля),
Для нас наибольший интерес представляет закладка Design, т.к.
редактируемых элементов интерфейса.
Design
на остальных трех нет
Страница Design контекстно зависима от элемента дизайна верхнего уровня (т.е. форма, папка, и
т.д.). Для большинства элементов дизайна она выглядит следующим образом:
Рис. 3.4 Закладка Design окна свойств элемента дизайна
У большинства элементов дизайна верхнего уровня на странице Design в секции Design Source
(источник дизайна) присутствуют три поля, имеющие отношение к наследованию дизайна:
• Inherit from the design template (наследовать дизайн из шаблона). В это поле может быть внесено
имя шаблона БД (см. разделы 2.3.4 и 2.4). В этом случае элемент дизайна будет наследовать
изменения дизайна с указанной БД шаблона. Наследование конкретного элемента дизайна через поле
Inherit from the design template имеет более высокий приоритет, чем наследование всей БД с
закладки Design окна свойств БД. Это поле может быть заполнено и полуавтоматическим способом. В
случае копирования и вставки целиком элемента дизайна через буфер обмена (это может быть
выполнено, стоя на конкретном элементе дизайна, например, через пункты меню Edit -> Сору и Edit ->
Paste). Если при этой процедуре копируемый элемент дизайна уже наследовал свой дизайн, то перед
вставкой Domino Designer выдаст предупреждающее окно и предложит либо установить
наследование для вставляемого элемента по кнопке Ok, либо не наследовать последующие
изменения дизайна - No, либо вообще отказаться от копирования - Cancel.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
32
Рис. 3.5 Окно, возникающее перед вставкой из буфера обмена элемента дизайна, ранее имеющего
наследования дизайна
•
флаг Prohibit design refresh or replace to modify (запрещать изменения в данном элементе
дизайна при обновлении или замещении дизайна). Смысл поля понятен из названия. При поднятом
флаге изменения дизайна при его обновлении или замещении не происходит, даже в случае задания
предыдущего поля Inherit from the design template. При вставке через буфер обмена элемента
дизайна без наследования, Domino Designer автоматически поднимает данный флаг.
•
флаг Propagate this prohibition of design change (распространять данное запрещение на
изменение дизайна). Поднятый флаг позволяет при обновлении или замещении дизайна наследовать
из шаблона значение предыдущего поля Prohibit design refresh or replace to modify.
У ряда элементов дизайна (например, из Shared Action) за наследования дизайна отвечает поле Do
not allow design refresh/replace to modify (не разрешать обновление/замещение дизайна). Смысл поля
понятен из названия. При поднятом флаге изменения дизайна при его обновлении или замещении не
происходит.
Кроме наследования у большинства элементов дизайна имеются три поля типа флаг Hide design
element from: Web browsers (скрывать элемент дизайна в браузерах), Notes R4.6 or later (скрывать
элемент дизайна в клиенте Notes версии R4.6 и старше) и Mobile clients (мобильные клиенты).
Использование данных полей позволят строить приложения, предназначенные для различных
интерфейсов (Web, мобильных и Notes клиентов). Разработчик имеет возможность создавать
одноименные (с точки зрения алиасов или синонимов) элементы дизайна, одни из которых «видны» в
клиенте Notes, а другие в браузере. Например, можно создать форму с именем TourLN и алиасом Tour и
поднятым флагом Web browsers для клиента Notes и форму с именем TourHTML алиасом Tour и
поднятым флагом Notes R4.6 or later для браузеров. В этом случае при открытии документа по алиасу в
среде Notes данные будут выведены по форме TourLN, а в браузере соответственно по форме TourHTML.
Значение данных флагов отображается в рабочей панели Domino Designer.
У ряда элементов дизайна (формы, виды/папки, агенты) на закладке Design присутствует поле Do
not show this design element in menus on Notes R4 or later clients (не показывать данный элемент
дизайна в меню Notes версии R4 и старше). Поднятие данного флага запрещает добавление имени
данного элемента в меню клиента Notes. Данное свойство позволяет скрывать в БД элементы дизайна,
предназначенные для работы в более ранних версиях, чем клиент Notes R4 (например, R3).
Обратите внимание, что поднятый флаг Hide design element from: Web browsers влияет на
«видимость» элемента дизайна как для пользователей, так и для серверов. Для скрытых, с помощью этого
свойства, элементов дизайна невозможно сформировать URL для вида или формы. Если элемент дизайна
используется во внутренних процессах приложения (например, вид нужен для формирования списка
значений с помощью функции @DbLookup), то для скрытия его от пользователей нужно заключить его имя
в круглые скобки.
Если у БД установлено свойство Multilingual database (БД с многоязыковой поддержкой см. раздел
2.3.4), то у большинства элементов дизайна на закладке Design присутствует секция, отвечающая за
многоязыковую поддержку. Эта секция содержит поля Language (язык), Region (регион) и, для некоторых
элементов дизайна, поле Text Sort Order (порядок сортировки) и флаг Unicode standard sorting
(стандартная Unicode-сортировка). Данные поля определяют конкретные значения языка, региона и
порядка сортировки для текущего элемента дизайна.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
33
В Domino Designer, начиная с версии R 6, можно у нескольких однотипных элементов дизайна одной
операцией изменить ряд свойств с закладки Design. Для этого нужно выделить их (клик в рабочей панели
с нажатой клавишей Ctrl или Shift) и затем вызвать окно свойств (например, через меню Design -> Design
Properties). Появляющееся окно будет выглядеть следующим образом:
Рис. 3.6 Окно свойств нескольких элементов дизайна
Изменение значений полей в этом окне будет распространяться на все ранее выбранные элементы
дизайна. Аналогично в Domino Designer можно одновременно менять некоторые свойства у ряда
элементов дизайна более низкого уровня (акции, слой и т.д.) при их одновременном выборе.
3.2 Специальные возможности Domino Designer
В Domino Designer, начиная с версии R 6, появились новые возможности, которые могут существенно
облегчить жизнь разработчикам. Некоторые из них (например, преобразование внутренних элементов
дизайна формы к HTML-коду) будут рассмотрены в разделах, посвященных конкретным элементам
дизайна. Другие, имеющие отношение ко всем (или большинству) элементам дизайна, будут приведены в
настоящем параграфе.
3.2.1
Блокировка элементов дизайна и документов
В рамках Domino Designer релиза 6 и выше можно выполнить блокировку для элементов дизайна.
Этот механизм имеет смысл применять, если приложение разрабатывает группа программистов, и
конкретные проектировщики желают блокировать на определенное время некоторые элементы дизайна.
Для включения механизма блокировки элементов дизайна необходимо:
• в ACL БД установить главный блокирующий сервер (Master Lock server), который совпадает с
административным сервером (Administration server) подробнее см. раздел 18.5.4.;
• в окне свойств БД на закладке Design (см. раздел 2.3.4) поднять флаг Allow design locking;
• выбрать нужные элементы дизайна (можно несколько) в рабочей панели и затем воспользоваться
меню Design -> Lock Design Element.
Если первые два шага выполнены, то при открытии элемента дизайна на редактирование будет
выполняться его временная блокировка. После выхода из режима редактирования временная блокировка
снимается.
В папке элементов дизайна напротив блокированных элементов отображаются определенные
иконки, сигнализирующие о том, что данная запись в настоящий момент блокирована. Информация о
блокировке хранится в самой записи дизайна или документах пользователя в полях:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
34
•
$Writers - кто выполнил блокировку;
•
$WritersDate - дата/время осуществления блокировки.
При снятии блокировки данные поля удаляются из записи. Принудительное снятие блокировки
осуществляется для элементов дизайна через меню Design -> Unlock Design Element, а для документов
пользователей: либо через меню Action -> Unlock Document, либо программным путем (например, с
помощью @DocLock).
Заблокированный элемент дизайна и документ пользователя может редактировать только
пользователь, его заблокировавший. При попытке открытия на редактирование заблокированного
элемента дизайна, пользователем, отличным от выполнившего блокировку, выдается предупреждающее
сообщение (см. Рис. 3.7). Однако, после этого документ все же открывается. Сохранения изменений в
этом случае невозможны. Пользователь с уровнем доступа Менеджер может разблокировать такой
элемент дизайна, как обычно, через меню Design -> Unlock Design Element.
Рис. 3.7 Предупреждающее окно с информацией о блокировке элемента дизайна
Блокировка документов практически не отличается от элементов дизайна. Для включения
возможности блокировки документов пользователей нужно, помимо наличия главного блокирующего
сервера у БД (Master Lock server), еще поднять флаг Allow document locking (см. раздел 2.3.1) в окне
свойств БД. Перечислим отличия заблокированных документов по отношению к заблокированным
элементам дизайна:
• операция блокировки/разблокировки может осуществляться как через меню Action -> Lock
Document/Action -> Unlock Document, так и программным путем;
• открыть на редактирование заблокированные документы могут только пользователи, указанные в
поле $Writers. В противном случае выдается предупреждающее окно с текстом: «The document is
already locked by XXX» (этот документ уже заблокирован пользователем XXX), и после клика по ОК
документ открывается только в режиме чтения;
• заблокированные документы при отображении их в видах/папках по умолчанию не сопровождаются
специальными иконками, сигнализирующими о текущей блокировке. Однако, это можно сделать
самостоятельно на основании наличия поля $Writers.
В интерфейсе браузера блокировка документов пользователей несколько отличается от клиента
Notes. Документы, заблокированные другим пользователем, в Web открываются на редактирование,
однако сохранение изменений при передаче данных формы на сервер не происходит. Если у БД поднят
флаг Use JavaScript when generation pages (см. раздел 2.3.1), и сохранение документа осуществляется
через последовательность @-команд:
@Command([FileSave]);
@Command([FileCloseWindow])
то при попытке сохранения документа, форма будет просто закрыта без сообщения об ошибке. В
других случаях (например, использование кнопки с атрибутом TYPE = "SUBMIT", или через JavaScript с
кодом document.forms[0].submit();) будет выдано сообщение о 500 ошибке - «The document is already locked
by someone else.» (документ уже заблокирован кем-то еще).
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
35
3.2.2
Меню Tools
Пункт Tools главного меню Domino Designer представляет разработчикам ряд дополнительных
возможностей. Рассмотрим две из них.
Рис. 3.8 Пункт меню Tools
Первая возможность позволяет осуществить перекомпиляцию всего LotusScript кода в текущей БД,
вторая - добавить запуск из меню Tools внешних приложений.
Изначально LotusScript код компилируется в момент его сохранения, при этом возвращаются любые
обнаруженные ошибки. Во время выполнения код интерпретируется. Для предотвращения конфликтов и
ошибок во время выполнения, которые не обнаружены на этапе компиляции, и предназначена опция
Recompile All LotusScript. Например, если разработчик что-то изменяет в библиотеке скриптов, то дерево
кода и объектов на этот момент уже построено. В этом случае опция Recompile All LotusScript проверяет
все объекты в дереве и осуществляет повторный проход кода для проверки всех объявлений переменных.
Действие Recompile All LotusScript обнаруживает такие проблемы совместимости и зависимости на шаге
компиляции, а не выполнения.
Данное действие необходимо в случае, когда разработчик делает такие изменения в БД, которые
могут затронуть другие элементы дизайна. Например, при изменении библиотеки скриптов, определение
классов, подформ и т.д.
При выполнении команды Recompile All LotusScript происходит перекомпиляции всего LotusScript
кода текущей БД. Успешно перекомпилированные объекты подписываются ID текущего пользователя.
Объекты с ошибками не подписываются ID текущего пользователя. Если ошибки обнаружены, то к
объекту, вызвавшему ошибку, можно сразу перейти из окна, появляющегося в момент вызова команды
Recompile All LotusScript.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
36
Рис. 3.9 Окно Compile all LotusScript
Следует правда отметить, что в Domino Designer R 7 команда Recompile All LotusScript не всегда
обнаруживает ошибки LotusScript кода, размещенного в акциях форм и видов.
Вторая возможность в рамках меню Tools, которую мы рассмотрим, состоит в добавлении в это
меню новых пунктов для запуска внешних приложений. Для этого необходимо воспользоваться меню
Tools -> Add Tool, которое вызывает появление окна:
Рис. 3.10 Окно Add Tool
В этом окне необходимо определить имя нового пункта (поле Tool Name), а также что (текстовое
поле секции Tool Action) и как (радиокнопки Run program и Run formula) должно вызываться при выборе
нового пункта меню. Для выбора конкретного приложения можно воспользоваться кнопкой
, которая
осуществит выбор файла из файловой системы рабочей станции. Радиокнопка Run formula позволяет
определить действие, выполняемое по вызову пункта, на основании языка @-формул. Например,
а := @Weekday(@Now);
@If(a>l
&
а<7;
@Command([Execute]
"Предупреждение"; "В выходные не работаю"))
'С: \\WINDOWS\\CALC.EXE")
@Prompt([Ok];
Секция Tool Context (контекст средства) позволяет выбрать в каких режимах работ Domino Designer
следует появляться новому пункту меню. Например, пункт, отвечающий за вызов внешнего редактора
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
37
таблиц каскадных стилей, может появляться только при отображении в рабочей панели Domino Designer
списка таблиц каскадных стилей. Для этого в списке секции Tool Context следует выбрать значение Style
Sheet Resource List. В этом списке можно выбирать несколько значений с помощью клавиш Ctrl и Shift.
Большинство значений списка составные, последнее слово которых либо Design (разработка), либо List
(список). Например, Form Design и Form List. Первое (Design) отвечает за режим, когда соответствующий
элемент дизайна находится в редактировании, второе - когда в рабочей панели Domino Designer
отображается список этих элементов дизайна.
После того, как новый пункт меню Tools создан, его можно удалить, изменить название, характер
действия и контекст через меню Tools -> Customize Tools, которое вызывает появление окна:
Рис. 3.11 Окно Customize Tools
Изменять контекст своих пунктов меню в этом окне можно с помощью операции drag&drop.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
38
4 Проектирование форм - form
Формы используются в БД Notes/Domino для ввода, чтения, редактирования и печати документов.
Сама форма может содержать множество внутренних элементов дизайна (например, поля, статичный
текст, таблицы, графические изображения и т.д.). В этой главе мы подробно рассмотрим каждый из этих
элементов, который имеет отношение к формам.
Создать новую форму можно через пункты меню Create -> Design -> Form. При этом в рабочую
панель Domino Designer загрузится пустой бланк формы. Для начала рассмотрим общие свойства формы.
4.1 Свойства формы
Вывести на экран окно свойств формы можно через меню Design -> Form Properties, которое
вызывает появление окна с семью закладками. Рассмотрим подробнее элементы интерфейса данного
окна.
4.1.1
Закладка
Form Info - общая информация о форме
Form Info (информация о форме) выглядит следующим образом:
Рис. 4.1 Закладка Form Info окна свойств формы
В первой секции присутствуют три поля:
•
Name (имя) - задает имя формы. В пределах одной БД все формы должны иметь уникальное имя.
Имя формы чувствительно к регистру и может состоять из буквенно-цифровых символов, пробелов и
знаков пунктуации. Кроме имени форме можно задать алиас или синоним. Это делается с помощью
символа вертикальной черты ("|"). У формы можно определить несколько алиасов, однако, только
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
39
самый правый из них «активно» воспринимается системой. Остальные алиасы допускается
использовать только для программных ссылок на форму (например, в команде @Command( [Compose]
; алиас ) ). При задании алиаса (при поднятом флаге Include in menu см. ниже) имя формы (самая
правая часть имени до символа "|") будет появляться в меню Create (создание) клиента Notes, а при
сохранении документа (если не используются дополнительные программные средства) у него
появится поле Form со значением, равным самому правому алиасу. Таким образом, если в поле Name
присутствует строка «Тестовая форма | Test | Proba | My_test» и поднят флаг Include in menu, то в
меню Create клиента Notes появится пункт «Тестовая форма», а после сохранения, у документа полю
Form будет присвоено значение «My_test». Notes позволяет создавать двухуровневые меню в пункте
Create. Для этого необходимо в имени отделять один уровень от другого символом обратного слеша
("\"). Например, если у нас есть две формы с именами «Туры\горящие | hottour», «Туры\регулярные
regtour», то меню Create будет выглядеть следующим образом:
Рис. 4.2 Вид иерархического меню в Notes клиенте
Для организации доступа к пунктам меню Create по горячей клавише необходимо предварить символ
горячей клавиши в имени формы символом подчеркивания ("_"). Например, если имя формы «Ви_за |
visa», то для открытия этой формы необходимо последовательно нажать две комбинации клавиш: сначала
Alt - С (для вызова пункта меню Create) и затем 3 (для открытия формы) Полная длина строки имени
формы (вместе с алиасами и иерархическими компонентами) не должна превышать 256 символов. В меню
Create отображаются только первые 64 байта имени. Следует помнить, что при использовании символов
русского языка в стандартной для Notes двухбайтовой кодировке, один символ русского алфавита будет
занимать 2 байта.
•
поле Comment (комментарии) используется для добавления комментариев к форме. Значение из
этого поля не влияет на поведение формы, а только отображается в одноименном столбце папки
Forms.
•
поле-список Туре (тип формы). Для выбора доступно одно из трех значений:
• Document (документ) - основной документ, т.е. тот, который не является ответом на
другие документы;
• Response (документ-ответ на основной документ);
• Response to Response (документ-ответ на ответ).
Различие в поведении форм с разным значением поля Туре обнаруживается при создании нового
документа, в случае, когда открыт или выбран в виде/папке другой документ. При этом, если Туре равен
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
40
Document, то создаваемый документ будет главным документом, независимо от того, каким является
текущий документ на момент создания. Для Туре = Response создаваемый документ станет ответом на
главный документ для текущего документа, а для Туре = Response to Response создаваемый документ
станет ответом на текущий документ.
Следующая секция Display (отображать) содержит поля:
•
флаг Include in menu (включать в меню) и, следующее за ним, поле-список с возможностью
выбора из двух значений: Create Menu (меню создать) и Create - Other dialog (меню создать дополнительно). Поднятие флага Include in menu позволяет включить имя формы в меню Create
клиента Notes. При этом, если значение следующего поля есть Create Menu, то имя формы попадает в
само меню Create, а при выборе Create - Other dialog в меню Create - Other. В меню Create может
быть размещено только до 9 форм на главном уровне, остальные формы, даже если для них указано
значение Create Menu, попадут в пункт Create - Other. Сортировка имен в меню Create
осуществляется в лексографическом порядке. Если имя формы заключено в круглые скобки
(например, «(Виза) | visa»), то такая форма не попадет в меню Create даже при поднятом флаге
Include in menu;
•
флаг Include in Search Builder (включать в построитель запросов). Данная опция позволяет
использовать форму для построения запросов поиска по полнотекстовому индексу;
•
флаг Include in Print (включить для формы специальный режим печати). Данный режим в
терминах Notes/Domino называется Contact print (режим печати контактной информации). Этот режим
применяется при печати из вида выбранных документов на одной странице. В этом случае можно
создать форму с рядом предопределенных полей, в которых будут задаваться параметры печати
(размер листа, секции и т.д.). Такую форму можно выбрать в меню печати на закладке Document Style
(стиль документа) в поле Label format (формат печати). На этой же закладке должна быть выбрана
радиокнопка Print multiple documents on each page (печатать несколько документов на каждой
странице). Соответственно на закладке Printer (принтер) должна быть выбрана радиокнопка Selected
documents (выбранные документы) или All documents in view (все документы в виде). Подробнее см.
документацию.
Рис. 4.3 Закладка Document Style окна Print View
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
41
Возвращаемся опять в окно свойств формы на закладку Form Info. Следующая секция Versions
(отслеживание версий документов). В Web-приложениях данную возможность рекомендуется не
использовать. Секция имеет два поля:
• поле-список Versioning (управление версиями документов) может принимать одно из следующих
значений:
• None (версии не поддерживаются). При редактировании и сохранении все изменения
происходят в текущем документе.
• New versions become responses (новые версии становятся ответными документами). При
таком выборе, после каждой редакции и сохранения, отредактированный документ становится
ответным к исходному. Таким образом, можно получить всю историю редактирования документа, а
также избежать конфликтов сохранения/репликаций.
• Prior versions become responses (предыдущие версии становятся ответными
документами). В этом случае, после модификации документа новый документ становится главным,
а предыдущие редакции ответами. Этот режим не гарантирует предотвращения конфликтов
сохранения/репликаций.
• New versions become siblings (новые версии создаются на том же уровне иерархии).
Новые редакции документа сохраняются на одном с исходным документом уровне иерархии, т.е.
если исходный документ был главным, то и новая версия будет главным документом, если
исходный документ был ответом, то и новая версия будет ответом на документ родитель для
исходного
документа.
Этот
режим
гарантирует
предотвращения
конфликтов
сохранения/репликаций.
При выборе в поле Versioning любого отличного от None значения, становится доступным
следующее поле Create versions (создание версии). Данное поле определяет механизм создания версий.
Поле предлагает на выбор одно из двух значений:
• Manual - File, New Version (версии создаются вручную по команде File -> Save As New
Version);
• Automatic - File, Save (автоматически по команде File -> Save).
Следующая секция Options (параметры) содержит ряд флагов:
• Default database form (форма по умолчанию для данной БД). Рекомендуется одной из форм в БД
установить это значение. В этом случае, при открытии документа, для которого Notes/Domino не нашел
«подходящей» формы для отображения, будет использоваться эта форма. Для определения формы,
по которой Notes/Domino будет отображать документ, используются следующие правила. Если у БД
установлено свойство Allow use stored forms in this database (разрешить использование форм,
сохраненных в текущей БД см. 2.3.1), то сначала в документе ищется предопределенное поле $Title (в
этом поле хранится имя сохраненной в самом документе формы). Если поле найдено, то документ
открывается по форме, сохраненной в документе. Следующий шаг - поле $Title не найдено, тогда
ищется формула формы (Form Formula, см. раздел 6.6.2) в текущем виде/папке. При ее наличии,
документ открывается по формуле формы. Далее, при неудаче, ищется поле Form (данное поле
создает Notes/Domino в момент сохранения документа, и заносит туда значение имени/алиаса
текущей формы). Если поле найдено, то документ открывается по форме с именем/алиасом из поля
Form (если такая форма присутствует в БД). Если все предыдущие шаги закончились неудачей, то
предпринимается попытка открытия документа по форме с установленной опцией Default database
form. Если все предыдущие шаги закончились неудачей, то выдается предупреждающее окно, и
документ не открывается;
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
42
•
Store form in document (сохранять форму в документе). При сохранении документа, создаваемого
по форме с установленной опцией Store form in document, в самом документе будет сохранен бланк
текущей формы. Обратите ВНИМАНИЕ, что для корректного отображения документов с сохраненными
формами, у текущей БД должно быть установлено свойство Allow use stored forms in this database
(разрешить использование форм, сохраненных в текущей БД см. 2.3.1). После сохранения формы в
документе он будет корректно отображаться даже в случае, когда данная форма будет удалена из БД.
Этим свойством часто пользуются для отправки документов по почте в БД, которые не содержат
определенных форм. При сохранении, у таких документов сгенерируется поле $Title, содержащее имя
текущей формы, а также ряд предопределенных проблемно-ориентированных полей ($lnfo, $Body и
т.д.). Для документов, с сохраненной в них формой, невозможно переключить их показ на другую
форму (например, через меню View -> Switch Form). Если это необходимо, то следует удалить
(например, с помощью агента) из документа предопределенные проблемно-ориентированные поля
(достаточно удаления полей $Title и $Body). Вернемся опять к свойству БД Allow use stored forms in
this database. Если свойство не установлено, то при открытии документа, с сохраненной в нем форме,
будет выдано предупреждающее сообщение со следующим текстом: «This document cannot be
displayed in its original format because it contains a stored form. This database does not allow use of stored
forms. Notes will attempt to open the document using a different format.» («Этот документ не может быть
отображен в его первоначальном формате, потому что он содержит в себе сохраненную форму.
Данная БД не разрешает использование сохраненных форм. Notes будут пытаться открыть документ,
используя другой формат»). Пользователь может попытаться открыть документ по другой форме
(форма по умолчанию), нажав на кнопку Ok в предупреждающем сообщении, или вообще отказаться
от открытия документа по кнопке Cancel. Обратите ВНИМАНИЕ, что опущенный у БД флаг Allow use
stored forms in this database не препятствует сохранению в документе форм с установленным
свойством Store form in document, свойство всего лишь препятствует отображению документа по
сохраненной форме;
•
Disable Field Exchange (запретить обмен данных полями). Поднятый флаг запрещает
приложениям осуществлять обмен данных, построенный на технологии Notes/FX (Notes Field
Exchange). Подробнее см. документацию;
•
Automatically Refresh Fields (автоматически обновлять значение полей). Поднятие флага влечет к
пересчету всех формул полей типа ключевые слова в документе. Пересчет полей идет сверху вниз,
слава направо до поля, которое теряет фокус (более подробно порядок перевычисления полей
рассмотрен в разделе 4.3.8). Применение данной опции может существенно снизить
производительность приложения;
•
Anonymous Form (форма для анонимных пользователей). При установленной опции в документе
не сохраняется информация о редакторах данного документа. С точки зрения содержимого документа
в них не будет сохраняться предопределенное поле $UpdatedBy, но будет создаваться поле
$Anonymous со значением " 1 " . Для сохраненных ранее документов поле $UpdatedBy не удаляется, и
появляется поле $Anonymous со значением " 1 " ;
•
No Initial Focus (без начального фокуса). При опущенном флаге открытие формы на создание
нового или редактирование существующего документа устанавливает фокус (можно сказать и курсор)
в определенное поле. Обычно первое, но это может быть изменено. При поднятом флаге создание
нового документа, а также редактирование существующего документа (например, через акцию вида
@Command([EditDocument]) ) вызывает первоначальное отсутствие фокуса. Однако, если открыть
документ на редактирование двойным кликом в виде/папке или сменой режима (Ctrl-E из чтения), то
это вызывает появление фокуса даже с поднятым флагом No Initial Focus;
•
No Focus On F6 (без получения фокуса по клавише F6). В рамках фреймсета в клиенте Notes
можно переключать фокус между фреймами фреймсета с помощью клавиш F6 и Shift-F6. Если в
одном фрейме отображается форма, у которой поднят флаг No Focus On F6, то этот фрейм
исключается из цикла обхода по клавишам F6 и Shift-F6;
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
43
• Sign Documents that Use This Form (подписывать документы, использующие эту форму). При
поднятом флаге сохранение документа по такой форме в клиенте Notes ведет к появлению в
документе специального поля $Signature, хранящего Электронно-Цифровую Подпись (ЭЦП). ЭЦП
создается на основании содержимого всех полей документа, с установленным флагом Sign if mailed
or saved in section (см. раздел 4.3.1). ЭЦП гарантирует, что с момента сохранения документа
содержимое его подписанных полей не изменилось. Более подробно ЭЦП рассмотрена в разделе
4.17.4. Поднятие флага Sign Documents that Use This Form у формы аналогично применению метода
Sign класса NotesDocument в рамках LotusScript;
•
Render pass through HTML in Notes (исполнять код pass through HTML в клиенте Notes). Если
данный флаг поднят, то текст формы с установленным свойством Pass-Thru HTML (см. раздел 4.4.4)
будет обрабатываться и отображаться как HTML-код, а не статичный текст. Например, статичный текст
<А HREF="http://www.lotus.com">LOTUS</A> будет восприниматься как URL ссылка на сайт lotus.com;
• Do not add field names to field index (не добавлять имена полей к индексу полей). В документации
сказано, что поднятие этого флага предотвращает от сохранения имен полей этой формы в памяти и
специальной таблице в рамках текущей БД. Действительно, если данный у формы флаг не поднят, то
сразу после сохранения формы список ее полей добавляется в индекс полей, и он может быть
использован в ряде элементов дизайна (формула столбца вида/папки, простое действие изменения
поля и т.д.). Если флаг Do not add field names to field index поднят, то поля текущей формы сразу
после сохранения в индексе полей не появляются. Однако если создать документ по такой форме, то
поля документа появляются в индексе полей БД;
• Allow Autosave (разрешить автосохранение). Флаг используется в механизме автосохранений
информации, вводимой в документ, в период его редактирования. Такая информация сохраняется в
специальной БД на стороне клиента. Включение механизма автосохранения осуществляется в клиенте
Notes через меню File -> Preferences -> User Preferences в полях AutoSave every XX minutes
(автосохранение каждые XX минут).
Рис. 4.4 Закладка Basics окна User Preferences
Если автосохранение в клиенте Notes и свойствах форме настроено, то при запуске клиента после
его некорректного завершения (например, пропадание электропитания) появляется окно с предложением
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
44
о восстановлении автосохраненных документов. Текст сообщения: You have XXX unsaved document(s): Do
you want to recover these documents now? (Вы имеете XXX несохраненных документов. Желаете
восстановить их сейчас?).
Рис. 4.5 Окно с предложением восставить автосохраненные документы
Выбор в этом окне кнопки ОК вызывает диалог Recovery Unsaved Documents (восстановление
несохраненных документов):
Рис. 4.6 Диалог Recovery Unsaved Documents
Рассмотрим элементы интерфейса этого диалога:
• кнопка Close (закрыть) - закрывает указанный диалог. В последствии к нему можно вернуться в
любое время через меню клиента File -> AutoSave -> Recover AutoSaved Documents;
• кнопка Recover (восстановить) - восстанавливает один документ, выбранный в поле-списке
диалога. В этом поле отображаются следующие колонки:
• дата/время автосохранения документа (Autosave Time);
• заголовок документа (Document Title) или другими словами значение формулы Window
Title (см. раздел 4.2.2);
• имя файла БД (Database);
• имя сервера, содержащего БД (Server Name);
• кнопка Recover All (восстановить все) - восстанавливает все документы, представленные в полесписке диалога;
• кнопка Remove (удалить) - удаляет документ, выбранный в поле-списке диалога, из БД,
содержащей информацию об автосохранениях;
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
45
• кнопка Remove Аll (удалить все) - удаляет все документы, представленные в поле-списке диалога,
из БД, содержащей информацию об автосохранениях.
Помимо стандартных возможностей автосохранения (т.е. через указанное число минут),
пользователь может принудительно вызвать функцию автосохранения через меню клиента Notes: File ->
AutoSave -> AutoSave Now.
Вернемся опять в окно свойств формы. Последняя секция закладки Form Info называется Conflict
Handling (обработка конфликтов). Под конфликтами здесь понимаются конфликты сохранений и
репликаций. Например, у БД блокировка документов не установлена, и два пользователя одновременно
редактируют один и тот же документ. В этом случае при сохранении документа может возникнуть
конфликт. Следует заметить, что механизм блокировок полностью не гарантирует отсутствие конфликтов,
но вероятность таких конфликтов на порядок ниже.
Конфликты репликаций возникают, когда одну и ту же копию документа модифицируют в разных
репликах БД в период между репликациями. В этом случае Domino не может перезаписать или
объединить (если это не указано в форме) изменения. Вместо этого Domino создает копию для каждого
такого документа. Пользователь, знакомый со смыслом информации, должен определить какое изменение
является необходимым и «вручную» разрешить конфликт.
Domino использует иерархию ответов для отображения конфликтов репликаций в виде. Следующая
таблица описывает процесс обработки репликационных конфликтов сервером Domino.
Стадия
Описание
1
Domino проверяет каждый документ с конфликтом репликации.
2
Domino делает один из таких документов главным. Документ, становящийся главным,
выбирается по одному из следующих условий:
• документ, который имеет больший Seq номер (часть ID документа, содержащая
информацию о числе сохранений документа);
• если оба документа имеют одинаковый Seq номер, то выбирается тот, который был
позже сохранен.
3
Остальные конфликтные документы делаются ответными к главному и указываются в виде с
пометкой [Save or Replication conflict].
Конфликты сохранения возникают, когда один и тот же документ модифицируют и сохраняют два
(или более) разных пользователя. При сохранении такого документа вторым пользователем в интерфейсе
клиента Notes выдается предупреждающее окно со следующим текстом: «Another copy of this document
was saved while you were edited it. Save your changes also as a Save Conflict document?» (Другая копия этого
документа была сохранена пока вы его редактировали. Сохранять ли ваши изменения как конфликтный
документ?). При выборе Yes отредактированный позднее документ будет сохранен как конфликтный. В
остальном, механизм конфликтов сохранения не отличается от конфликтов репликации.
Возвратимся к полю из секции Conflict Handling. Единственное поле секции в большей степени
влияет на конфликты репликаций, так как при конфликтах сохранения независимо от значения поля
конфликт возникает. При конфликте сохранения/репликации один документ остается главным, а второй
становится ответным к нему. Кроме этого, у конфликтного документа появляется предопределенное поле
$Conflict со значением пустой строки. Допустимыми для поля секции Conflict Handling являются
следующие значения:
• Create Conflicts (создавать конфликты). Выбор этого значения вызывает безусловное создание
конфликтных документов при конфликте репликации/сохранения. Сохранение документа, созданного
по форме с данной опцией, не вызывает появление в документе предопределенного поля
$ConflictAction;
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
46
•
Merge Conflicts (объединять конфликты). Если в разных репликах пользователи редактировали
различные поля, то при репликации эти значения объединятся в одном документе без возникновения
конфликта. Если редактируется одно и тоже поле в разных репликах, то конфликт все же возникает.
Сохранение документа, созданного по форме с данной опцией, вызывает появления в документе
предопределенного поля $ConflictAction со значением " 1 " ;
•
Merge/No Conflicts (объединять или отвергать конфликты). Если в разных репликах пользователи
редактировали различные поля, то при репликации эти значения объединятся в одном документе без
возникновения конфликта. Если редактируется одно и тоже поле в разных репликах, то конфликт не
возникает, а документ, который должен был бы стать конфликтным (см. таблицу выше) просто не
сохраняется. Сохранение документа, созданного по форме с данной опцией, вызывает появление в
документе предопределенного поля $ConflictAction со значением "3";
•
Do Not Create Conflicts (не создавать конфликты). При данном выборе конфликты вообще не
создаются. Сохранение документа, созданного по форме с данной опцией, вызывает появление в
документе предопределенного поля $ConflictAction со значением "2".
Важное замечание - предопределенное поле $ConflictAction не меняет своего значения в ранее
созданных документах после изменения свойств формы и повторного сохранения документа. Исключение
составляет только случай, когда этого поля в документе не было (соответствует значению Create
Conflicts). Здесь поле $ConflictAction появляется в документе со значением, соответствующим опции
формы. Таким образом, если изменить свойства формы и даже пересохранить затем ранее созданные
документы, то при репликации эти документы будут обрабатываться в соответствии со старыми
значениями параметров обработки конфликтов. Если требуется изменить такое поведение, то следует
написать агента, изменяющего значение поля $ConflictAction.
4.1.2
Закладка
Defaults tab - действия формы по умолчанию
Defaults tab (действия формы по умолчанию) выглядит следующим образом:
Рис. 4.7 Закладка Defaults окна свойств формы
Первая секция On Create (при создании документа) содержит два флага:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
47
• Formulas inherit values from selected document (формулы наследуют значения из выбранного
документа). Для реального наследования в конкретных полях должны быть определены формулы
поля (например, формула по умолчанию - Default Value, см. раздел 4.2.2), которые ссылаются на
имена наследуемых полей. Например, мы хотим, чтобы в поле Country текущего документа было
скопировано значение одноименного поля из выбранного документа. В этом случае формула Default
Value текущего документа будет состоять только из Country;
•
Inherit entire selected document into rich text field (наследовать целиком выбранный документ в
поле типа Rich Text). При выборе данной опции в секции появляются еще два поля. В первом из них
предлагается выбрать поле Rich Text из имеющихся в форме. Во втором поле доступно для выбора
одно из трех значений:
• Link (ссылка на документ типа doclink). Данная ссылка на текущий на момент создания
документ вставляется в указанное Rich Text поле;
• Collapse rich text (свертываемая секция с содержимым выбранного документа). В
указанном Rich Text поле генерируется свертываемая секция с содержимым выбранного
документа;
• Rich text (значение Rich Text). В указанном поле копируется весь текст выбранного
документа.
Следующая секция On Open (действия при открытии формы) содержит два флага:
•
Automatically enable Edit Mode (автоматически включать режим редактирования). По умолчанию
документ открывается на чтение. Установка этой опции позволяет сразу открывать его на
редактирование (разумеется, при наличии у пользователя соответствующих прав).
•
Show context pane (показывать контекстно зависимую панель). При поднятии данного флага
появляется еще одно поле, в котором можно выбрать либо значение Doclink (ссылка на документ типа
doclink), либо Parent (ссылка на родительский документ). В обоих случаях, при открытии формы, экран
делится на две панели. В верхней - отображается текущий документ, а в нижней, при значении
Doclink, - документ из первой doclink ссылки текущего документа, либо родительский документ - при
значении Parent.
Секция On Close (действия при закрытии формы) содержит единственный флаг Present mail send
dialog (при закрытии выводить диалоговое окно отправки документа почтой). Выбор данной опции влечет
к появлению модального окна при закрытии документа, созданного по текущей форме.
Рис. 4.8 Окно диалога отправки почты
Пользователь может нажать одну из четырех кнопок, расположенных снизу, и установить один или
два флага слева. Смысл данных элементов интерфейса ясен из названий: Send & Save (сохранить копию
документа в текущей БД и отправить его по почте), Send Only (не сохранять копию документа, но
отправить его по почте), Save Only (сохранить копию документа, но не отправлять его по почте), Discard
(выйти без сохранения и отправки документа по почте), Sign (осуществлять электронную подпись полей
исходящей почты) и Encrypt (шифровать поля исходящей почты). Если пользователь выберет Send &
Save или Send Only, то для реальной отправки документа почтой необходимо наличие в документе поля
SendTo с допустимым значением почтового адреса. Флаги Sign и Encrypt влияют на поля, с
установленными соответствующими опциями (см. раздел 4.3.1).
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
48
Секция On Web Access (при доступе через Web) содержит следующие элементы интерфейса:
•
радиокнопки Content type (тип содержимого) с выбором из трех значений:
• Notes. Данный выбор заставляет сервер Domino, при обращении через Web к текущей
форме, «на лету» генерировать HTML-код из объектов формы, в соответствии со своими алгоритмами
преобразования;
• HTML. При данном выборе Domino передает все данные формы в браузер как HTML код,
т.е. Domino не генерирует свой HTML-код. ВНИМАНИЕ, поднятие данного флага при работе под Web c
URL .../форма?ОреnForm ведет к ошибке Error 500 HTTP Web Server: Application Exception Documents treated as HTML cannot be edited (HTTP Web Server: Ошибка в приложении - Нельзя
редактировать документы, обрабатываемые как HTML). Для открытия такой формы надо использовать
URL .../форма?ReadForm. Аналогичная ошибка возникает при попытке редактирования документов,
созданных по такой форме, из-под Web через URL .../документ?EditDocument. Чтение документов
по URL .../документ?OpenDocument работает. После выбора данной опции в браузере в теле
документа не отображаются встроенные (embedded) навигаторы и, возможно, виды/папки. Встроенные
виды и папки можно заставить отображаться, если установить у вида/папки свойство Treat view
contents as HTML (обрабатывать содержимое вида как HTML). При этом, как будет отображаться
вид/папка в интерфейсе апплета ипи просто как HTML, определяется в свойствах встроенного объекта
(но не в свойствах самого вида/папки). Кроме этого, данная опция влияет на флаг Generate HTML for
all fields (см. ниже);
• Other (иной). Данная опция не очень хорошо документирована. При этом выборе
появляется дополнительное поле, куда следует внести параметры отображения формы (например,
text/plain). Отображение очень похоже на получаемое при опции HTML. При открытии такого ресурса в
IE 5 и выше по URL .../форма?ReadForm выдается окно, предлагающее сохранить ресурс на диске
или сразу открыть его;
•
поле-список Character set (кодовая страница) позволяет выбрать для генерируемой на основании
формы HTML-страницы значение кодовой страницы. Данное поле оказывает влияние на форму,
только если для радиокнопок Content type выбрано значение Notes, и значение самого поля
отличается от Default (по умолчанию). В этом случае в генерируемой HTML-странице появляется
скрытое поле с именем %%PostCharset и значением, выбранным в списке. Например, <input
type="hidden" name="%%PostCharset" value="ISO-8859-5">;
•
флаг Generate HTML for all fields (формировать HTML-код для всех полей формы). Основное
предназначения этого свойства состоит в генерации HTML-кода для «скрытых» средствами Notes
полей. По умолчанию для таких полей Domino не строит HTML-код. При поднятом флаге для таких
полей любых типов (исключая Formula) генерируется тег INPUT с атрибутами TYPE="hidden",
Name="имя_поля". Наличие у поля формулы значения по умолчанию, или формулы вычисляемого
поля приводит к записи вычисленного значения этой формулы в атрибут тега VALUE. Используя
скрытые поля, разработчик может обращаться к ним в Web-приложениях, например, через JavaScript.
По мнению автора, целесообразней для этих целей использовать у конкретного поля свойство HTML
Attributes в контекстной панели Domino Designer, или свойство Other на закладке HTML в окне
свойств поля, и внести туда значение TYPE=hidden. Таким образом, мы не будем заставлять в
браузере отображаться (хотя и скрыто) все скрытые поля. Следует так же отметить, что свойство
работает, только если для радиокнопок Content type выбрано значение Notes;
•
три списковых поля: Active link (активные ссылки), Unvisited link (непосещенная ссылка) и Visited
link (посещенная ссылка). Данные поля определяют цвет ссылок в Web-приложении. С другой
стороны, эти поля определяют значение атрибутов ALINK, LINK и VLINK тега BODY. Обратите
внимание, что в Web-приложения данные атрибуты передаются только в случае, если хотя бы один из
параметров имеет значение отличное от значения, установленного по умолчанию. При выборе
значения любого списка появляется диалоговое окно:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
49
Рис. 4.9 Окно основного определения цвета объектов
В нем можно выбрать требуемый цвет из имеющихся, кликнув по любому из цветных
прямоугольников. В верхней части окна при этом отобразятся составляющие выбранного цвета по RGB
(Красный - Зеленый - Синий). Для установки дополнительных возможностей определения цвета можно
кликнуть по кнопке , расположенной в правой верхней части окна. Появится следующее модальное окно:
Рис. 4.10 Окно дополнительного определения цвета объекта
В левой части окна представлены Basic colors (базовые цвета) в виде цветных прямоугольников.
Ниже размещены Custom colors (цвета, определяемые пользователем). В большом прямоугольнике с
градиентной цветовой гаммой можно выбрать мышью требуемый цвет. При этом, выбранное значение
отобразится в увеличенном прямоугольнике Color|Solid (Цвет | Насыщенность). Кроме этого,
составляющие значения цвета выведутся в полях Hue (оттенок), Sat (насыщенность), Lum (яркость) и Red
(красный), Green (зеленый), и Blue (синий). Яркость выбранного цвета можно еще менять в градиентной
полосе с «бегунком», расположенной справа от основного поля выбора цвета. Так же можно
самостоятельно редактировать значения составляющих цвета в полях Hue, Sat, Lum, Red, Green и Blue.
Определенный разработчиком цвет можно перенести Custom colors по кнопке Add to Custom Colors
(добавить в пользовательские цвета). В этом случае, данный цвет в дальнейшем можно будет выбирать
из нижней строчки прямоугольников в основном окне определения цвета (см. Рис. 4.9).
Последняя секция закладки Defaults имеет отношение к Data Connection Resource и будет
подробно рассмотрена в разделе 16.5.
4.1.3
Закладка
Launch tab - действия при «запуске» формы
Launch (действия формы при запуске) выглядит следующим образом:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
50
Рис. 4.11 Закладка Launch окна свойств формы
Первая секция Auto Launch (автоматический запуск) содержит по умолчанию одно поле-список,
которое и определяет, что должно запускаться при определенных условиях. Интерфейс закладки
контекстно зависим от значения этого поля. У поля присутствуют как значения, которые не зависят от
установленного на данном компьютере программного обеспечения (эти значения обрамлены дефисами),
так и значения, связанные с установленным на компьютере программами типа OLE-серверов.
Стандартные значения поля:
•
-None- (ничего дополнительно не стартовать). Значение по умолчанию. Документ открывается как
обычно, по указанной форме;
•
-First Attachment- (стартовать приложение, связанное с первым присоединенным файлом);
•
-First Document Link- (открывать первую Notes-гиперссылку на документ);
•
-First OLE Object- (стартовать первый OLE объект);
•
-URL- (открывать страницу, URL которой определен в поле URL документа). При этом выборе,
поле URL рекомендуется сделать типа Rich Text и в рамках его определить гиперобъект типа ссылка
(Link Hotspot, подробнее см. раздел 4.14).
При выборе значений -First Attachment-, -First Document Link- и -URL-, открытие на чтение уже
созданного по текущей форме документа, приведет к открытию, соответственно, приложения, связанного с
первым присоединенным файлом, первой Notes-гиперссылкой на документ и страницы, или URL, которой
определен в поле URL документа. При открытии документа на редактирование, предварительный
просмотр, печать и т.д. (кроме просто чтения), документ будет открываться как обычно, по указанной
форме.
При выборе значения -First OLE Object- или любого значения, не начинающегося дефисом, на
странице появляются дополнительные элементы интерфейса:
•
два флага, которые на самом деле действуют как радиокнопки, за исключением случая, когда они
оба не выбраны: Launch object in place (стартовать объект по месту) и Present document as modal
dialog (представлять документ в модальном окне). Первое значение позволяет редактировать OLE
объект в рамках текущего окна Notes, во втором - выдается отдельное модальное диалоговое окно для
первого OLE объекта;
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
51
•
поле-список Create object in field (создавать объект в поле). В этом поле можно определить, в
каком Rich Text поле будет сохраняться создаваемый OLE объект. В поле присутствуют следующие
значения:
• -First Rich Text Field- (в первом Rich Text поле);
• -None- (не сохранять);
• имена доступных в данной форме Rich Text полей;
•
поле-список с возможностью выбора нескольких значений Launch when (когда осуществлять
запуск OLE объекта). Допустимые значения:
• Creating (при создании);
• Editing (при редактировании);
• Reading (при чтении);
•
поле-список с возможностью выбора нескольких значений Hide when (когда скрывать сам
документ). Допустимые значения:
• Opening Create (при открытии на создание документа);
• Opening Edit (при открытии на редактирование);
• Opening Read (при открытии на чтение);
• Closing Create (при закрытии документа после его создания);
• Closing Edit (при закрытии документа после его редактирования);
• Closing Read (при закрытии документа после его чтения).
Секция Auto Frame (автоматическое открытие во фреймах) содержит два поля типа выпадающий
список:
•
Frameset (фреймсет). Поле содержит имена доступных в данной БД фреймсетов. При выборе
этого значения становится доступным следующее поле;
•
Frame (фрейм). Поле содержит имена фреймов, доступных для данного фреймсета (из поля
Frameset). При выборе допустимого значения в этом поле, документ будет всегда открываться в
указанном фрейме заданного фреймсета. Данной опцией широко пользуется сам Lotus в своих
справочных БД (например, Domino Administration Help);
4.1.4
Закладка
Form Background tab - определение фона формы
Form Background tab (определение фона формы) выглядит следующим образом:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
52
Рис. 4.12 Закладка Background окна свойств формы
Секция Color (цвет) содержит одноименное поле, которое определяет цвет фона формы. При
выборе значения появляется модальное окно, уже рассмотренное нами в параграфе 4.1.2 в полях
определения цвета ссылок. Единственное отличие от рассмотренного примера состоит в том, что в
правом верхнем углу окна основного определения цвета объектов (см. Рис. 4.9), в дополнение к кнопке ,
появилась кнопка . Клик по данной кнопке приводит цвет фона формы к определенному в системных
настройках. Цвет фона, определенный в поле Color, в Web-приложениях передается в атрибут BGCOLOR
тега BODY. Данная секция определяет однотонные цвета подложки формы.
Секция Graphic or Resource (графические изображения или ресурсы) позволяет в качестве
подложки формы использовать неоднотонные изображения. Кнопка Paste (вставить) позволяет
определить цвет фона формы на основании графического изображения из буфера обмена. Кнопка Import
(импорт) выдает модальное диалоговое окно для выбора фона формы из файлов рабочей станции. При
установке фона кнопками Paste или Import становится доступной кнопка Remove (удалить), которая,
соответственно, удаляет графический фон у формы.
Нижняя часть секции связана с определением фона формы через объекты Image Resource
(графические ресурсы БД, более подробно будут рассмотрены в разделе 16.1). Существует несколько
способов такого определения. Первый способ - в поле, расположенное справа от слова Resource, можно с
клавиатуры ввести имя файла из имеющихся в Image Resource текущей БД (например, actn009.gif).
Второй - по кнопке
Browse images (просмотреть доступные графические ресурсы) выводится
диалоговое окно для выбора конкретного значения имени ресурса, из имеющихся в Image Resource.
Последний способ - определить формулу по кнопке
Formula (формула). Формула должна подчиняться
правилам языка @-формул и возвращать значение имени доступного ресурса из Image Resource
(например, @lf(Type = " 1 " ; "actn009.gif"; "actn010.gif"). Стоит отметить, что у таких формул в документации
не определен контекст, или, другими словами, какие функции и значения можно использовать внутри
формулы, а какие нельзя. Существуют еще отличия для клиента Notes и браузера. Экспериментально
выяснено, что, например, значения полей в формуле фона формы работают и в клиенте Notes и браузере,
a @lsDocBeingEdited - только в браузере. Фон формы, определенный в секции Graphic or Resource, в
Web-приложениях передается в атрибут BACKGROUND тега BODY.
Секция Options (параметры) определяет дополнительные настройки, связанные с фоном формы.
Если не определено значение в секции Graphic or Resource, то в секции Options доступен только один
флаг Allow users to change this properties (разрешить пользователям изменять данные свойства).
Значение у поля по умолчанию выставлено. В этом случае пользователи в режиме редактирования
документа могут изменить параметры фона документа на закладке Background (фон) окна свойств
документа (более подробно об окне свойств документа см. в разделе 18.4.6).
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
53
Рис. 4.13 Закладка Background окна свойств документа
Кроме рассмотренного поля Allow users to change this properties в секции Options присутствуют
еще три поля:
•
флаг Hide graphic in design mode (скрывать графический фон в Domino Designer). Позволяет в
режиме разработки формы не загружать ее графический фон;
•
флаг Hide graphic on 16 color displays (скрывать графический фон для мониторов с
установленным режимом в 16 цветов). Смысл поля ясен из названия;
•
поле-список Repeat (повтор), определяющее как «размножить» графический фон формы, если
размер изображения фона меньше размеров самой формы. Поле предлагает на выбор следующие
значения:
• Repeat once (однократный повтор в левом верхнем углу формы);
• Repeat vertically (повтор по вертикали в левом верхнем углу формы);
•
Repeat horizontally (повтор по горизонтали в левом верхнем углу формы);
• Tile (мозаика). Соответствует многократному повтору по горизонтали и вертикали;
• Size
to
Fit
(подогнать
под
размеры
формы).
увеличиваются/уменьшаются в соответствии с размерами формы;
Размеры
изображения
• Center (в центре). Соответствует однократному повтору изображения в центре формы.
4.1.5
Закладка
Header tab - заголовок формы
Header tab (заголовок формы) выглядит следующим образом:
Рис. 4.14 Закладка Header окна свойств формы
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
54
Верхняя секция содержит единственный флаг Add header to form (добавить заголовок к форме). Под
заголовком подразумевается создание непрокручиваемой верхней области формы. При поднятом
значении флага имеют смысл следующие секции.
Секция Size (размер) определяет размер заголовка формы. Желательно определять размер до
момента помещения на форму объектов типа поля и т.д. В секции присутствуют следующие элементы
интерфейса:
•
поле Height (высота), определяющее высоту заголовка, и следующее поле-список, определяющее
в каких единицах измеряется высота. Его допустимые значения: Percent (%) (в процентах от общей
высоты экрана), Pixels (в пикселях) и Fit to content (подгонять под контекст документа);
•
радиокнопки Scrolling (вертикальная полоса прокрутки для заголовка формы). Допустимые
значения: Yes (да), No (нет) и Auto (определять автоматически). При выборе Yes полоса прокрутки
присутствует всегда, даже если вся информация заголовка помещается в определенной для заголовка
части экрана. Выбор No запрещает появление полосы прокрутки для заголовка, даже в случае, когда
его информация не помещается на отведенной части экрана. При Auto Notes сам определяет нужна
ли полоса прокрутки;
•
флаг Allow resize (разрешить пользователям изменять размер заголовка). Смысл ясен из
названия.
Секция Border (граница) определяет внешний вид границы, разделяющей заголовок и оставшуюся
часть формы. В секции присутствуют следующие элементы интерфейса:
•
поле Width (ширина) определяет ширину границы в пикселях;
•
Color (цвет) - соответственно цвет границы;
•
флаг 3D shading (делать ли границу объемной).
В заключение, по поводу заголовков хотелось бы отметить, что работают они только в интерфейсе
клиента Notes (не в Web-приложениях). И даже в клиенте могут встречаться особенности для форм с
заголовком (не всегда отрабатывают все обычно выполняющиеся события, типа QueryClose и т. д., так же
бывают проблемы с копированием таких документов через буфер обмена).
4.1.6
Закладка
Printing tab - закладка колонтитулы
Printing tab (определение колонтитулов формы) выглядит следующим образом:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
55
Рис. 4.15 Закладка Printing окна свойств формы
Все элементы интерфейса этой страницы идентичны рассмотренной одноименной закладке окна
свойств БД (см. раздел 2.3.3). Единственное замечание - колонтитулы, определенные у формы, имеют
более высокий приоритет, чем колонтитулы БД. Поэтому, если определен, например, у формы нижний
колонтитул, а у БД - верхний, то при печати документа будет выводиться только колонтитул формы.
4.1.7
Закладка
Security tab - закладка «безопасность»
Security (безопасность) выглядит следующим образом:
Рис. 4.16 Закладка Security окна свойств формы
На странице присутствуют три секции. Первая секция Default read access for documents created
with this form (доступ на чтение к документам, созданным по данной форме) определяет, кто может
читать документы, созданные по текущей форме. По умолчанию определяется поднятым флагом Аll
readers and above (все пользователи с уровнем доступа в ACL Читатель и выше). При снятии флага
становятся доступными кнопка
и поле со списком всех пользователей и ролей из ACL БД. В поле со
списком можно проставить «галочку» напротив требуемого пользователя или роли, а по кнопке
можно
добавить новых пользователей из адресной книги.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
56
Следующая секция Who can create documents with this form (кто может создавать документы по
этой форме) очень похожа на предыдущую секцию в смысле интерфейса. Флаг All authors and above (все
авторы и выше), поле-список и кнопка
имеют тот же смысл, что у предыдущей секции с оговоркой, что
там идет разговор о возможности чтения, а здесь о создании документов. Следует так же отметить, что
изменения, произошедшие в этих секциях действительны только для документов, созданных после таких
изменений.
Следующая секция Default encryption keys (ключи шифрования по умолчанию) отвечает за процесс
шифрования. Поле-список, присутствующее в секции, становится доступным при наличии в ID файле
разработчика как минимум одного ключа шифрования. При этом в поле можно выбрать нужный ключ из
имеющихся. Выбор этого режима имеет смысл, только если у формы имеются поля с включенной опцией
шифрования (более подробно см. раздел 4.3.1).
Кроме этого поля в секции присутствуют еще два флага:
•
Disable printing/forwarding/coping to clipboard (запрет на печать, отправку по почте копии
документа и копирование его через буфер обмена). Смысл ясен из названия. Однако, не стоит
обольщаться на предмет нового уровня безопасности. Документ, например, может быть отправлен по
почте агентом. Поднятие флага ведет к появлению в документе, созданном по такой форме,
предопределенного поля $KeepPrivate со значением " 1 " . Для таких документов при обращении к их
окну свойств становится недоступной для копирования информация с закладки Fields (см. раздел
18.4.2);
•
Available to Public Access users (доступ к форме пользователям с уровнем доступа
«Общедоступный»). Поднятый флаг предоставляет пользователям, даже с уровнем «Нет доступа», но
с поднятым в ACL флаге Read public documents (возможность читать общедоступные документы) или
Write public documents (возможность создавать общедоступные документы) получать доступ на
чтение или создание/редактирование к общедоступным документам, созданным по текущей форме.
«Общедоступность» документа достигается добавлением в него предопределенного поля
$PublicAccess со значением " 1 " . Например, это можно сделать, разместив на форме «скрытое» поле с
таким именем.
4.2 Объекты и свойства формы, определяемые в объектно-событийной
панели
После создания формы в объектно-событийной панели, на закладке Objects (объекты) появляется
ряд объектов, имеющих отношение к форме целиком. На самом верхнем уровне иерархии находятся два
объекта Globals (имя_формы) и имя_формы (Form), назовем их соответственно Globals и Form.
Рассмотрим эти объекты более подробно.
4.2.1
Объект Globals
Объект Globals, как видно из Рис. 4.17, изначально содержит четыре подобъекта: Options
(параметры), Declarations (описания), Initialize (инициализация) и Terminate (завершение).
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
57
Рис. 4.17 Представление объекта Globals в Domino Designer
Для того, чтобы «развернуть» иерархию объекта, достаточно кликнуть по значку «+», соответственно
для «свертывания» - по «-». Все объекты предназначены для ввода глобального программного кода по
отношению к форме и - исключительно на LotusScript. Под глобальностью здесь понимается то, что
переменные и подпрограммы, объявленные в объекте Globals, доступны из любого скрипта,
определенного в форме. Объект Options предназначен для задания глобальных неисполняемых
операторов типа Option (например, Option Declare, DefType, Use и UseLSX). Объект Declarations
предназначен для объявления глобальных переменных, типов данных, классов, внешних функций, а так
же для определения констант и подключения файлов директивой компилятора %INCLUDE. Так, например,
в этом объекте может быть размещен следующий код:
Class MyPoint
Public х As Double
'координата вектора по X
Public у As Double
'координата вектора по Y
Public Function MySum( A As MyPoint, В As MyPoint ) As MyPoint
Set MySum = New MyPoint
MySum.x = A.x + B.x
MySum.y = А.у + В.у
End Function
Public Function MyScal ( A As MyPoint, В As MyPoint ) As Double
MyScal = A.x * B.x + А.у * В.у
End Function
End Class
Const abc = 123
Объекты Initialize и Terminate предназначены для определения подпрограмм, которые будут
выполняться для Initialize в момент загрузки формы, а для Terminate в момент закрытия документа.
Наглядно проверить последовательность возникновения событий можно, внеся в соответствующие
LotusScript объекты функцию, выводящую диалоговое окно (например, Messagebox "имя объекта"). В
объект Globals можно добавить и свои новые объекты, например, свою функцию. Один из способов
сделать это - ввести код функции на следующей за End Sub строке в Initialize или Terminate.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
58
4.2.2
Объект Form
Объект Form содержит значительно больше составляющих, чем Globals. Первоначально они
условно разделены на три группы, первые могут содержать код только на @-формулах, вторые JavaScript (ряд из них можно перевести в код на LotusScript или @-формулы), и третьи - изначально на
LotusScript (большинство из них можно перевести в код на @-формулы или JavaScript). В Domino, начиная
с версии 6, применена новая модель событий. Она позволяет писать код и для Web-браузера, и клиента
Notes в одном и том же обработчике события. В верхней части программной панели в области Run
присутствуют два поля типа выпадающий список.
•
левое поле позволяет определить клиента, где это событие будет обрабатываться;
•
правое - определить язык программирования, использующийся для обработки.
Следующий рисунок отображает интерфейс обработки событий для формы:
Рис. 4.18 Поле Run программной панели
Обратите внимание, что значение Common JavaScript представляет не какой-то новый язык
программирования, это самый обычный JavaScript-код, который внесен в одном месте для обработки
событий, выполняющихся как в клиенте Notes, так и в Web. Например, в обработчик события onHelp
внесем следующий код:
alert('Нажата клавиша F1');
В группе полей Run определим следующие значения: Client и Common JavaScript. Тогда, при
нажатии клавиши F1, как в клиенте Notes, так и в Web будет выводиться окно с текстом: «Нажата клавиша
F1».
Вернемся опять к объекту Form. В группе обработчиков событий, где допустимым является только
язык @-формул, присутствуют следующие объекты:
•
Window Title (заголовок окна). Если эта формула определена, то ее результат выводится в
заголовке окна документа, открываемого по этой форме. Например, формула @lf(@lsNewDoc; "Новый
документ"; Subject) выводит в заголовке для новых документов фразу "Новый документ", а для уже
существующих документов значение поля Subject. В Web-приложениях значение, возвращаемое
формулой, передается в тег <TITLE>;
•
HTML Head Content (содержимое тега HEAD). Значение данной формулы передается внутрь тега
HEAD для Web-приложений;
•
HTML Body Attributes (атрибуты тега BODY). Значение данной формулы передается внутрь тега
BODY для Web-приложений. Без определения этой формулы в Web-приложениях изначально
генерируются тег BODY с атрибутами TEXT и BGCOLOR. Так же через свойства формы могут быть
определены атрибуты ALINK, LINK, VLINK, BACKGROUND и BGCOLOR. Поэтому лучше определять
эти атрибуты через соответствующие свойства формы;
•
WebQueryOpen (агент, выполняющийся до момента открытия документа в Web-приложении),
Изначально
панель
кода
для
данного
события
содержит
следующую
команду:
@Command([ToolsRunMacro]; "<Your agent goes here>"). Если разработчик хочет определить свои
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
59
действия по открытию документа в Web, то вместо <Your agent goes here> нужно вставить имя
реально существующего в БД агента. Подробнее такие агенты будут рассмотрены в разделе 13.5;
• WebQuerySave (агент, выполняющийся перед сохранением документа в Web-приложении).
Изначально
панель
кода
для
данного
события
содержит
следующую
команду:
@Command([ToolsRunMacro]; "<Your agent goes here>"). Если разработчик хочет определить свои
действия по сохранению документа в Web, то вместо <Your agent goes here> нужно вставить имя
реально существующего в БД агента;
• Target Frame (целевой фрейм). Формула определяет фрейм, в котором по умолчанию будут
открываться гипертекстовые ссылки документа, созданного по текущей форме. В Web-приложениях на
эту строчку формируется тег <BASE TARGET ...>, добавляемый внутрь тега <HEAD> страницы.
Значение фрейма передается в атрибут TARGET. Здесь допускается использование значений
псевдофреймов: _self, _top, _parent, и _blank.
Следующая группа объектов изначально предназначена для размещения кода на JavaScript.
Обратите внимание, что не все обработчики событий поддерживаются в различных браузерах (подробнее
это описано в документации):
• JS Header (общий для формы JavaScript код). Данная секция предназначена для размещения
общего для всей формы кода на JavaScript. Например, собственные JS функции. Код, размещенный в
этой секции, в Web-приложениях передается внутрь тега <HEAD>. Допустимыми значениями для
группы полей Run могут быть Client/Web и JavaScript/Common JavaScript. То есть, можно
определить как общий код для двух клиентов (Client и Common JavaScript), так и один код для
клиента Notes (Client и JavaScript), а второй для браузера (Web и JavaScript);
• onHelp (обработчик, выполняющийся по факту вызова справки по клавише F1). С 6-й версии
Notes/Domino из модели событий исчезло событие HelpRequest. Для приложений, созданных в более
ранних версиях, код из HelpRequest автоматически переносится в onHelp. Допустимыми значениями в
группе полей Run могут быть для Client - Formula, LotusScript, JavaScript и Common JavaScript, a
для Web - JavaScript и Common JavaScript;
• onLoad (обработчик, выполняющийся по завершению загрузки формы). Согласно модели событий,
принятой с версии R 6, рекомендуется использовать onLoad вместо Postopen в клиенте Notes.
Допустимыми значениями в группе полей Run могут быть для Client - Formula, LotusScript,
JavaScript и Common JavaScript, а для Web - JavaScript и Common JavaScript;
• onUnload (обработчик, выполняющийся при завершении работы с формой). Согласно модели
событий, принятой с версии R 6, рекомендуется использовать onUnload вместо Queryclose в клиенте
Notes. Допустимыми значениями в группе полей Run могут быть для Client - Formula, LotusScript,
JavaScript и Common JavaScript, а для Web - JavaScript и Common JavaScript;
• onClick (обработчик, выполняющийся при однократном клике мыши). Событие поддерживается
только в Web-приложениях. В группе полей Run присутствуют неизменяемые значения Web и
JavaScript;
• onDblClick (обработчик, выполняющийся при двойном клике мыши). Событие поддерживается
только в Web-приложениях;
• onKeyDown (обработчик, выполняющийся при нажатии на клавишу клавиатуры). Событие
поддерживается только в Web-приложениях;
• onKeyPress (обработчик, выполняющийся при нажатии или отпускании после нажатия на клавишу
клавиатуры). Событие поддерживается только в Web-приложениях;
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
60
•
onKeyUp (обработчик, выполняющийся при отпускании после нажатия на клавишу клавиатуры).
Событие поддерживается только в Web-приложениях;
•
onMouseDown (обработчик, выполняющийся
поддерживается только в Web-приложениях;
при
нажатии
на
кнопку
мыши).
Событие
•
onMouseMove (обработчик, выполняющийся, когда указатель мыши перемещается в рамках
объекта). Событие поддерживается только в Web-приложениях;
•
onMouseOut (обработчик, выполняющийся, когда указатель мыши уходит с объекта). Событие
поддерживается только в Web-приложениях;
•
onMouseOver (обработчик, выполняющийся, когда указатель мыши попадает на объект). Событие
поддерживается только в Web-приложениях;
•
onMouseUp (обработчик, выполняющийся при отпускании после нажатия на кнопку мыши).
Событие поддерживается только в Web-приложениях;
•
onReset (обработчик, выполняющийся при нажатии на кнопку типа reset формы). Событие
поддерживается только в Web-приложениях;
•
onSubmit (обработчик, выполняющийся при передаче данных из формы с клиента на сервер).
Согласно модели событий, принятой с версии R 6, рекомендуется использовать onSubmit вместо
QuerySave в клиенте Notes. Допустимыми значениями в группе полей Run могут быть для Client Formula, LotusScript, JavaScript и Common JavaScript, а для Web - JavaScript и Common
JavaScript
В Web-приложениях обработчики событий onReset и onSubmit передаются в тег FORM, так как
имеют отношение к JS объекту form. Остальные обработчики передаются в тег BODY. Наглядно проверить
последовательность возникновения событий можно, внеся в обработчики функцию alert("имя
обработчика").
Следующая группа объектов имеет изначально отношение к LotusScript. Сначала попытаемся
разобраться с объектами Options, Declarations, Initialize и Terminate, тем более что одноименные
объекты присутствуют и в Globals. Первое отличие, что данные объекты в Globals определены на уровне
модуля, и, следовательно, только в этих объектах допускаются объявления и определения типа Public.
Поэтому константы, функции, подпрограммы, определенные как Public в Globals, могут быть доступны
для любых объектов формы (например, для акций формы). В пределах же Form мы даже не сможем
объявить что-то как Public (компилятор не даст). Другими словами, если мы в Globals определим
константу или функцию как Public, то она будет доступна для обращения в любом объекте формы
(например, в функции Click акции формы). Если же мы определим константу или функцию в Form, то в
функции Click акции формы к ним не обратишься, но можно обратиться к ним из любого объекта Form
(например, из QueryClose). Объекты Initialize и Terminate из Form схожи с Initialize и Terminate из
Globals с той лишь разницей, что при загрузке формы сначала выполняется Initialize из Globals, а затем
Initialize из Form. Для Terminate при закрытии формы сначала выполняется подпрограмма из Form, а
затем из Globals.
Оставшиеся объекты из этой группы представляют собой обработчики событий для интерфейса
клиента Notes (но не Web). С другой стороны, это события (Event) встроенного класса NotesUIDocument.
Разработчик имеет возможность выбирать язык программирования для обработки данных событий между
LotusScript и @-формулами, а в некоторых случаях и JavaScript:
•
Queryopen (обработчик события, возникающего перед загрузкой документа по текущей форме).
Допустимыми значениями в группе полей Run могут быть только Client - Formula, LotusScript и
JavaScript;
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
61
• Postopen (обработчик события, возникающего после загрузки документа, но перед передачей ему
фокуса). Согласно модели событий, принятой с версии R 6, рекомендуется использовать onLoad
вместо Postopen. Допустимыми значениями в группе полей Run могут быть только Client - Formula и
LotusScript;
• Querymodechange (обработчик события, возникающего перед сменой режима документа с чтения
на редактирование, или наоборот). Допустимыми значениями в группе полей Run могут быть только
Client-Formula, LotusScript и JavaScript;
• Postmodechange (обработчик события, возникающего после смены режима документа с чтения на
редактирование, или наоборот, но перед передачей пользователю фокуса). Допустимыми значениями
в группе полей Run могут быть только Client - Formula, LotusScript и JavaScript;
• Queryrecalc (обработчик события, возникающего перед выполнением пересчета формул
документа). Допустимыми значениями в группе полей Run могут быть только Client - Formula,
LotusScript и JavaScript;
• Postrecalc (обработчик события, возникающего после выполнения всех формул при пересчете
документа). Допустимыми значениями в группе полей Run могут быть только Client - Formula,
LotusScript и JavaScript;
• QuerySave (обработчик события, возникающего перед сохранением текущего документа).
Согласно новой модели событий, принятой с версии R 6, рекомендуется использовать onSubmit
вместо QuerySave. Допустимыми значениями в группе полей Run могут быть только Client - Formula
и LotusScript;
•
Postsave (обработчик события, возникающего после сохранения текущего документа).
Допустимыми значениями в группе полей Run могут быть только Client - Formula, LotusScript и
JavaScript;
•
Queryclose (обработчик события, возникающего перед закрытием текущего документа). Согласно
модели событий, принятой с версии R 6, рекомендуется использовать onUnload вместо Queryclose.
Допустимыми значениями в группе полей Run могут быть только Client - Formula и LotusScript;
• Querysend (обработчик события, возникающего перед отправкой по почте текущего документа).
Допустимыми значениями в группе полей Run могут быть только Client - Formula, LotusScript и
JavaScript;
• Postsend (обработчик события, возникающего после отправки по почте текущего документа).
Допустимыми значениями в группе полей Run могут быть только Client - Formula, LotusScript и
JavaScript. События Querysend и Postsend с версии R 6.5 обрабатывается не вполне корректно. Если
на форме создать три акции:
• Client - Formula с кодом @MailSend. Клик по акции не вызывает событий Querysend и
Postsend;
• Client - Simple action(s) с простым действием Send document. Клик по акции не вызывает
событий Querysend и Postsend;
• Client-LotusScript с кодом:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
62
Sub Click(Source As Button)
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Set uidoc = workspace.CurrentDocument
Call uidoc.Send
End Sub
Клик по такой акции вызывает события Querysend и Postsend.
При добавлении на форму системной акции Send Document, клик по последней вызывает события
Querysend и Postsend.
Аналогично объекту Globals, в Form можно добавлять свои собственные функции и подпрограммы.
4.3 Поля - field
Поля наиболее часто используемые, да и, наверное, самые важные объекты в форме. Их можно
рассматривать как контейнер для хранения, вывода и расчета данных. Поля в формах могут быть общими
(Shared) и однократно используемыми (single-use). Различие их состоит в том, что общие единожды
определенные можно использовать в разных формах с одним и тем же дизайном, свойствами и
поведением поля. Однократно используемые одноименные поля в разных формах могут иметь разный
дизайн, тип и т.д. Общие поля подробнее будут рассмотрены в разделе 4.3.9.
Для создания нового поля нужно установить курсор в теле формы на место, где это поле должно
находиться, и воспользоваться, например, меню Create -> Field. В теле формы при этом появится
прямоугольник, который собственно и является отражением поля в Domino Designer. Рассмотрим
подробнее свойства поля. Для этого установим курсор в область поля и воспользуемся меню Design ->
Field Properties, которое вызовет появление окна свойств поля с семью закладками. Рассмотрим их
внимательнее.
4.3.1
Field Info - общая информация о поле, Control tab - интерфейс поля и Advanced tab
- дополнительные свойства поля
Закладка
Field Info (информация о поле) выглядит следующим образом:
Рис. 4.19 Закладка Field Info окна свойств поля
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
63
Первая секция содержит поля: Name (имя поля), Туре (тип поля), поле определяющее, как получает
значение текущее поле (вычисляемое, редактируемое и т. д.), флаг Allow multiple values (поле с
множественными значениями), для вычисляемых полей флаг Compute After Validation (вычислять после
проверки введенного значения) и флаг External Data Source (внешний источник данных). Последний флаг
будет подробно рассмотрен в разделе 16.5. Сразу заметим, что вид первой (Field Info), второй (Control
tab), а иногда и третьей (Advanced tab) закладки окна свойств поля контекстно зависим от значения поля
Туре. В связи с этим, мы будем рассматривать первые три закладки и ряд секций не последовательно, а в
одном разделе в контексте поля Туре. Вернемся к первой секции закладки Field Info, она содержит поля:
•
Name (имя поля). Определяет имя поля, в рамках одной формы все имена полей должны быть
уникальны. Имя может состоять из символов букв (включая русский алфавит), цифр, символов
подчеркивания и доллара. Имя поля не должно начинаться с цифры (в документации сказано, что
должно начинаться с буквы, однако может и с символов «$» и «_»). Поля, имена которых начинаются с
символа «$» не отображаются в стандартном диалоге выбора поля для отображения в колонке вида,
однако они могут отображаться в колонке с помощью @-формул. Максимальная длина имени поля 32 байта. При использовании русских букв (что автор бы не рекомендовал) следует помнить, что один
символ это 2 байта. Существует еще тонкость с переименованием существующих полей. После этого
действия, в ранее созданных по текущей форме документах, поля со старым именем не исчезнут, но
по новой форме их значения отображаться уже не будут (если не добавить в форму поля с именем
старого поля).
•
поле-список Туре (тип поля). Начнем рассмотрение типов полей с Text (текстовое поле).
4.3.1.1
Поля типа текст - Text
Текстовые поля (Text) предназначены для хранения и/или отображения/вычисления текстовой
информации. Внешний вид поля и его поведение будет зависеть от полей окна свойств, следующего за
Text (вычисляемое - редактируемое) и полей из секции Style (стиль) и Size (размер). Другие типы полей
(не текст) будут рассмотрены позднее в этой главе. Поле (вычисляемое - редактируемое) может
принимать одно из следующих значений:
• Editable (редактируемое). Значения таких полей уполномоченные пользователи могут менять в
режиме редактирования формы;
• Computed (вычисляемое). Значение поля определяется по @-формуле (подробнее о задании
значения таких полей см. в разделе 4.3.7). Само значение вычисляется при создании документа, при
пересчете полей и при сохранении документа. Значение поля сохраняется в документе;
• Computed for display (вычисляемое для показа). Значение таких полей вычисляется при открытии,
при пересчете полей или сохранении документа. Само значение в документе при этом не сохраняется.
Однако в контексте формы можно ссылаться на значение таких полей в программном коде.
Соответственно нельзя использовать такие поля в формулах колонок видов;
• Computed when composed (вычисляемое в момент создания). Аналогично Computed с тем лишь
отличием, что формула, определяющая его значение, обычно вычисляется только в момент создания
документа и в последующем не перевычисляется. Однако, значение такого поля можно изменить
программным путем (например, с помощью функции @SetFieId из акции формы в режиме
редактирования). Этим, кстати, часто пользуются разработчики, т.к. значения таких полей не
перевычисляются при пересчете документа. Формула таких полей может вычисляться при открытии
существующего документа, при условии что этого поля в документе нет (например, он был создан по
другой форме).
Рассмотренное поле (вычисляемое - редактируемое) имеет те же значения и в том же контексте для
полей всех типов за исключением: Rich Text, Password, Formula, Rich Text Lite и Color.
Флаг Allow multiple values (поле с множественными значениями) при поднятом значении позволяет
сохранять в поле список значений. Флаг доступен для большинства типов полей, за исключением
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
64
Checkbox, Radio button, Combobox, Rich Text, Rich Text Lite и Password. Параметры, определяющие
разделители значений в списке, для различных режимов документа определяются в секции Multi-Value
Options (параметры полей с множественными значениями) на закладке Advanced tab окна свойств поля.
Рис. 4.20 Закладка Advanced tab окна свойств поля
Секция Multi-Value Options содержит два поля типа список с возможностью выбора нескольких
значений: Separate values when user enters (разделители значений в списке при вводе значений) и
Display separate values with (разделители значений в списке при отображении). Оба поля позволяют
выбрать одно или несколько значений из имеющихся: Space (пробел), Comma (запятая), Semicolon (точка
с запятой), New Line (новая строка, т.е. перевод строки) и Blank Line (пустая строка, т.е. двойной перевод
строки).
Вернемся в первую секцию первой закладки (Field Info) окна свойств поля. Для вычисляемых полей
(Computed и Computed for display) доступна опция Compute After Validation (вычислять после
проверки). Поднятие этого флага ведет к вычислению значения поля только после того, как в других полях
выполнились формулы проверок введенных значений (Input Validation формула). Более подробно
порядок вычисления формул полей рассмотрен в разделе 4.3.8.
Внешний вид поля определяется секцией Style (стиль). Основные элементы интерфейса секции
доступны для большинства типов полей, за исключением Dialog list, Checkbox, Radio button, Listbox,
Combobox, Rich Text. Секция содержит две радиокнопки Notes style (в стиле Notes) и Native OS style
(стиль, принятый в данной операционной системе) и флаг Align control's baseline with paragraph's
(выровнять поле по опорной линии абзаца). Точнее, для полей типа Date/Time, при опущенном флаге
Allow multiple values, вторая радиокнопка имеет значение Calendar/Time Control (стиль
календарь/время). Подробнее это будет рассмотрено при изучении полей типа Date/Time.
Исторически поля на форме в режиме редактирования документа отображались в интерфейсе Notes
как два «уголка», которые «разъезжались» при вводе в поле текста. Такой интерфейс поля соответствует
радиокнопке Notes style секции Style. С версии R 5 стало доступным изменить внешний вид поля. Можно,
например, убрать пресловутые «уголки», за это отвечает флаг Show field delimiters (показывать
ограничители полей) с закладки Control tab из секции Display (действия по отображению). Такой
интерфейс сейчас принят в БД почтовых ящиках для поля - тела письма (Body). Флаг Show field
delimiters доступен при выборе Notes style для полей типа Text, Date/Time, Number, Dialog list, Rich
Text, Authors, Names, Readers, Password Formula и Rich Text Lite. Этот флаг для большинства из
перечисленных полей входит в секцию Display, а для Date/Time и Number в секцию Border Style (стиль
границы поля).
Другая возможность - придать полям внешний вид, к которому мы привыкли в других приложениях
операционной системы, а, именно, прямоугольник с неизменяемыми размерами. За эту возможность
отвечает радиокнопка Native OS style.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
65
Рис. 4.21 Внешний вид полей Notes style и Native OS style в режиме редактирования документа.
Интерфейс клиента Notes.
В режиме чтения документа внешний вид полей с Notes style будет отображаться просто как
обычный текст (т.е. без уголков), а для Native OS style рамка поля останется.
Рис. 4.22 Внешний вид полей Notes style и Native OS style в режиме чтения документа. Интерфейс
клиента Notes.
При работе через Web различий между полями Native OS style и Notes style нет. В браузере
внешний вид полей типа Text определяется тегом <INPUT TYPE=TEXT ...>. На самом деле атрибут TYPE
для таких полей не генерируется, но в настоящей книге мы будем использовать такое написание тега.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
66
Рис. 4.23 Внешний вид полей Notes style и Native OS style в режиме редактирования документа.
Интерфейс браузера.
Для полей типа Native OS style, если его значение не помещается в отведенные рамки поля, то
появление или отсутствие полосы прокрутки (доступна как в режиме редактирования, так и чтения)
определяется значением флага Allow multiple lines (разрешить отображать поле как многострочное) из
секции Display, определенной на второй закладке (Control tab) окна свойств поля.
Флаг Align control's baseline with paragraph's (выровнять поле по опорной линии абзаца) из секции
Style доступен только для полей с установленным свойством Native OS style и позволяет выровнять
содержимое поля по уровню статичного текста (т.е. не выше и не ниже) абзаца, в который входит это поле.
Этот флаг бывает особенно полезен для полей, отображающихся без своих границ.
Рис. 4.24 Действие флага Align control's baseline with paragraph's
Для полей с Native OS style становится доступным секция Size (размер). Секция содержит две пары
полей Width (ширина) и Height (высота). Первое поле каждой пары определяет собственно размер, а
второе - в чем он измеряется. Для ширины второе поле может принимать следующие значения:
• Fixed (Size) (фиксированный размер в сантиметрах). В этом случае ширина поля определяется в
сантиметрах;
• Fit to window (%) (привязать длину поля к размерам окна в процентах). В этом случае ширину поля
можно задавать в процентном отношении к ширине окна клиента Notes. Соответственно, при
изменении размеров окна - будет динамически меняться и ширина таких полей;
• Fixed (Characters) (фиксированный размер в символах). Здесь ширина поля задается в числе
одновременно отображаемых символов поля. Документация на данную опцию очень бедна. Не совсем
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
67
понятно какие шрифты (моноширинные или нет) можно выбирать для таких полей. Из личного опыта,
даже для моноширинных шрифтов указанная опция работает не всегда корректно.
Второе поле-список для определения выводимой высоты поля содержит следующие значения:
• Fixed (фиксированный размер). В этом случае высота поля задается в сантиметрах;
• Dynamic (динамически определять высоту поля). При поднятии флага в случае, когда весь текст в
поле не помещается, высота поля будет меняться от одной строки текста до трех. При дальнейшем
увеличении содержимого поля или сокращении высоты окна клиента Notes, будет появляться полоса
прокрутки. Сразу хотелось бы обратить внимание, что такое поведение поля для Dynamic height
происходит только при поднятом флаге Allow multiple lines, в противном случае высота поля не
зависит от изменения размера окна клиента Notes;
• Proportional (пропорциональный размер). В документации сказано, что при данном выборе высота
поля пропорционально зависит от его ширины. Скорее всего, данное поле имеет, в первую очередь,
отношение к полям типа список (например, Listbox). К сожалению, автору на практике не удалось
добиться от опции указанного результата.
Все опции секций Style и Size действительны только в интерфейсе клиента Notes. В Webприложениях размеры поля можно определить либо на закладке Field Extra HTML окна свойств поля,
либо в объекте HTML Attributes конкретного поля в объектно-событийной панели. Подробнее см.
соответствующие разделы.
На первой закладке для полей всех типов доступна секция Tab Key (порядок обхода полей по
клавише табуляции). В секции присутствуют два поля: Position in tab order (номер позиции поля при
обходе по клавише табуляции) и флаг Give field initial (default) focus (предоставить полю фокус по
умолчанию). Действие этих полей оказывает влияние на обход полей по клавише Tab в режиме
редактирования. Если во всех полях дизайнер не изменял секцию Tab Key, то обход редактируемых полей
по клавише Tab в общем случае будет идти сверху вниз и слева направо. Поле Position in tab order
позволяет изменить этот порядок, выставив положительное числовое значение от 1 до числа полей в
форме. При этом, в панели тела элемента дизайна Domino Designer у поля появится значок, отражающий
значение Position in tab order (см. Рис. 4.25).
Рис. 4.25 Значение номера Position in tab order поля rrr
Поднятый флаг Give field initial (default) focus позволяет установить в режиме редактирования
фокус в указанное поле. Желательно устанавливать такое значение только для одного поля формы.
Вторая закладка (Control tab) окна свойств поля для текстовых полей может содержать, помимо уже
рассмотренных свойств Show field delimiters (показывать ограничители полей) и Allow multiple lines
(разрешить отображать поле как многострочное), еще и поле-список Border style (стиль границ).
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
68
Рис. 4.26 Закладка Control tab для текстового поля с установленным свойством Native OS style
Поле Border style появляется только при выборе Native OS style и содержит следующие значения:
None (границы отсутствуют), Single (одинарная граница) и Inset («утопленная» граница). Значения в
списке сопровождаются достаточно наглядными пиктограммами.
Третья закладка (Advanced tab см. Рис. 4.20) окна свойств поля содержит секцию Help Description
(описание подсказки) с одним единственным полем, куда можно внести текстовую информацию с
пояснениями по данному полю. Поясняющая строка может содержать либо до 70 любых символов
английского алфавита, либо до 55 для двухбайтовых кодировок. Данная строка будет появляться при
получении фокуса полем в режиме редактирования в специальной непрокручиваемой области сразу над
строкой состояния клиента Notes (см. Рис. 4.27). Это свойство поля не поддерживается в Webприложениях.
Рис. 4.27 Отображение Help Description для поля
Секция Field Hint (совет для поля) содержит единственное поле, куда можно внести дополнительную
подсказку. Этот текст появится в поле при создании нового документа, а при вводе значения или переходе
к другому полю, такая подсказка пропадает.
Секцию Multi-Value Options мы уже рассматривали в контексте флага Allow multiple values.
На закладке Advanced tab осталась нерассмотренной одна секция Security Options (параметры
безопасности поля) с полем типа выпадающий список, который позволяет выбирать несколько значений. В
поле представлены следующие значения:
•
Sign if mailed or saved in section (добавлять электронную цифровую подпись к документу или
секции с управляемым доступом, при сохранении документа или отправке его по почте). Электронная
цифровая подпись (ЭЦП) гарантирует, что с момента сохранения или отправки документа по почте,
содержимое его полей с установленным данным свойством не изменилось. Для полей с этим
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
69
свойством и не входящих в секции с управляемым доступом (подробнее см. в разделе 4.17), ЭЦП
формируется в момент отправки по почте или в момент сохранения этого документа, при выполнении
ЭЦП программным путем (например, свойство формы Sign Documents that Use This Form или
использования метода Sign класса NotesDocument), а для полей из секции с управляемым доступом в момент сохранения документа. Данное свойство штатно не поддерживается для Webпользователей;
• Enable encryption for this field (разрешить шифрование для данного поля). Следует обратить
внимание, что поднятие данного флага обычно не ведет немедленно к шифрованию информации из
данного поля. Существуют два механизма шифрования информации из таких полей. Первый - с
помощью ключа(ей) шифрования из ID файла пользователя, второй - открытыми ключами
шифрования для конкретных пользователей. Реально запустить механизм шифрования для полей со
свойством Enable encryption for this field можно, либо через окно свойств документа (подробнее см. в
разделе 18.4.3) на закладке Security tab в секции Encryption Keys (ключи шифрования), либо
программным путем, либо, указав в форме ключи шифрования по умолчанию из ID файла
пользователя в поле Default encryption keys закладки Security tab окна свойств формы (подробнее
см. в разделе 4.1.7). В последнем случае осуществляется немедленное шифрование информации из
указанных полей. Для Rich Text полей присоединенные файлы так же участвуют в процедуре
шифрования. Информация из шифрованных полей присутствует только в специальных
предопределенных полях документа и не присутствует, как это обычно бывает, в самом документе в
одноименном поле. Поэтому информацию из шифрованных полей невозможно вывести в колонке вида
даже для уполномоченных пользователей. Хотелось предупредить разработчиков от одновременного
использования двух механизмов шифрования полей, на ключе из ID файла пользователя и на
открытом ключе - это может приводить к непредсказуемым последствиям. Доступ к информации из
зашифрованных полей получают только те пользователи, которые либо имеют ключ шифрования из ID
файла автора документа (для первого механизма шифрования), либо уполномочены автором (для
второго механизма шифрования). Отменить шифрование может уполномоченный пользователь, либо
через окно свойств документа, либо программным путем. Границы поля с Enable encryption for this
field в интерфейсе Domino Designer выделены красным цветом, в интерфейсе клиента Notes
наблюдается та же картина для полей в стиле Notes style с включенным свойством Show field
delimiters. Свойство Enable encryption for this field штатно не работает в Web-приложениях. Для
включения шифрования программным путем необходимо определить в документе поле с именем:
• SecretEncryptionKeys для шифрования на основании ключей из ID файла пользователя.
Поле должно содержать имена таких ключей. Для возможности расшифровать информацию из
зашифрованных
полей
необходимо
передать
ключ(и)
шифрования
уполномоченным
пользователям. Это можно сделать как с использованием почтовой системы Notes, так и через
файловую систему. Операции создания и распространения ключей шифрования из ID файла
доступны в клиенте Notes через меню File -> Security -> User Security -> Notes Data ->
Documents. Создать новый ключ шифрования в данном диалоге можно по кнопке New Secret Key,
переслать по почте - Mail Secret Key, осуществить экспорт/импорт ключа через файловую систему
- Other Actions. Если в поле SecretEncryptionKeys присутствуют имена нескольких ключей
шифрования, то для расшифровки информации достаточно обладать одним из перечисленных
ключей. Если в документе присутствует поле SecretEncryptionKeys, содержащее имена допустимых
для данного пользователя ключей шифрования, то при сохранении такого документа
автоматически выполняется процедура шифрования информации из полей с флагом Enable
encryption for this field. Стандартная процедура расшифровки информации из указанных полей
происходит в момент открытия документа;
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
70
Рис. 4.28 Закладка Documents окна UserSecurity
• PublicEncryptionKeys для шифрования на основании открытых ключей шифрования
конкретных пользователей. Поле должно содержать имя(на) таких пользователей. Процедуры
шифрования и расшифровки информации из полей Enable encryption for this field аналогичны
описанным в предыдущем пункте.
Вернемся опять на закладку Advanced tab окна свойств поля. Нерассмотренным остался
единственный флаг Must have at least Editor access to use (разрешить редактировать содержимое поля
только пользователям с уровнем доступа Редактор и выше). Смысл поля понятен из названия. Поднятие
данного флага не дает пользователям с уровнем Автора в ACL редактировать содержимое данного поля.
Автор, при создании нового документа с такими полями, может их первоначально заполнить и сохранить
документ, но в последующем редактирование таких полей доступно только пользователям с уровнем
доступа Редактор и выше. Данный механизм не следует рассматривать как средство безопасности, т.к.
блокировка редактирования осуществляется только на уровне формы.
Для полей, расположенных на области размещения (Layout Region, подробнее см. в разделе 4.19.1),
появляются некоторые новые дополнительные свойства, а так же ограничения.
4.3.1.2
Поля типа дата/время - Date/Time
Поля типа дата/время (Date/Time) позволяют сохранять и/или отображать в документе значения
даты и/или времени. Выбор данной опции у поля значительно изменяет интерфейс второй закладки
Control tab окна свойств поля:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
71
Рис. 4.29 Закладка Control tab для полей типа Date/Time
Секция On Display (как отображать значения) содержит одно редактируемое поле Use preferences
from (использовать параметры из) с возможными значениями: User's settings (пользовательские
настройки) и Custom (выборочная установка), и нередактируемое поле Sample (пример), отображающее
как будет выглядеть выбранный формат даты/времени.
Следующие секции Display Data (отображение компоненты даты) и Display Time (отображение
компоненты времени) определяют, как будут отображаться и главное сохраняться значения типа
дата/время. Поднятие флага Display Data заставляет присутствовать в значении поля ненулевой
компоненты соответственно даты, а для Display Time - времени. Рассмотрим подробнее эти секции.
Секция Display Data, при выбранном в Use preferences from значении User's settings, содержит два
редактируемых поля Show (как показывать) и Special (дополнительно). В поле Show можно выбрать одно
из следующих значений: All (выводить все компоненты даты), Only month, day and year (только месяц,
день и год), Only weekday, month and day (только день недели, месяц и день), Only month and year
(только месяц и год), Only month and day (только месяц и день), Only year (только год), Only month
(только месяц), Only day (только день), Only weekday (только день недели). Обратите внимание, что
выбор в поле Show любого значения отличного от Аll и Only month, day and year (т.е. не показывать
какую-либо компоненту времени), ведет к сохранению пропущенной компоненты, вообще говоря, как
наиболее подходящей с точки зрения разработчиков Notes/Domino. Например, если в поле Show стоит
значение Only weekday, month and day, и в самом поле выбрано значение «Вторник, 8 января 2008
года», то сохранено будет значение: «День_недели, 8 января текущего_года».
Поле Special представляет собой список с возможностью множественного выбора из следующих
значений: Show 'today' when appropriate (выводить «сегодня» для текущей даты, в этом режиме так же
отображается «вчера» и «завтра»), Always show 4 digit year (всегда выводить четыре цифры для года),
Show 4 digit year for 2 1 s t century (выводить четыре цифры для лет из 21 века) и Show year only when not
this year (показывать год, только если он не текущий).
Поле Calendar (календарь) предлагает на выбор два значения: Gregorian (григорианский календарь)
и Hijri (Хиджра - исламский лунный календарь). Последний в настоящей книге рассматриваться не будет.
При выборе в поле Use preferences from из секции On Display значения Custom в секциях Display
Data и Display Time появляется целый ряд дополнительных полей:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
72
Рис. 4.30 Закладка Control tab для полей типа Date/Time с выборочной установкой компонент даты и
времени
Для секции Display Data это поля Format (формат), Separators (разделители), Day (день), Month
(месяц), Year (год), Weekday (день недели). Значения этих полей достаточно очевидны (см. Sample), и
зависят от локализации версии клиента Notes. Например, для «русского» клиента значения поля Month
есть м, мм, ммм, мммм, а для «родного» клиента - m, mm, mmm, mmmm. При задании своих
разделителей компонент времени (Separators) для полей с возможностью ввода множественных значений
(Allow multiple values) следует задавать их отличными от разделителей, указанных в поле Separate
values when user enters из секции Multi-Value Options с закладки Advanced tab окна свойств поля. В
противном случае, после ввода может из одного значения даты/времени получиться несколько, состоящих
из компонент введенного значения.
Секция Display Time, при выбранном в Use preferences from значении User's settings, содержит
два редактируемых поля Show (как показывать) и Time zone (часовой пояс). В поле Show можно выбрать
одно из следующих значений: Аll (выводить все компоненты времени), Hours, minutes, and seconds
(часы, минуты и секунды), Hours and minutes (часы и минуты), и Hours only (только часы). Поле Time
zone влияет только на отображение (а не на сохраняемое значение) компоненты времени. В сохраняемом
значении поля даты/времени всегда присутствует часовой пояс (разумеется, при наличии в поле
компоненты времени). В общем случае, значение часового пояса для редактируемых полей определяется
часовым поясом локальной станции. Например, пользователь, работающий на локальной станции с
установленным часовым поясом GMT+7 (Красноярск), создает документ на сервере, расположенном в
часовом поясе GMT+3 (Москва), заносит в поле DateMeeting (дата/время) значение и сохраняет документ.
В этом случае, в поле DateMeeting будет сохранено введенное значение в часовом поясе GMT+7. Для
полей, определяющихся по формулам, базирующимся на системных свойствах документа типа время
создания, доступа, модификации и т.д., значение часового пояса определяется по местоположению БД.
Для локальных БД - по часовому поясу станции, для серверных БД соответственно сервера. Из этих
правил существуют исключения. Вообще говоря, с часовыми поясами существует достаточно много
тонкостей, которые к тому же не всегда достаточно полно отражены в стандартной документации. Приведу
один пример (версия клиента R 7.0 en), в форме присутствует редактируемое поле MyDate с формулой
поля по умолчанию @Created (дата и время создания документа) и с отключенной опцией поля Display
Time (т.е. не отображать время и, соответственно, при сохранении документа не сохранять компоненту
времени). Открываем форму и, не изменяя в поле MyDate значения, сохраняем документ. В поле MyDate
документа будет присутствовать компонента времени с часовым поясом сервера. Открываем опять этот
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
73
же документ на редактирование и вносим в поле MyDate компоненту времени, а затем сохраняем
документ. В результате данных манипуляций компонента времени из поля исчезает.
Вернемся к полю Time zone. Его допустимые значения следующие:
• Adjust time to local zone (приводить время к местному часовому поясу). Отображает время в
соответствии с часовым поясом локальной станции. Например, на локальной станции из GMT+3
значение поля «14:27 ZE7» (т.е. по зоне GMT+7) будет отображено как 10:27;
•
Always show time zone (всегда выводить часовой пояс). Данные предыдущего примера будут
отображены как 14:27 ZE7;
•
Show only if zone not local (выводить часовой пояс только если он отличается от локального).
Предыдущий пример отобразит 14:27 ZE7, а время «14:27 ZE3» отобразится как просто 14:27.
Установка в поле Use preferences from из секции On Display значения Custom ведет к появлению в
секции Display Time двух дополнительных полей Format (формат) и Separator (разделитель). Format
позволяет задавать 24 или 12-часовой формат даты, a Separator разделитель часов минут и секунд. Для
разделителей справедливы замечания, аналогичные описанным в секции Display Data.
Следующая секция On Input (действия при вводе) содержит два флага Require user enter four digit
years (заставлять пользователя вводить четыре цифры для года) и Require user enter alphabetic months
(заставлять пользователя вводить название месяца, а не его порядковый номер).
Последняя секция Border Style (стиль границ поля) с закладки Control tab уже была нами
рассмотрена в контексте текстовых полей.
Обратим теперь внимание на внешний вид полей типа дата/время в интерфейсе клиента Notes. За
это отвечает секция Style с закладки Field Info. При заданной опции Notes style внешний вид поля
аналогичен уже рассмотренному в контексте текстовых полей (см. Рис. 4.21). При опущенном флаге Allow
multiple values вторая радиокнопка в секции Style имеет название Calendar/Time control (стиль
календарь/время). При выборе данной опции и при условии если подняты оба флага Display Data и
Display Time, то внешний вид поля соответствует рассмотренному в контексте текстовых полей значению
Native OS style. Различия начинаются, если поднят только один из флагов Display Data или Display Time.
В этом случае у правой границы поля появляется кнопка, клик по которой, открываются новые элементы
интерфейса, позволяющие с помощью мыши (без использования клавиатуры) задать дату или время. При
поднятом Display Data это календарь (см. Рис. 4.31), а для Display Time - временная шкала (см. Рис.
4.32).
Рис. 4.31 Стиль поля Calendar/Time control при поднятом флаге Display Data
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
74
Рис. 4.32 Стиль поля Calendar/Time control при поднятом флаге Display Time
При поднятом флаге Allow multiple values дополнительные элементы интерфейса поля появляются
только при выборе Native OS style, опущенном флаге Display Data и поднятом Display Time. В этом
случае можно вводить временные интервалы с помощью соответствующей шкалы (см. Рис. 4.33).
Рис. 4.33 Стиль поля Native OS style при поднятых флагах Allow multiple values и Display Time, и
опущенном Display Data
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
75
Остальные варианты стилей поля дата/время соответствуют ранее рассмотренным в контексте
текстовых полей. В Web-приложениях внешний вид поля не зависит от секции Style и определяется тегом
<INPUT TYPE="TEXT" ...>.
Для полей типа дата/время осталась нерассмотренной одна секция Special Event Options
(специальные параметры событий) с закладки Advanced tab, которая появляется при выборе в секции
Style значений Calendar/Time control или Native OS style. Данная секция содержит один флаг Run
Exiting/OnChange event after data/time change (выполнять событие Exiting и onChange после изменения
значения даты/времени). При поднятии флага для полей дата/время с графическими элементами
управления, после смены в поле значения выполняется событие поля onChange и Exiting из объектособытийной панели (подробнее см. в разделе 4.3.7). На выполнение событий Exiting и onChange, по
факту потери полем фокуса, данный флаг не влияет, т.е. эти события безусловно выполняются.
4.3.1.3
Поля типа число - Number
Поля типа число (Number) позволяют сохранять и/или отображать в документе числовые значения.
Выбор данного значения изменяет закладку Control tab окна свойств поля:
Рис. 4.34 Закладка Control tab для числовых полей
Первая секция Number Format (формат числа) определяет общий формат ожидаемых значений, и
может быть одним из следующих: Decimal (десятичные, т.е., общепринятый формат с десятичной точкой),
Percent (процент), Scientific (научный формат) и Currency (денежные значения). Параметры всей
закладки Control tab влияют только на формат отображения (но не хранения) значений. Например, если
мы выберем тип Currency, укажем знак валюты и число знаков после запятой 2. Затем введем значение,
например 32,0145р., то после сохранения документа или пересчета полей увидим в поле значение 32,01р.
Однако, в окне свойств документа значение поля будет 32,0145, и программным способом мы не сможем
определить изначальный формат значения, определенный в свойствах поля. Domino сохраняет числовые
значения в интервале от 2.225Е-308 до 1.798Е308 с 14-ю знаками точности.
Вернемся к секции Number Format. Процентный формат воспринимается как введенное значение,
умноженное на 100. Поэтому, если нужно по смыслу ввести 25%, то это вводится либо как 0,25 (двадцать
пять сотых), либо - 25%. В любом случае сохраняемое значение есть 0,25. Научный формат позволяет
вводить/отображать значения с указанием мантиссы и порядка. Денежные значения можно вводить с
указанием символа валюты.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
76
Секция Decimal places (положение десятичной точки) обычно содержит два поля Fixed
(фиксированное) и Varying (варьируемое). Флаг Varying доступен для форматов Decimal и Percent, при
поднятом значении позволяет отображать числовые данные с плавающей десятичной точкой. При снятии
этого флага (или его отсутствии), возможно установить значение фиксированной десятичной точки в поле
Fixed.
Следует обратить внимание на то, что выбор формата представления чисел с фиксированной точкой
(Fixed) может приводить к ошибкам округления, как при отображении информации в поле, так и в
определенных случаях при сохранении. Например, число -6667731,005 при выборе Fixed и значении 10
для Decimal places будет отображаться как -6667731,0049999998 (однако хранится число именно так как
его ввели). Таких примеров можно привести достаточно много, поэтому разработчику необходимо
аккуратно подходить к параметрам форматирования числовых значений.
Секция Preferences for display formatting (настройки форматирования) содержит три поля Use
preferences from (использовать настройки из), Decimal symbol (разделитель целой и дробной части) и
Thousands separator (разделитель чисел). Первое поле (Use preferences from) предлагает для выбора
одно из двух значений: User setting (пользовательские настройки) и Custom (выборочная установка). При
втором значении (Custom) становятся доступными поля с разделителями. Желательно в случае
поднятого флага Allow multiple values задавать разделители из Decimal symbol и Thousands separator,
не совпадающими с указанными в поле Separate values when user enters из секции Multi-Value Options с
закладки Advanced tab окна свойств поля.
Секция Additional display formatting (дополнительные параметры форматирования) содержит два
флага: Parenthesis when negative (отображать отрицательные значения в скобках) и Punctuated at
thousands (использовать нотацию с разделением тысяч). Смысл флагов понятен из названия.
Секция Currency symbol (символ валюты) становится доступной только при выборе формата
Currency и значения Custom в поле Use preferences from. Секция содержит: поле-список с
предопределенными символами валют, флаг и просто поле Custom (выборочная установка),
позволяющие при поднятии флага в следующее поле ввести символ валюты, поле-список с кодами стран,
флаг Symbol follows number (символ валюты следует за числом) и флаг Space next to number
(вставлять пробел между символом валюты и числом).
В Web-приложениях внешний вид поля определяется тегом <INPUT TYPE="TEXT" ...>. Остальные
секции и опции были рассмотрены в контексте текстовых полей.
4.3.1.4
Поля типа список - Dialog list, Checkbox, Radio button, Listbox и Combobox
Эта группа полей предназначена для выбора значения(ий) из списка:
•
Dialog list (поле - диалоговый список);
•
Checkbox (поле типа флаги);
•
Radio button (поле - радиокнопки);
•
Listbox (поле - список);
•
Combobox (поле - выпадающий список).
Основное различие данных типов состоит в способе их отображения. Базовой секцией для всех
перечисленных типов полей является секция Choices (выбор) с закладки Control tab (см. Рис. 4.35).
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
77
Рис. 4.35 Закладка Control tab для полей типа выбора значений из списка
Первое поле типа выпадающий список определяет, как будет формироваться список выбора.
Доступные значения этого поля следующие:
• Enter choices (one per line) (вводите значения по одному на строку). При этом значении
следующее поле предназначено для ввода значений списка. При поднятом флаге Allow keyword
synonyms из секции Options (см. ниже) значения можно вводить с синонимами (алиасами),
отделяемыми от основного значения символом «|» (вертикальная черта см. Рис. 4.36)
Рис. 4.36 Определение элементов списка с синонимами
В данном случае отображаться в документе по данной форме будет значение до символа «|», а
сохраняться - синоним. Кнопка Sort (сортировать) позволяет упорядочить элементы списка по
отображаемым значениям, а кнопка List Window... (окно списка) - выводит предыдущее поле в отдельном
окне. Опция доступна для всех полей типа список.
•
Use formula for choices (использовать формулу для формирования списка). Позволяет в
следующее поле ввести @-формулу, которая и будет формировать список (например, @DbColumn или
@DbLookup). Кнопка
Formula Window... (окно формул) выводит предыдущее поле в
отдельном окне. Данная опция доступна для всех полей типа список;
• Use Address dialog for choices (использовать диалоговое окно выбора имени(ен) из доступных
адресных книг). Дополнительные параметры не требуются. Данная опция и две последующие
доступны только для полей типа Dialog list, а также для Authors, Names и Readers;
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
78
•
Use Access Control List for choices (использовать диалоговое окно выбора списка управления
доступом текущей БД). Дополнительные параметры не требуются;
•
Use View dialog for choices (использовать диалоговое окно выбора из значений вида). При этом в
секции появляются дополнительные поля: Database (база данных) со списком БД рабочего
пространства, View (вид) со списком видов выбранной БД и Column # (номер столбца вида),
определяющие отображаемые в поле значения;
Следующая секция Options (параметры) содержит ряд флагов:
•
Allow values not in list (разрешать вводить значения невходящие в первоначальный список).
Выбор флага ведет к появлению дополнительного поля в диалоговом окне ввода для Dialog list или
возможности ввода прямо в поле для Combobox. Поле доступно только для Dialog list и Combobox, а
также для Authors, Names и Readers при выборе для Choices значения отличного от None;
•
Look up names as each character is entered (искать имена после ввода каждого символа).
Позволяет, при вводе в поле значений Notes-имен с клавиатуры, осуществлять поиск по адресным
книгам и подстановку подходящих значений. Данная и последующая опции доступны только для полей
типа Dialog list с выбором для Choices значения Use Address dialog for choices, а также для полей
типа Authors, Names и Readers;
•
Look up addresses on document refresh (искать адреса при обновлении документа). Позволяет,
при вводе в поле значений Notes-имен с клавиатуры или выборе из списка, при обновлении документа
(например, по клавише F9), осуществлять поиск по адресным книгам и замену имеющегося в поле
значения на соответствующее значение его e-mail адреса. Обратите внимание, что данная опция
корректно
работает
только
при
явном
обновлении
документа
(клавиша
F9
или
@Command([ViewRefreshFields])). Например, если в форме кроме поля с данной опцией еще есть поле
типа список с установленным флагом Refresh fields on keyword change (см. ниже), то при изменении
значения в последнем поле обновление документа происходит (по крайней мере, обработчики
событий формы Queryrecalc и Postrecalc вызываются), однако, обновления содержимого поля с
флагом Look up addresses on document refresh не происходит;
•
Display entry helper button (отображать кнопку выводящую элементы списка). Позволяет в
отключенном состоянии убрать справа от поля кнопку, выводящую все элементы списка. Доступна для
Dialog list, а также для полей типа Authors, Names и Readers при выборе для Choices значения
отличного от None;
•
Refresh fields on keyword change (обновлять значения полей при изменении текущего значения
поля). При поднятии этого флага смена значений поля вызывает процесс пересчета полей. С версии
R5 корректно работает и в Web-приложениях. Может снизить производительность приложения.
•
Refresh choices on document refresh (обновлять список выбираемых значений при обновлении
документа). Выбор данной опции ведет к обновлению содержимого списка значений для выбора при
пересчете полей в документе. Так же с версии R5 работает в Web-приложениях при поддержке БД в
Web языка JavaScript. Например, в Web-приложении в форме есть два поля Страна и Город. Значение
Города динамически зависит от Страны и выбирается по формуле @DbLookup от значения Страны. В
этом случае у поля Страна должен стоять флаг Refresh fields on keyword change, а у Города Refresh choices on document refresh. Данный механизм реализован через внутренние JavaScript
функции;
•
Allow keyword synonyms (разрешить использование синонимов для ключевых слов). Поднятый
флаг позволяет использовать для значений синонимы, отделяемые от собственно значения
вертикальной чертой. При опущенном флаге в поле будет выводиться значение «как есть» (например,
«Да |1»).
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
79
Вернемся на первую закладку Field Info. В первой секции для полей типа Dialog list и Listbox
доступна опция Allow multiple values. Для остальных полей опция устанавливается автоматически и
недоступна к изменению (Checkbox - установлена, Radio button и Combobox - снята).
Обратимся теперь к внешнему виду рассматриваемых полей. Для почти всех рассматриваемых
типов полей недоступна секция Style, исключение составляют Listbox и Combobox, у которых в секции
Style доступен рассмотренный в контексте Text-полей флаг Align control's baseline with paragraph's. Для
полей типа: Dialog list, Checkbox и Radio button секция Size недоступна, для Listbox - в секции Size
доступны поля Width и Height, а у Combobox - Width и частично Height.
Для полей типа Radio button и Checkbox на закладке Control tab в секции Display появляются
новые элементы интерфейса:
Рис. 4.37 Закладка Control tab для полей типа Radio button и Checkbox
• Number of columns (число колонок). При значении равном 1 радиокнопки/флаги располагаются в
одном столбце по вертикали, при других значениях формируется соответствующее число столбцов.
Значение этого поля поддерживается в Web-приложениях путем генерации тега <BR> в нужных
местах;
• Spacing(%) Across (интервал в % между столбцами по горизонтали). Смысл этого и следующего
поля ясен из названия;
• Spacing(%) Down (интервал в % внутри столбцов по вертикали).
В Notes клиенте внешний вид поля Dialog list, с включенными опциями Show field delimiters и
Display entry helper button, соответствует стандартным «уголкам», как у Notes style, и справа от поля
находится кнопка, раскрывающая список значений. В случае Enter choices (one per line) или Use formula
for choices это выглядит следующим образом:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
80
Рис. 4.38 Внешний вид поля типа Dialog list в клиенте Notes
В диалоговом окне можно выбрать одно или несколько значений (только для Allow multiple values),
а так же при установленном Allow values not in list ввести новое значение в поле New keyword (новое
ключевое слово). Для Use Address dialog for choices и Use Access Control List for choices диалоговое
окно будет соответствовать диалогу выбора из адресных книг и списка управления доступом. А в случае
Use View dialog for choices аналогично @-функции @PickList.
В Web-приложениях работает выбор только для Enter choices (one per line) или Use formula for
choices при выключенной опции Allow values not in list. В этом случае внешний вид поля определяется
тегом <SELECT ...>, в случае Allow multiple values с атрибутом MULTIPLE. Для остальных значений
генерируется тег <INPUT TYPE=TEXT ...>.
Внешний вид в интерфейсе клиента Notes для полей типа Checkbox и Radio button представлен на
Рис. 4.39.
Рис. 4.39 Внешний вид полей типа Checkbox и Radio button
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
81
В Web-приложениях внешний вид полей Checkbox определяется тегом <INPUT TYPE=checkbox ...>,
а для Radio button соответственно - <INPUT TYPE=radio ... >.
Для Listbox полей с установленным флагом Allow multiple values внешний вид поля в интерфейсе
клиента Notes представлен на Рис. 4.40.
Рис. 4.40 Внешний вид полей Listbox
В Web-приложениях внешний вид поля Listbox аналогичен Dialog list.
Поля типа Combobox в интерфейсе клиента Notes соответствуют «выпадающему» списку (см. Рис.
4.41). В Web-приложениях внешний вид поля определяется тегом <SELECT ...>, при опущенном флаге
Allow values not in list, или <INPUT TYPE=TEXT ...> в противном случае.
Рис. 4.41 Внешний вид полей Combobox
4.3.1.5
Поля типа форматированного текста - Rich Text
Поля форматированного текста (Rich Text) могут содержать форматированный текст, графику,
таблицы, гипертекстовые ссылки, кнопки, секции, присоединенные файлы, встроенные объекты,
вычисляемый текст и ряд других объектов. Поля данного типа могут значительно повысить внешнюю
привлекательность приложения, а иногда и функциональность. Следует так же помнить, что Rich Text поля
имеют существенные ограничения на использование их в теле приложения. Их значения, например, не
могут применяться в формулах столбцов видов/папок и в качестве аргументов большинства @-формул.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
82
Первое отличие от ранее рассмотренных типов полей, что Rich Text поля могут быть только
редактируемые и вычисляемые (Editable и Computed). Далее на первой закладке появляется новая
секция Web Access (при доступе через Web) с полем Display (показ), предоставляющим на выбор
следующие возможности:
• Using HTML (использовать HTML). В этом случае внешний вид поля в Web-приложениях
определяется тегом <TEXTAREA ... >;
• Using Java Applet (использовать Java апплет). Поле отображается стандартным Domino апплетом,
представляющим мини-редактор для работы с форматированным текстом;
• Using Best Fit for OS (использовать лучшие параметры подгонки под операционную систему).
Документация на это свойство очень бедна. Из личного опыта на платформе MS Windows, поле с
таким свойством транслируется в браузер IE 6.0 с помощью Active-X, а в Netscape 4.51 - через апплет.
На закладке Control tab окна свойств такого типа поля появляются секции:
• Input (действия при вводе) с флагом Pressing tab key moves to next field (нажатие клавиши Tab
осуществляет переход к следующему полю). Опущенный флаг позволяет при вводе внести в поле
символ табуляции, поднятый флаг при нажатии клавиши Tab перемещает фокус ввода в следующее
редактируемое поле формы;
• Storage (действия при сохранении) с флагом Store contents as HTML and MIME (сохранять
содержимое поля в формате HTML и MIME). Поднятие флага в клиенте Notes ведет к сохранению
параметров форматирования поля в виде тегов HTML, кроме этого в документе появляется
предопределенное поле MIME_Version со значением, соответствующим поддерживаемой версии
протокола MIME. В браузере параметры форматирования поля сохраняются в формате HTML + MIME
не зависимо от значения флага Store contents as HTML and MIME, за исключением случая, когда для
поля Display выбрано значение Using HTML. При таком выборе формат поля как в клиенте Notes, так
и в браузере определяется флагом Store contents as HTML and MIME.
4.3.1.6
Поля типа «облегченного» форматированного текста - Rich Text Lite
Поля типа «облегченного» форматированного текста (Rich Text Lite) предназначены как для
введения ограничений на компоненты, вводимые в это поле из интерфейса клиента Notes, так и для
удобства ввода этих компонент. Например, для конкретного поля типа Rich Text Lite можно запретить
вводить в него присоединенные файлы и/или OLE-объекты. Обратите внимание, что запрет «действует»
только на уровне интерфейса клиента Notes, т.е. программным путем (например, через LotusScript) можно
ввести в это поле любые допустимые для Rich Text полей компоненты.
Поля Rich Text Lite могут быть только редактируемым (Editable), а закладка Control tab окна их
свойств выглядит следующим образом:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
83
Рис. 4.42 Закладка Control tab свойств поля типа Rich Text Lite
Секция Limit Input (ограничения при вводе) как раз и определяет допустимые для данного поля
компоненты, которые определяются в поле Only allow (разрешено только) рассматриваемой секции.
Указанное поле предлагает на выбор следующие значения: Photos (фотографии), Graphics (графические
изображения), Shared Images (графические ресурсы), Attachments (присоединенные файлы), Views
(встроенные виды), Data Picker (Notes-объект выбора даты), Shared Applets (апплеты как ресурсы), Text
(текст), Ole Objects (OLE-объекты), Calendar (Notes-объект календарь), Inbox (одноименная папка
почтового ящика, как встроенный вид), Links (ссылки), Help (подсказка) и Clear (очистка поля). В
интерфейсе клиента Notes справа от поля появляется комбинированная кнопка, состоящая из
определенной пиктограммы и стрелки вниз:
Рис. 4.43 Внешний вид полей Rich Text Lite в интерфейсе клиента Notes
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
84
Клик по стрелке вниз позволяет выбрать из контекстного меню тип компоненты для вставки в поле.
Клик по пиктограмме выполняет обычно операцию вставки компоненты, а для текста (Text) - определить
параметры шрифта, для Clear - очистить содержимое поля и для Help - выдать подсказку к
соответствующему типу компоненты.
Вернемся в секцию Limit Input окна свойств Rich Text Lite полей. В ней остались нерассмотренными
два поля:
• First display (отображать первым). Поле позволяет определить тип компоненты (и соответственно
пиктограмму), которая будет отображаться в первый момент открытия документа на редактирование.
Хотя в поле представлен весь список компонент, выбирать можно только из значений, отмеченных в
поле Only allow;
• Field help (подсказка для поля). Содержимое этого поля выводится в самом поле (аналогично
действию уже рассмотренной опции Field Hint) при выборе в контекстном меню значения Help for
тип_компоненты. В документации сказано, что с помощью этого поля можно создавать контекстно
зависимые от типа_компоненты подсказки. Для этого надо значения различных контекстов
отделять друг от друга символом вертикальной черты, а если какую-либо подсказку требуется
опустить, то вместо нее следует ввести пустую строку, обрамленную символами вертикальной черты
(например,
«Photos|Graphics|Shared
lmages|Views|Data
Picker|Shared
Applets|Text|Ole
Objects|Calendar|lnbox»). Однако из личного опыта автора, можно сказать, что эта конструкция
работает не вполне корректно. Начиная с третьего значения этой строки, осуществляется сдвиг
отображаемых значений подсказки (т.е., например, для Help for Text выводится значение,
соответствующее Calendar и т.д.).
Еще одно замечание про поля типа Rich Text Lite. На закладке Control tab окна их свойств
отсутствует секция Storage с флагом Store contents as HTML and MIME, т.е. содержимое таких полей
нельзя сохранять в формате HTML и MIME.
4.3.1.7
Поля Authors, Names, Readers
Перейдем к рассмотрению следующей группы типов полей (Authors, Names, Readers). Сначала
рассмотрим их функциональность:
•
Authors (поле типа Авторы). Предназначено для ограничения доступа к документам, содержащим
такие поля. Используется совместно с ACL БД. Само поле может содержать список значений имен,
групп пользователей и серверов, а так же ролей, определенных в ACL текущей БД. Данный тип полей
влияет только на доступ к информации на уровне Author (автора) согласно ACL БД. Если
пользователь имеет доступ к БД на уровне Author, но в документе нет ни одного поля типа Authors, то
такой пользователь не сможет редактировать документы даже те, которые он сам создал. Если же
поле типа Authors присутствует в документе, то модифицировать данный документ могут только те
пользователи, которые имеют уровень доступа Author к БД в ее ACL, и, имя которых входит в поле
Authors явно, на уровне группы, или назначено на соответствующую роль. Для работы в локальных
БД механизма ролей и групп следует не забывать о поднятии флага Enforce a consistent Access
Control List across all replicas (распространять список управления доступом на все реплики текущей
БД) из ACL БД (см. раздел 18.5). Значения полей типа Authors для их правильной работы должны
быть в формате полного иерархического имени, например, Evgeny V. Polyakov/lnterTrustCorp/SU, а не
Short Name (короткое имя), которое в данном случае Epolyakov. Как уже упоминалось, поля типа
Authors влияют только на уровне доступа Author из ACL БД, т.е., пользователи с уровнями доступа
Editor (редактор) и выше могут редактировать все документы, не взирая на поля Authors, а для
пользователей с уровнем доступа Reader (читатель) и ниже, даже в случае присутствия в полях
Authors значения конкретного пользователя, это не влечет к возможности данного пользователя на
редактирование такого документа. Если полей типа Authors в документе несколько, то доступ
определяется объединением содержимого таких полей. Для БД, лежащих на сервере, изменение
значений полей Authors и Readers может быть так же вызвано серверной задачей Administration
Process. Эта задача (если в ACL БД установлена соответствующая опция, подробнее см. в разделе
18.5.4), при процедуре удаления или переименования пользователя, проверяет наличие вхождения
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
85
старых имен (до удаления/переименования) в поля типа Authors и Readers и модифицирует их в этом
случае;
•
Names (поле типа Имена). Предназначено для хранения и отображения Notes имен
пользователей. Например, может быть использовано для определения имени получателя документа
при отправке его по почте;
•
Readers (поле типа Читатели). Предназначено для ограничения доступа к документам,
содержащим такие поля. Используется совместно с ACL БД. Документы, содержащие такие поля,
будут не доступны тем пользователям, имена которых не присутствуют в полях Readers и/или в
Authors (явно или в виде групп и ролей), и/или явно не определены в Default read access for
documents created with this form (доступ на чтение к документам, созданным по данной форме) на
закладке Security свойств текущей формы (см. раздел 4.1.7). При программном обращении (например,
при сборе коллекции документов без использования индекса видов) к БД может случиться ситуация,
когда документы с ограничением доступа через поля Readers могут быть «почти» видны
неуполномоченному пользователю. Под «почти» здесь понимается, что в коллекции такой документ
присутствовать будет, но при попытке обращения к его содержимому может возникнуть ошибка (такие
документы можно определить в LotusScript по нулевому значению даты создания). Так же в виде (если
это не запрещено разработчиком, подробнее см. в разделе 6.3.5) могут быть видны «пустые»
категории, т.е. те которые содержат документы, недопустимые для просмотра данным пользователем.
Если полей типа Readers в документе несколько, то доступ определяется объединением содержимого
таких полей. Поля Readers, аналогично Authors, могут быть изменены автоматически серверной
задачей Administration Process (см. комментарии к полям Authors).
С точки зрения свойств таких полей, они очень похожи на поля типа Dialog list. Аналогично
последнему, у Authors, Names и Readers на второй закладке окна свойств присутствуют секции Choices с
выпадающим списком, содержащем значения: None (без списка выбора), Use Address dialog for choices,
Use Access Control List for choices и Use View dialog for choices. Последние три значения уже были
рассмотрены нами в контексте Dialog list. Секция Options содержит флаги (не все из них доступны), так
же рассмотренные в Dialog list. Единственное отличие на уровне свойств поля для Authors, Names,
Readers по отношению к Dialog list возникает в секции Display (закладка Control tab), где появляются
следующие элементы интерфейса:
• флаг Show online status (показывать статус, находящихся в онлайне пользователей). Данный флаг
имеет отношение к встроенному с версии R 6.5 механизму Lotus Instant Messaging, который позволяет
из клиента Notes обращаться к серверам Sametime. Поднятый флаг разрешает в окне выбора имен
пользователей отобразить их статус по отношению к онлайн. Отображение статуса идет только в
режиме чтения документа. Поднятие флага делает доступными следующее поле и кнопку;
Рис. 4.44 Отображение online-cmamyca пользователей в клиенте Notes
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
86
• поле Contact List Group Label (групповой заголовок контактного листа) и кнопка Formula (@формула) позволяют определить динамическое имя группы для Lotus Instant Messaging,
появляющееся в контактном списке при открытом документе.
Пример. В поле MyGroup типа Names установлены свойства Allow multiple values, Show online
status, а для поля Contact List Group Label определена формула:
"Новая группа от " + @Text(@Today)
Тогда если в поле MyGroup документа определены какие-либо значения Notes-имен, то при открытом
документе эти значения будут появляться в объекте Instant Contact List как динамическая группа с
заголовком из поля Contact List Group Label.
Рис. 4.45 Объект Instant Messaging Contact List с динамической группой
Если в клиенте Notes открыто несколько таких документов, то динамическая группа строится на
основании одного из этих документов.
Внешний вид полей Authors, Names и Readers в интерфейсе клиента Notes опять же соответствует
Dialog list, а в Web-приложениях определяется тегом <INPUT TYPE="TEXT" ...>.
4.3.1.8
Поля типа «пароль» - Password
Поля типа «пароль» (Password) обычно используются для ввода паролей. При внесении
информации в такое поле, вводимые символы заменяются на звездочки. Стандартные средства таких
полей не обеспечивают их дополнительной безопасности, т.е. содержимое этого поля можно просмотреть,
например, в окне свойств документа (подробнее см. в разделе 18.4.2). Разработчик должен сам
заботиться о безопасности таких полей (например, изменять введенное значение поля, используя
формулы преобразования полей подробнее см. в разделе 4.3.7). Поля такого типа могут быть только
редактируемые, и кроме этого, у них автоматически устанавливается свойство Enable encryption for this
field из секции Security Options с закладки Advanced tab. Внешний вид поля в Web-приложениях
определяется тегом <INPUT TYPE=password ...>.
4.3.1.9
Поля типа «тайм-зона» - Time zone
Поля типа «тайм-зона» (Time zone) предназначены для хранения, отображения и вычисления
значений часовых поясов, имеющих отношение к параметрам дата/время. Сохраняемые в таких полях
значения имеют канонический формат. Например, для часового пояса Москвы значение поля может иметь
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
87
следующий вид: «Z=-3$DO=1$DL=3 -1 1 10 -1 1$ZX=52$ZN=Russian». На программном уровне можно
оперировать значениями таких полей. Например, для преобразования значений Time zone полей к тексту
используется функция @TimeZoneToText.
Для полей типа Time zone не допускаются множественные значения (Allow multiple values), в
секции Style доступен только флаг Align control's baseline with paragraph's, а в секции Size доступны
только первые поля из пар Width и Height.
Внешний вид Time zone поля в интерфейсе клиента Notes представлен на Рис. 4.46.
Рис. 4.46 Внешний вид Time zone поля в клиенте Notes
В Web-приложения Time zone поля транслируются тегом <SELECT ...>, а конкретные значения в
соответствующие теги <OPTION ...>.
4.3.1.10
Поля типа «выбор цвета» - Color
Поля типа «выбор цвета» (Color) предназначены для хранения, отображения и вычисления
значений, которые могут использоваться для определения цветовой гаммы в рамках приложения
(например, значение такого поля может использоваться для «раскраски» строк вида). Сохраняемые в
таких полях значения имеют шестнадцатеричный текстовый RGB формат. Например, значение «чистого»
красного цвета соответствует сохраняемой строке "00FF0000", «чистого» зеленого - "0000FF00", а
«чистого» синего - "000000FF". Обратите внимание, что первые два байта любых значений типа Color
всегда равны "00".
Для полей типа Color не допускаются множественные значения (Allow multiple values), в секции
Style доступен только флаг Align control's baseline with paragraph's, а в секции Size доступны только
первые поля из пар Width и Height.
Внешний вид Color поля в интерфейсе клиента Notes представлен на Рис. 4.47.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
88
Рис. 4.47 Внешний вид Color поля в клиенте Notes
В Web-приложения Time zone поля транслируются тегом <INPUT TYPE=TEXT ...>.
4.3.1.11
Поля типа «формула» - Formula
Поля типа «формула» (Formula) представляют достаточно специфичный тип, появившийся в
Lotus/Domino R5 и использующийся в БД подписки на рассылку (HEADLINE.NSF). В этом контексте поле
определяет критерий отбора документов, получаемых по подписке. Более детальное рассмотрение полей
типа Formula выходит за рамки настоящей книги.
4.3.2
Трансляция полей в Web
В заключение настоящего параграфа еще раз вернемся к трансляции полей в HTML для Webприложений. В зависимости от параметров поля генерируются следующие теги:
•
при Туре равном Dialog list, опущенном флаге Allow values not in list и значении Choices либо
Enter choices (one per line), либо Use formula for choices, внешний вид поля определяется тегом
<SELECT ...>, а при поднятом флаге Allow multiple values в <SELECT ...> добавляется атрибут
MULTIPLE;
•
для Туре = Checkbox генерируется тег <INPUT TYPE=checkbox ... >;
•
для Туре = Radio button генерируется тег <INPUT TYPE=radio ... >;
•
для Туре = Listbox генерируется тег <SELECT ...>. При поднятом флаге Allow multiple values
добавляется атрибут MULTIPLE;
•
для Туре = Combobox при опущенном флаге Allow values not in list генерируется тег <SELECT>
•
для Type = Rich Text или Rich Text Lite при Display равном Using HTML генерируется тег
<TEXTAREA ... >. Если Display = Using Java Applet, то поле отображается стандартным апплетом;
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
89
•
для Type = Password генерируется тег <INPUT TYPE=password ...>;
•
для Type = Time zone генерируется тег <SELECT ...>, а конкретные значения часовых поясов
передаются в соответствующие теги <OPTION ...>.;
•
для остальных значений генерируется тег <INPUT TYPE=TEXT ...>.
При установленном флаге формы Generate HTML for all fields (см. раздел 4.1.2) для «скрытых»
полей любых типов (исключая Formula) генерируется тег INPUT с атрибутом TYPE=hidden. Наличие у
поля формулы значения по умолчанию приводит к записи вычисленного значения этой формулы в атрибут
тега VALUE.
4.3.3
Font tab - параметры шрифтов
На закладке
Font tab (шрифты) представлены параметры шрифта, используемого для
отображения текста в пределах поля. Аналогичные закладки есть и у других элементов дизайна
(например, статичный текст или столбец вида).
Рис. 4.48 Закладка Font tab окна свойств поля
Поля Font (шрифт), Size (размер), Style (стиль), Color (цвет) и Background (цвет фона) определяют
соответствующие характеристики используемого шрифта. Последнее поле (Background) появляется
только для Native OS style полей и позволяет определить цвет фона поля в интерфейсе клиента Notes. В
Web-приложения данный параметр не транслируется. Поле Style позволяет выбрать сразу несколько
вариантов начертания. Например, Bold (полужирный) и Italic (наклонный). Размер шрифта можно
поменять как в поле со списком значений, так и ввести недостающее значение с клавиатуру в поле,
расположенное под списком значений.
В Web-приложениях изменений значения параметров данной закладки отражается в генерируемых
HTML страницах. Если используются параметры, отличные от значений по умолчанию, то для Font, Size и
Color перед тегом собственно поля генерируется тег <FONT ...>. Значения параметров передаются: для
Font в атрибут тега FACE, для Size и Color в одноименные атрибуты. Сразу за тегом собственно поля
следует закрывающий тег </FONT>. Параметр Style передается в Web собственными тегами (например,
наклонный шрифт тегом <l>, полужирный - <В> и т.д.). Аналогично за тегом поля следуют закрывающие
теги для выбранных начертаний.
Нередки случаи, когда параметры шрифтов из Domino в Web не передаются. Например, у текста,
куда входит и текущее поле, установлено свойство Pass-Thru HTML (передавать как HTML) или выбран
стиль абзаца HTML. При этом тегов, относящихся к шрифту, в HTML не генерируется. По мнению автора,
если Вам надо поменять параметры шрифта поля, то для этого лучше всего подходят таблицы каскадных
стилей. Например, передать полю через закладку HTML значение класса из CSS.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
90
4.3.4
Paragraph Alignment - параметры «выравнивания» абзаца
Закладка
Paragraph Alignment (параметры выравнивания абзаца) содержит параметры для
настройки внешнего вида абзаца текста (такие как выравнивание, межстрочные интервалы и т.д.).
Аналогичная закладка есть у свойств текста.
Рис. 4.49 Закладка Paragraph Alignment окна свойств поля
В первой строке закладки под названием Alignment (выравнивание) присутствуют пять интуитивнопонятных кнопок. Они определяют выравнивание абзаца соответственно по левому краю, по центру, по
правому краю, по ширине и без выравнивания. В Web-приложениях значения, соответствующие
выравниванию по центру и по правому краю, приводят к генерации тега <DIV ...>, обрамляющего абзац с
текущим полем. Само значение выравнивания передается в атрибут ALIGN тега <DIV ...>.
Вторая строка окна First line («красная» строка) содержит три кнопки, определяющие внешний вид
«красной» строки. При выборе правых двух кнопок появляется дополнительное поле. Для значения
это поле Indent (внутренний отступ), а для
соответственно Outdent (внешний отступ). Приношу
извинения за терминологию, но как это выглядит - наглядно демонстрируют иконки. В этих полях можно
определить величину отступа в сантиметрах. Параметр First line не влияет на Web-приложения.
Поле-список List (список) позволяет определить внешний вид элементов списка как маркированных,
так и нумерованных. В Web-приложениях на любое значение, отличное от None, генерируется парный тег
<UL> (а для маркированных списков еще генерируется тег <LI>).
Секция Spacing (межстрочные интервалы) содержит три поля типа список: Interline (интервалы
внутри абзаца), Above (перед абзацем) и Below (после абзаца). Смысл полей понятен из названия. В
Web-приложениях значения полей Above и Below отличные от Single (одиночный интервал), меняют
внешний вид HTML страниц. Для Above текущий абзац оформляется тегом <Р>, а для Below тегом <Р>
оформляется следующий абзац. Если у текущего абзаца выбрано в Below значение Double (двойной
интервал), а у последующего абзаца тоже значение стоит в Above, то на HTML странице между
соответствующими абзацами появляются два тега <BR>. Остальные комбинации параметров Above и
Below дополнительных тегов не генерируют.
По мнению автора, использование в Web-приложениях параметров с закладок Font tab и Paragraph
Alignment как в свойствах поля, так и статичного текста, нежелательно. Тем более, что всех последствий
использования рассмотренных параметров можно добиться другими средствами (например, прямой
передачей HTML кода через свойство Pass-Thru HTML).
4.3.5
Paragraph Hide When - параметры «скрытия» абзаца
Закладка
Paragraph Hide When (когда «скрывать» абзац) содержит достаточно большой набор
полей, позволяющий гибко определять режимы скрытия/показа абзаца. Закладка имеет отношение ко
всему абзацу, а не только к полю.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
91
Рис. 4.50 Закладка Paragraph Hide When окна свойств поля
Первая секция Hide paragraph from (скрывать абзац для) содержит три флага: Notes R4.6 or later
(клиента Notes версии R4.6 и выше), Web browsers (браузера) и Mobile (мобильного клиента, например,
«наладонник»).
В интерфейсе клиента Notes скрытие абзаца с полями посредством поднятия флага Notes R4.6 or
later не является дополнительной мерой безопасности. Значение таких полей можно всегда просмотреть
через окно свойств документа. Эти поля предназначены для хранения (возможно и временного, как в
случае с Computed for display) значений внутренних данных, необходимых для функциональности
приложения. Разработчики имеют возможность программно оперировать значениями таких полей.
Поднятие флага Web browsers ведет к тому, что в интерфейсе браузера Domino при генерации
HTML страницы обычно не создает для таких полей соответствующих тегов. Под термином «обычно»
здесь понимается то, что у формы не установлен флаг Generate HTML for all fields (см. раздел 4.1.2). В
противном случае все скрытые средствами Notes поля (исключая Formula) будут присутствовать на
HTML-странице в виде тега INPUT с атрибутом TYPE=hidden (справедливо даже для Rich Text полей).
Следующая секция Hide paragraph when document is (скрывать абзац, когда документ находится в
режиме) содержит следующие флаги: Previewed for reading (чтения в панели предварительного
просмотра), Opened for reading (чтения), Printed (печати), Embedded («встроенного» документа),
Previewed for editing (редактирования в панели предварительного просмотра), Opened for editing
(редактирования), Copied to the clipboard (копирования в буфер обмена). Смысл полей, исключая
Embedded, понятен из названия. Панель предварительного просмотра документов (Preview pane) была
рассмотрена в разделе 2.3.5. Опция Embedded «скрывает» абзац при показе его во «встроенном»
редакторе (Embedded Editor, подробнее см. раздел 4.22). Другими словами, при отображении документа
во «встроенном» редакторе, если в форме, по которой он был создан, у определенного абзаца поднят
флаг Embedded, то этот абзац не будет показываться во «встроенном» редакторе.
В Web-приложениях корректно работают флаги Opened for reading и Opened for editing.
Следующая секция и одноименное поле Hide paragraph if formula is true (скрывать абзац, если
формула возвращает значение истина) позволяют «скрыть» абзац для всех режимов документа, в
зависимости от возвращаемого значения формулы из нижеследующего поля. Например, мы хотим скрыть
абзац от пользователей, не назначенных в ACL БД на роль [Admin]. В этом случае формула скрытия
абзаца может иметь вид: @lsNotMember("[Admin]";@UserRoles). He забывайте, кроме внесения в
соответствующее поле самой формулы скрытия абзаца, еще и поднимать флаг Hide paragraph if formula
is true. Кнопка
Formula Window (окно для формулы) выводит поле с формулой скрытия в
отдельном окне.
Флаг Hide paragraph if formula is true применим и для Web-приложений.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
92
4.3.6
Field Extra HTML - дополнительные HTML-параметры поля
Закладка
Field Extra HTML (дополнительные HTML-параметры поля) позволяет определить
ряд фиксированных (а также дополнительных) атрибутов тега поля <INPUT ...>, <SELECT ...>,
<TEXTAREA ...> или <APPLET ...>.
Параметры с этой закладки оказывают влияние, в первую очередь, на Web-приложения. В момент
генерации HTML-страницы значения из полей закладки передаются в соответствующие атрибуты тега
поля <INPUT ...>, <SELECT ...>, <TEXTAREA ...> или <APPLET ...>. Для всех полей, за исключением
Other (дополнительно), не нужно указывать значения в кавычках, даже если этого требует синтаксис
(Domino это сделает за Вас). Например, если необходимо передать тегу поля атрибут ID со значение
"My_ld", то это можно сделать, указав в поле ID значение My_ld без кавычек. При просмотре кода,
сгенерированной Domino HTML-страницы, мы увидим в теге, например <INPUT ...>, атрибут ID="My_ld".
Для Rich Text полей со свойством Using Java Applet значения параметров из полей закладки будет
передано в тег <APPLET ...>.
Рис. 4.51 Закладка Field Extra HTML окна свойств поля
Теперь несколько слов о функциональном предназначении полей с закладки Field Extra HTML. Поле
Id предназначено для определения атрибута ID (идентификатор). В дальнейшем можно сослаться на
такой объект по ID, например, из JavaScript. Class (класс) определяет имя класса из таблицы каскадных
стилей (CSS). Style (стиль) определяет атрибут STYLE, который является атрибутом стиля «по месту» (inline style). Значение поля Title (заголовок) передается в одноименный атрибут (его можно рассматривать,
как аналог атрибута ALT). Из поля Other (дополнительно) значения передаются в тег поля без изменений.
Например, можно передать значение SIZE="10". Поле Name (имя) недопустимо для редактирования и
имеет значение, соответствующее имени поля с закладки Field Info окна свойств поля.
В секции Access Name (имя для доступа) выводится ярлык поля (field label), т.е. статичный текст,
расположенный слева от поля, он также может быть расположен в ячейке таблицы левее
рассматриваемого поля.
В интерфейсе клиента Notes значения параметров с закладки Field Extra HTML напрямую не
оказывают влияние на поведение приложения. Однако, если поместить поле в ячейку таблицы или слой
(Layer) и задать параметр Class ячейки или слоя равным значению класса из подключенной к форме
таблицы каскадных стилей, то параметры форматирования CSS будут применяться к полю и в клиенте
Notes.
4.3.7
Объекты и свойства поля, определяемые в объектно-событийной панели
После создания поля в объектно-событийной панели на закладке Objects появляется ряд объектов,
имеющих отношение к полю. По типу используемого программного кода их условно можно разделить на
три группы, как имеющие отношение к @-формулам, к LotusScript и JavaScript.
Первая группа для редактируемых полей может содержать код только на языке @-формул и
содержит следующие объекты:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
93
•
Default Value (значение по умолчанию) предназначена для вычисления значения поля по
умолчанию. Формула должна возвращать значение пригодное для использования в рамках текущего
поля, т.е. если поле числовое, то формула должна вернуть значение, которое можно преобразовать к
числу. Формула работает в клиенте Notes и браузере. Например, @Date(@Adjust(@Now; 0; 0; 30; 0; 0;
0)). Как, когда и в какой последовательности происходит вычисление формул полей, будет
рассмотрено в следующем параграфе;
•
Input Translation (формула преобразования введенного значения). Формула должна возвращать
значение, соответствующее типу поля. Формула работает в клиенте Notes и браузере. Например,
@Trim(@ThisValue);
•
Input Validation (формула проверки введенного значения). Формула должна возвращать значение
1 (True) для успешной проверки введенного значения и 0 (False) - в противном случае. Формула
корректно работает в клиенте Notes. В большинстве браузеров при генерации ошибки функцией
@Failure, ее параметр выдается на отдельной HTML-странице. Например, @lf(@lsNumber( @ThisValue
) & @ThisValue > 0; @Success; @Failure( "Цена должна быть положительна"));
•
Input Enabled (доступность поля для ввода). Данный объект присутствует в объектно-событийной
панели для всех типов редактируемых полей, исключая Rich Text и Rich Text Lite. Формула
применима только для полей с установленной опцией Native OS style. Для таких полей, если формула
возвращает значение 0 (False), то поле недоступно для ввода, любое другое возвращаемое значение
делает поле доступным для ввода. Формула корректно работает только в клиенте Notes. Например,
Visa = "Yes". Начиная с 7-й версии, формула Input Enabled частично поддерживается и для Notes
style полей. При значении 0 (False);
•
HTML Attributes (HTML атрибуты поля). Формула передает возвращаемое ею значение в тег поля
<INPUT ...>, <SELECT ...>, <TEXTAREA ...> или <APPLET ...>. Например, "SIZE=\"30\"" или
{SIZE="30"}.
Для вычисляемых полей (Computed, Computed for display и Computed when composed) вместо
формулы Default Value присутствует формула Value, которая определяет значение вычисляемого поля.
При этом формулы Input Translation, Input Validation и Input Enabled отсутствуют.
Следующая группа объектов изначально предназначена для размещения кода на JavaScript. Они
представляют собой функции-обработчики событий поля в соответствии с объектной моделью браузера и
клиента. Обратите внимание, что не все обработчики событий поддерживаются в различных браузерах
(подробнее это описано в документации). Кроме этого, независимо от тега, генерируемого для поля, набор
обработчиков событий остается один и тот же (что в общем-то не совсем правильно):
•
onBlur (обработчик, выполняющийся при потере полем фокуса). Согласно модели событий,
принятой с версии R6, рекомендуется использовать onBlur вместо Exiting в клиенте Notes.
Допустимыми значениями в группе полей Run могут быть для Client - LotusScript, JavaScript и
Common JavaScript, а для Web - JavaScript и Common JavaScript;
•
onChange (обработчик, выполняющийся при изменении значения поля после потери объектом
фокуса). Допустимыми значениями в группе полей Run могут быть для Client - LotusScript,
JavaScript и Common JavaScript, а для Web - JavaScript и Common JavaScript;
•
onClick (обработчик, выполняющийся при однократном клике мыши). Событие поддерживается
только в Web-приложениях. В группе полей Run присутствуют неизменяемые значения Web и
JavaScript;
•
onDblClick (обработчик, выполняющийся при двойном клике мыши). Событие поддерживается
только в Web-приложениях;
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
94
•
onFocus (обработчик, выполняющийся при получении объектом фокуса). Согласно модели
событий, принятой с версии R6, рекомендуется использовать onFocus вместо Entering в клиенте
Notes. Допустимыми значениями в группе полей Run могут быть для Client - LotusScript, JavaScript и
Common JavaScript, а для Web - JavaScript и Common JavaScript;
•
onKeyDown (обработчик, выполняющийся при нажатии на клавишу клавиатуры). Событие
поддерживается только в Web-приложениях;
•
onKeyPress (обработчик, выполняющийся при нажатии или отпускании после нажатия на клавишу
клавиатуры). Событие поддерживается только в Web-приложениях;
•
onKeyUp (обработчик, выполняющийся при отпускании после нажатия на клавишу клавиатуры).
Событие поддерживается только в Web-приложениях;
•
onMouseDown (обработчик, выполняющийся
поддерживается только в Web-приложениях;
при
нажатии
на
кнопку
мыши).
Событие
•
onMouseMove (обработчик, выполняющийся, когда указатель мыши перемещается в рамках
объекта). Событие поддерживается только в Web-приложениях;
•
onMouseOut (обработчик, выполняющийся, когда указатель мыши уходит с объекта). Событие
поддерживается только в Web-приложениях;
•
onMouseOver (обработчик, выполняющийся, когда указатель мыши попадает на объект). Событие
поддерживается только в Web-приложениях;
•
onMouseUp (обработчик, выполняющийся при отпускании после нажатия на кнопку мыши).
Событие поддерживается только в Web-приложениях;
•
onSelect (обработчик, выполняющийся по завершению процесса выделения текста). Событие
поддерживается только в Web-приложениях;
Следующая группа объектов предназначена для размещения кода только на LotusScript.
•
(Options) (параметры) предназначен для объявления неисполняемых операторов на уровне
объекта поле (подробнее см. разделы 4.2.1 и 4.2.2);
•
(Declarations) (описания) предназначен для объявления переменных и констант на уровне
объекта поле;
•
Entering (обработчик события, возникающего по факту получения полем фокуса). Объект
присутствует в объектно-событийной панели только для редактируемых полей. Согласно модели
событий, принятой с версии R6, рекомендуется использовать onFocus вместо Entering в клиенте
Notes;
•
Exiting (обработчик события, возникающего по факту потери полем фокуса). Объект присутствует
в объектно-событийной панели только для редактируемых полей. Согласно модели событий, принятой
с версии R6, рекомендуется использовать onBlur вместо Exiting в клиенте Notes;
•
Initialize (инициализация) - обработчик события по факту создания объекта поле;
•
Terminate (завершение) - обработчик события по факту выгрузки объекта поле из памяти. Реально
происходит при закрытии формы.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
95
Проверить последовательность возникновения данных событий для любых объектов формы можно с
помощью функции Messagebox.
4.3.8
Порядок выполнения формул и событий полей
Для редактируемых полей большинства типов (за исключением Rich Text и Rich Text Lite) в
объектно-событийной панели присутствуют четыре объекта, предназначенных для размещения @формул: Default Value (значение поля по умолчанию), Input Translation (преобразование значения поля),
Input Validation (проверка значения поля) и Input Enabled. Кроме этого, у редактируемых полей
присутствуют обработчики событий по факту получения полем фокуса (onFocus) и по факту его потери
(onBlur). Аналогичные обработчики Entering и Exiting из рассмотрения исключим, как устаревшие. Для
вычисляемых полей присутствует только формула Value (значение поля). Попробуем представить в виде
таблицы порядок выполнения формул и событий полей в интерфейсе клиента Notes, в зависимости от
внешних условий:
Редактируемое
не Rich Text
Чтение
Редактирование
Автопересчет
полей 1)
Пересчет полей
+
Input Translation
3)
+
+
1)
3)
Input Validation
3)
4)
4)
1)
3)
Input Enabled
+
+
1)
+
onFocus
5)
6)
5)
7)
Default Value
+
onFocus
5)
2)
6)
onBlur
Вычисляемое
не Rich Text без
Compute After
Validation
2)
Default Value
onBlur
Редактируемое
Rich Text
2)
Формула или событие
Создание
Тип поля
Сохранение
Режимы работы с документом
Value
2)
5)
7)
8)
+
+
1)
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
2)
9)
96
11)
11)
Вычисляемое
не Rich Text и
Compute After
Validation
установлено
Value
10)
Вычисляемое
Rich Text
Value
+
Вычисляемое
для показа без
Compute After
Validation
Value
8)
+
+
Вычисляемое
для показа и
Compute After
Validation
установлено
Value
10)
11)
11)
Вычисляемое
при создании,
не зависимо от
Compute After
Validation
Value
+
12)
2)
13)
2)
2)
1)
+
9)
12)
+
13)
2)
2)
В таблице используются следующие обозначения:
+ - формула безусловно выполняется.
1) под автопересчетом полей понимается - при установленном у формы свойстве Automatically
Refresh Fields (см. раздел 4.1.1), получение фокуса редактируемым полем, лежащим ниже и/или левее
данного поля;
2) если данного поля в документе нет;
3) при поднятом флаге Automatically Refresh Fields формула может выполниться в случае, если
редактируемое поле, первым в форме получающее фокус, лежит ниже и/или левее данного поля. Факт
получения редактируемым полем фокуса вызовет автопересчет полей;
4) при втором проходе, т.е. после выполнения всех формул Input Translation редактируемых полей и
Value вычисляемых и вычисляемых для показа полей;
5) если данное поле первым получает фокус в форме;
6) выполняется по факту получения полем фокуса. При установленном флаге Automatically Refresh
Fields - выполняется после вычисления всех других формул Input Translation, Input Validation, Value и
после onBlur поля, которое потеряло фокус;
7) выполняется по факту потери полем фокуса. При установленном флаге Automatically Refresh
Fields - выполняется после вычисления всех других формул Input Translation, Input Validation, Value;
8) при опущенном флаге Automatically Refresh Fields формула выполняется один раз. При
поднятом флаге Automatically Refresh Fields формула может выполниться два раза, в случае если
редактируемое поле, первым получающее фокус, лежит ниже и/или левее данного поля. Первый раз
формула выполнится по факту создания документа в нормальной последовательности (т.е. в рамках
формул Default Value и Value, сверху вниз и слева направо), а второй раз по факту получения первым
редактируемым полем фокуса, что вызовет автопересчет полей;
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
97
9) при опущенном флаге Automatically Refresh Fields формула выполняется только, если поля нет в
документе. При поднятом флаге Automatically Refresh Fields формула может выполниться два раза, если
поля нет в документе (аналогично 8)), или один/ни одного раза, если поле в документе присутствует;
10) аналогично 8), но второй раз (если формула должна выполниться), она выполнится после всех
других формул Input Validation редактируемых полей;
11) формула выполняется однократно, при третьем проходе, т.е. после всех других формул Input
Validation редактируемых полей;
12) аналогично 11), при условии, что поле, получающее фокус, лежит ниже и/или левее данного
поля;
13) аналогично 9), но второй раз (если формула должна выполниться), она выполнится после всех
других формул Input Validation редактируемых полей.
Приведенная выше таблица отражает опытные изыскания автора с полями типа Text и Rich Text.
Тесты проводились на версии Notes/Domino R 7.0. Не стоит воспринимать таблицу, как что-то неизменное
(тем более, опять же из опыта, в версиях R 4 порядок вычисления формул полей менялся). Вы всегда
можете сами построить аналогичную таблицу, используя в @-формулах полей @-функцию @Prompt, в
LotusScript объектах - Messagebox, а в JavaScript - alert. Единственное замечание, в контексте формулы
Input Enabled не работает функция @Prompt, поэтому информация о данной формуле составлена на
основании визуальных опытов.
4.3.9
Общие поля - shared fields
В текущем разделе до настоящего момента мы рассматривали, так называемые, однократно
используемые (single-use) поля. Если в БД на разных формах неоднократно встречаются одноименные
поля (например, автор документа), поведение, дизайн и свойства, которых не отличаются для разных
форм, то есть смысл использовать общие поля (shared fields).
Создать общее поле можно несколькими способами. Один из них: в списке элементов дизайна БД
дизайн панели Domino Designer перейти в раздел Shared Code -> Fields и воспользоваться кнопкой New
Shared Field (новое общее поле). При этом открывается стандартное окно свойств поля, а в объектнособытийной панели и панели программного кода можно определить дополнительные свойства поля и
обработчики определенных событий. После сохранения общего поля, для изменения его свойств и кода
надо перейти в папку Shared Code -> Fields, выбрать по имени необходимое поле и два раза кликнуть
мышью на строке с его именем.
С точки зрения свойств, определяемых через окно свойств, а так же дополнительных свойств и
обработчиков событий из объектно-событийной панели, общие поля практически ничем не отличаются от
уже рассмотренных однократно используемых полей. Отличие наблюдается только в числе закладок окна
свойств общего поля. У последнего - их четыре, тогда как у однократно используемого - семь. У общего
поля отсутствуют закладки Paragraph Alignment, Paragraph Hide When и Font. Первые две закладки как
для однократно используемых, так и для общих полей имеют отношение к абзацу текста целиком, а те
только к полю. Однако закладка Font у однократно используемого поля определяет параметры шрифта
именно поля, а не всего абзаца текста. Для общих полей их параметры шрифтов «берутся» из
одноименных параметров абзаца, в рамках которого это поле будет находиться. Поэтому, скорее всего,
для общих полей нельзя установить их цвет фона (поле Background с закладки Font), т.к. на одноименной
закладке свойств статичного текста такого поля нет.
После того как общее поле определено, для вставки его в форму нужно установить курсор в теле
формы на место, где это поле должно находиться, и воспользоваться меню Create -> Resource -> Insert
Shared Field. При этом появится модальное окно:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
98
Рис. 4.52 Окно определения имени вставляемого общего поля
В поле Insert Shared Field (вставка общего поля) этого окна изначально присутствуют имена всех
общих из текущей БД полей, которые еще не были размещены на данной форме. В поле Database (БД)
можно выбрать БД отличную от текущей, и далее выбирать общие поля из других БД. Реальная вставка
общего поля происходит после выбора нужного имени и нажатия ОК. Удаление, копирование/вставка
через буфер обмена общего поля аналогична однократно используемым полям - выделяем поле и
выполняем необходимую операцию. Двойной клик мыши на общем поле в теле формы открывает дизайн
общего поля в папке Shared Code -> Fields.
Существует способ из уже определенного однократно используемого поля сделать общее поле. Для
этого нужно установить курсор в пределах поля (не выделяя поле) и воспользоваться меню Design ->
Share This Field. Данный способ не применим для полей, расположенных на области размещения (Layout
Region подробнее см. раздел 4.19.1). Кроме этого, не стоит ожидать, что операция приведения на одной
форме какого-либо однократно используемого поля в общее, вызовет приведение всех одноименных
однократно используемых полей различных форм текущей БД к типу общих полей. Если это необходимо,
то придется для каждой нужной формы сначала удалить требуемое однократно используемое поле, а
затем вставить одноименное общее поле.
Существует и обратная операция, из общего поля, размещенного на форме, сделать однократно
используемое. Для этого нужно, установив курсор в пределах поля (не выделяя поле), воспользоваться
меню Design -> Convert То Single Use.
4.4 Статичный текст - text
Статичный текст, наверное, второй (после полей) по частоте использования объект в формах. Для
создания новой текстовой надписи нужно установить курсор в теле формы на место, где эта надпись
должна находиться, и начать вводить текст с клавиатуры. Notes, как и все современные текстовые
процессоры, позволяет оперировать как с текущим текстом, так и с выделенным его фрагментом.
Рассмотрим подробнее свойства статичного текста.
Статичный текст - объект дизайна Notes, у которого не все параметры отражены в его окне свойств.
Тем не менее, начнем рассмотрение характеристик текстовых надписей с его окна свойств. Для доступа к
последнему можно воспользоваться пунктом меню Text -> Text Properties. При этом появится окно
свойств поля с шестью закладками. Рассмотрим их внимательнее. Закладки
Font tab (см. раздел
4.3.3),
Paragraph Alignment (см. раздел 4.3.4)
и
Paragraph Hide When (см. раздел 4.3.5), с
точки зрения интерфейса, практически полностью идентичны одноименным закладкам, рассмотренным в
контексте свойств поля. Существует лишь несколько отличий, касающихся закладки Font tab. Для
однократно используемого поля эта закладка определяет параметры шрифтов текста только внутри
самого поля, а для статичного текста - соответственно для выделенного фрагмента текста. Как уже
упоминалось, на закладке Font tab статичного текста отсутствует поле Background.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
99
4.4.1
Закладка
интерфейса:
Paragraph Margins - параметры полей абзаца
Paragraph Margins (параметры полей абзаца) представляет следующие элементы
Рис. 4.53 Закладка Paragraph Margins окна свойств текста
Первая секция Margins (поля) содержит две пары полей для определения соответственно левого
(Left) и правого (Right) полей абзаца. Первое поле определяет, собственно, отступ, а второе - в чем он
измеряется. Предлагаются два варианта: Absolute (абсолютное значение, при этом выборе значение
отступа задается в сантиметрах или дюймах) и Relative (%) (относительное значение, отступ - в
процентах). Основное предназначение секции Margins состоит в определении полей абзаца не только для
отображения, но и для печати. В Web-приложениях значение поля Left может повлечь генерацию
дополнительной группы тегов <UL>...<UL>
</UL>...</UL>, обрамляющих соответствующий абзац. Это
происходит при установке в поле Left значения, отличающегося от значения по умолчанию, и при выборе
- «выравнивание по левому краю» у свойства Alignment с закладки Paragraph Alignment окна свойств
текста. Другие комбинации значений полей из секции Margins на Web влияния не оказывают.
Секция Tab stops (положение ограничителей табуляции) представляет для редактирования два
поля. Первое позволяет определить или индивидуальные настройки для каждого табулятора (Individually
set), или размещенные на одинаковом расстоянии для всех табуляторов (Evenly spaced). Во втором поле
для Evenly spaced устанавливается общее расстояние между метками табулятора, а для Individually set,
соответственно, индивидуальные настройки каждой табуляционной метки. Синтаксис для последнего
случая следующий:
•
если меток несколько, то они разделяются символом точка с запятой («;»);
•
первый символ для метки определяет тип табулятора и может быть либо L (левый), либо R
(правый), либо С (центрированный). Этим определяется, как будет выравниваться относительно
табулятора вводимый текст;
•
за символом, определяющим тип табулятора, указывается отступ от границы листа. Например,
L6,301; R11,3; С16,3. При установке значения в дюймах, необходимо после символа числа набрать
двойные кавычки «"».
Положение табуляторов и их тип отображаются на линейке форматирования (для ее вывода на
экран воспользуйтесь меню View -> Ruler).
Рис. 4.54 Внешний вид линейки форматирования с табуляторами разных типов
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
100
Секция Tab stops не оказывает влияния на Web-приложения.
Последняя секция на текущей закладке Pagination (разбиение на страницы). Она содержит три
флага:
•
Page break before paragraph (перевод страницы перед началом абзаца);
•
Keep paragraph on one page (сохранять абзац на одной странице). Выполняется, если это
возможно;
•
Keep paragraph with next paragraph (сохранять абзац вместе со следующим на одной странице).
Выполняется, если это возможно.
«Увидеть» символы перевода страниц можно по команде меню View -> Show -> Page Breaks.
Секция Pagination также не оказывает влияния на Web-приложения.
4.4.2
Закладка
Paragraph Border - параметры г р а н и ц ы абзаца
Paragraph Border (параметры границы абзаца) имеет следующий вид:
Рис. 4.55 Закладка Paragraph Border окна свойств текста
Секция Border style (стиль границы) содержит два поля типа список. Первое - определяет внешний
вид границы вокруг графического изображения, второе - Color (цвет) задает цвет границы.
Значения поля стиля границы снабжено справа пиктограммой, наглядно иллюстрирующей внешний
вид границы. Допустимы следующие значения:
•
None (без границы). Значение по умолчанию;
•
Solid (сплошная линия);
•
Double (двойная линия);
•
Dotted (пунктирная);
•
Dashed (штриховая);
•
Inset (типа нажатой кнопки);
•
Outset (типа выступающей кнопки);
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
101
•
Ridge (с резкой границей снизу и справа);
•
Groove (с резкой границей сверху и слева);
•
Picture (аналог картины, двойная рамка и снизу пустое белое поле);
•
Image (графическое изображения в качестве границы). Для абзацев не применяется (используется
для графических изображений). В рамках абзаца выдает предупреждающее окно с текстом: «This
property cannot be applied to paragraphs» (данное свойство не может быть применено к параграфам).
Выбор значения в поле Color вызывает стандартное модальное окно определения цвета (см. раздел
4.1.2).
Следующая секция Border effects (внешние эффекты границы) представляет флаг Drop shadow
(отбрасывать тень), который, собственно, включает режим данного эффекта. Если флаг установлен, то в
клиенте Notes графическое изображение внешне будет выглядеть приподнятым над бланком формы. Это
достигается эффектом отбрасывания тени от графического изображения. При поднятом флаге Drop
shadow становится доступным поле With (ширина). Оно определяет условно насколько графическое
изображение приподнято над бланком формы, чем больше это значение - тем больше величина
отбрасываемой тени.
Рис. 4.56 Внешний вид абзаца с установленными параметрами тени в клиенте Notes
Последняя секция закладки Picture Border определяет толщину трех границ вокруг абзаца. В левой
части секции (там, где обычно присутствует название секции) расположено поле типа список. Его
значения: Inside (толщина внутреннего слоя от абзаца до его границы), Thickness (толщина границы) и
Outside (толщина внешнего слоя от границы абзаца до границы его «обтекания»). Значения из правой
части секции запоминаются для каждого из значений списка, представленного слева, независимо друг от
друга. То есть, может быть сохранено три набора значений из правой части секции. В правой части секции
расположены четыре поля, определяющие, соответственно, толщину левой (Left), верхней (Тор), правой
(Right) и нижней (Bottom) границ ячейки. Каждое из представленных значений полей можно менять
независимо друг от друга. Так же можно увеличивать/уменьшать на единицу значения всех полей
одновременно. Это реализуется с помощью кнопок
, лежащих справа от поля Right.
Параметры закладки Border style для абзацев в Web не транслируются.
4.4.3
Закладка
Paragraph Styles - стили текста абзаца
Paragraph Styles (стили текста абзаца) имеет следующий вид:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
102
Рис. 4.57 Закладка Paragraph Styles окна свойств текста
Под стилем здесь (как и в большинстве текстовых процессоров) понимаются не только параметры
шрифта (см. раздел 4.3.3), но и параметры параграфа (см. разделы 4.3.4 и 4.4.1).
Для применения стиля к абзацу необходимо установить курсор в пределах абзаца и выбрать стиль
из поля-списка Paragraph styles. При этом, стиль абзаца изменится на выбранный, а так же он может
отобразиться в строке состояния Notes (если этот сектор включен в строку состояния меню File ->
Preferences -> Status Bar Preferences).
«Снять» стиль с абзаца можно путем установки ему стиля [None] (нет стиля).
Для определения нового стиля используется кнопка Create Style (создание стиля). Перед этим надо
«встать» курсором на абзац, стиль которого Вам понравился. Нажатие на кнопку Create Style приведет к
появлению окна:
Рис. 4.58 Окно Create Paragraph Style
В поле Style name (название стиля) надо ввести его имя. Кроме этого, можно поднять/опустить
любые из трех доступных флагов:
•
Include font in the style (включать информацию о параметрах шрифта в стиль);
•
Make style available for all documents (сделать стиль доступным для всех документов). В этом
случае перед именем стиля появляется символ звездочки «*»;
• Assign style to the Style Cycle key [F11] (включить стиль в цикл перебора стилей по клавише F11).
При выборе стиль включается в цикл перебора стилей. Это позволяет, установив курсор в пределах
абзаца, менять по кругу стиль абзаца по клавише F11.
После определения всех параметров стиля нажать кнопку ОК для его сохранения.
Для переопределения параметров существующего стиля надо установить курсор в пределах абзаца,
стиль которого Вы желаете взять за основу, вызвать окно свойств текста и нажать кнопку Redefine Style
(переопределение стиля) с закладки Paragraph Styles. При этом появится окно:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
103
Рис. 4.59 Окно выбора имени переопределяемого стиля
В этом окне необходимо выбрать имя переопределяемого стиля и нажать ОК. Если на форме
присутствовали абзацы, использующие переопределяемый стиль, то их внешний вид изменится в
соответствии с новыми параметрами.
Кнопка Delete Style (удалить стиль) вызывает окно, аналогичное Redefine Style. Для реального
удаления стиля надо выбрать его имя в списке и нажать ОК. Абзацам, использующим удаленный стиль,
будет присвоен стиль [None].
Кнопка Assign to Keyboard (включить в список перебора) позволяет, соответственно,
включить/исключить имеющиеся стили в цикл перебора стилей по клавише F11. В появляющемся окне, с
помощью «галочек» выбираются стили, которые Вы хотите включить в цикл перебора.
Рис. 4.60 Окно выбора стилей для цикла перебора
На Web-приложения стили оказывают двоякое воздействие:
•
во-первых, если в стиле определены уже рассмотренные параметры абзаца или шрифта, которые
при трансляции в Web генерируют дополнительные теги (см. разделы 4.3.3, 4.3.4 и 4.4.1), то,
разумеется, эти теги также будут присутствовать в сформированной HTML-странице;
•
во-вторых, если определить стиль с именем HTML, то абзацы такого стиля будут передаваться в
Web как HTML-текст. То есть, если в таком абзаце присутствуют HTML-теги, то они будут передаваться
в генерируемую страницу именно как теги, а не текст. При этом, все остальные параметры
форматирования и шрифта игнорируются.
4.4.4
Параметры статичного текста из меню Text
Как уже упоминалось, не все параметры статичного текста нашли свое отражение в окне свойств
текста. Для доступа к таким параметрам нужно воспользоваться меню Text.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
104
Наиболее часто употребимым свойством текста из оставшихся, скорее всего, является Pass-Thru
HTML (передавать текст как HTML). По своему действию свойство аналогично стилю HTML. Однако,
свойство Pass-Thru HTML более гибкое, чем стиль HTML, т.к. последний применяется ко всему абзацу, а
Pass-Thru HTML можно применить к выделенному фрагменту текста. Кроме этого, использование PassThru HTML более наглядно для разработчика, текст с таким свойством выделяется в Domino Designer
цветом фона. Последняя возможность, связанная с текстом Pass-Thru HTML, позволяет «скрыть» его в
интерфейсе Domino Designer и клиента Notes. Это достигается через меню View -> Show -> Pass-Thru
HTML.
Пункт меню Permanent Pen (фломастер) позволяет для параметров шрифта определить стиль типа
«фломастер» (меню Text -> Permanent Pen -> Set Permanent Pen Style) и сделать этот стиль текущим
(меню Text -> Permanent Pen -> Use Permanent Pen). При установке стиля «фломастер» реальные
параметры шрифта берутся из параметров текущего шрифта.
Пометка текста цветом фона (аналогично маркеру на бумаге) осуществляется по пунктам меню
Highlighter -> Use Yellow/Pink/Blue Highlighter. После выбора любого из указанных пунктов, указатель
мыши изменится на маркер. При этом, выделяя мышью фрагмент текста слева направо, Вы помечаете его
выбранным цветом фона, а при выделении того же фрагмента справа налево, пометка снимается.
Highlighter пометки в Web не транслируются.
Все остальные свойства из меню Text можно установить/изменить через окно свойств текста.
В завершении раздела по статичному тексту хотелось бы еще обратить внимание:
• во-первых, создание статичного текста не ведет к появлению в объектно-событийной панели
никаких новых объектов;
• во-вторых, в дополнение к стилю HTML и свойству Pass-Thru HTML, передать статичный текст в
Web, как HTML, можно заключив его в квадратные скобки. Например, [<INPUT TYPE=TEXT
VALUE="007">];
• в-третьих, в рамках Domino Designer, начиная с версии 6, появился встроенный HTML-редактор,
позволяющий наглядно редактировать и сразу просматривать внешний вид Pass-Thru HTML-кода.
Более подробно эта возможность будет рассмотрена в разделе 4.39.
4.5 Вычисляемый текст - computed text
Вычисляемый текст (Computed Text) предназначен для генерации надписей (текста), значения
которых вычисляются по @-формулам. По своей функциональности можно провести определенные
аналогии между Computed Text и полями, вычисляемыми для показа (Computed for display).
Для создания новой вычисляемой надписи нужно установить курсор в теле формы на место, где эта
надпись должна находиться, и воспользоваться пунктами меню Create -> Computed Text. После этого в
бланке формы появится текст <Computed Value>, а в объектно-событийной панели - объект Computed
Text с единственным подобъектом Value (значение). Последний предназначен для ввода в него @формулы, которая и будет определять значение, выводимой надписи. Например,
@Implode("<img
src=\"/Regional/Refbirja.nsf/Photo/"
+
@If(@IsNewDoc;"";@Left(@Text(@DocumentUniqueID);30))
+
"/$FILE/"
+
@If(@IsNewDoc;"";@IsError(@DbLookup("":"NoCache";"";"Photo";@Left(@Text(@DocumentUniqueID) ;30
);3));"";@DbLookup("":"NoCache";"";"Photo";@Left (@Text(@DocumentUniqueID);30);3))
+
"\"
width=200 height=250><br>")
Чтобы «добраться» до свойств вычисляемого текста, необходимо установить курсор на бланке
формы в пределах надписи <Computed Value> (это значение не должно быть выделено). При этом, в меню
верхнего уровня появится пункт Computed Text, состоящий из трех подпунктов:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
105
• Computed Text Properties (свойства вычисляемого текста). Вызывает, соответственно, окно
свойств вычисляемого текста. Окно практически идентично уже рассмотренному окну свойств
статичного текста. Отличие окна свойств Computed Text по отношению к Text состоит в отсутствии
закладки Paragraph Border и наличии закладки Computed Text Extra HTML (дополнительные HTML
параметры вычисляемого текста). Последняя закладка по элементам интерфейса полностью
аналогична закладке Field Extra HTML (см. раздел 4.3.6). Параметры этой закладки оказывают
влияние только на Web-приложения. Если ни одно поле с этой закладки не заполнено, то
вычисляемый текст передается в Web «как есть». В противном случае вокруг вычисляемого текста
генерируется тег <SPAN ...>, и параметры с закладки передаются в его атрибуты;
•
Remove Computed Text (удаляет объект вычисляемый текст);
• Edit Computed Text (редактирование вычисляемого текста). Пункт меню доступен только для
Computed Text, определенного в рамках Rich Text полей. Вызывает в интерфейсе клиента Notes
редактор для изменения значения @-формулы вычисляемого текста.
К вычисляемым значениям можно применить все свойства текста, включая Pass-Thru HTML. Объект
Computed Text поддерживается в Wed приложениях.
В качестве отличия полей Computed for display от вычисляемого текста можно отметить то, что
последний можно включать в Rich Text поля и страницы (Page), a Computed for display - нет.
Порядок вычисления @-формул Computed Text определить труднее, чем это мы уже проделывали
для формул полей (см. раздел 4.3.8). Дело в том, что в контексте @-формул вычисляемого текста не
работают формулы @Prompt и @SetField. Однако, из личных опытов, можно заметить что:
• пересчет формул вычисляемого текста происходит в тех же режимах документа, что у формул
полей, а именно: при создании, сохранении, пересчете и автопересчете полей, открытии на чтение и
редактирование документа;
• выполнение @-формулы вычисляемого текста происходит после вычисления всех формул полей:
Default Value, Value, Input Translation и Input Validation, но перед onBlur и onFocus;
• расположение вычисляемого текста на форме относительно полей для пересчетов формул не
важно. Даже если Computed Text находится ниже поля, получающего фокус (при автопересчете), все
равно формула вычисляемого текста перевычислится;
• если на форме расположено несколько объектов типа вычисляемый текст, то вычисление их
формул будет происходить сверху вниз слева направо.
По аналогии с порядком вычисления полей, не следует относиться к данным правилам как к догме.
Для уточнений обращайтесь к документации или собственному опыту.
4.6 Графическое изображение - picture
На Domino-формах можно размещать графические изображения. Для этих целей Domino Designer
предлагает два объекта Picture (графическое изображение) и Image Resource (графический ресурс). На
самом деле, существует еще одна возможность отобразить на форме графику, сделав это через OLE
объект (Object), соответствующий графическому изображению. Последний случай отнесем при
рассмотрении к OLE объектам (подробнее см. раздел 4.32).
Первым из графических элементов рассмотрим объект Picture. Для создания графического
изображения нужно установить курсор в теле формы на место, где это изображение должно находиться, и
воспользоваться пунктами меню Create -> Picture. При этом, откроется модальное окно для выбора
файла, содержащего графическое изображение:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
106
Рис. 4.61 Модальное окно выбора имени файла, содержащего графическое изображение
Окно представляет стандартный для данной операционной системы диалог выбора файла.
Поддерживаемые типы файлов выбираются в поле Files of type (тип файлов). Набор достаточно широк от
BMP до TIFF. Разработчик имеет возможность выбрать имя файла или ввести его с клавиатуры в поле File
name (имя файла). Для реального переноса графики на форму нужно, после определения имени файла в
диалоговом окне, нажать кнопку Import (импорт).
После этого на бланке формы появится, собственно, графическое изображение. Для получения
доступа к его свойствам необходимо установить курсор в бланке формы на графическое изображение (оно
не должно быть выделено). При этом, в меню верхнего уровня появится пункт Picture, состоящий из
восьми подпунктов, сгруппированных в три секции, разделенные горизонтальными линиями. Вторая и
третья секции пунктов меню имеют отношение к гиперобъектам (Hotspot), которые могут быть связаны с
графическим изображением. Эти пункты будут рассмотрены позднее в разделе 4.15. Первая секция
содержит следующие пункты меню:
•
Picture Properties (свойства графического изображения). Вызывает окно свойств графического
изображения;
•
Replace Picture (заменить графическое изображение). Повторно вызывает диалоговое окно для
определения имени файла с графическим изображением. При выборе в диалоговом окне нового
имени файла и нажатии на кнопку Import, осуществляется замена существующего графического
изображения на новое.
Остановимся подробнее на свойствах графического изображения. Закладки
Paragraph
Alignment,
Paragraph Hide When и
Picture Extra HTML (дополнительные HTML параметры
графического изображения), с точки зрения интерфейса, практически полностью идентичны одноименным
закладкам, рассмотренным в контексте свойств поля (см. разделы 4.3.4, 4.3.5 и 4.3.6).
Изменения в интерфейсе возникают на закладке Picture Extra HTML, где поле Name (имя) доступно
для редактирования (на закладке Field Extra HTML поле имеет статус только для чтения). Значение из
поля Name транслируется для Web-приложений в одноименный атрибут тега <IMG SRC ... >.
Закладки
Paragraph Margins и
Paragraph Styles объекта Picture по элементам
интерфейса так же имеют аналоги из рассмотренных ранее. Это одноименные закладки статичного текста
(см. разделы 4.4.1 и 4.4.3). Так же следует отметить, что параметры с закладок Paragraph Alignment,
Paragraph Margins, Paragraph Hide When и Paragraph Styles применяются целиком к абзацу, а не только
к объекту - графическое изображение.
Рассмотрим подробнее оставшиеся закладки окна свойств графического изображения.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
107
4.6.1
Picture Info - общая информация о графическом изображении
Закладка
Picture Info (общая информация о графическом изображении) представляет
следующие элементы интерфейса:
Рис. 4.62 Закладка Picture Info окна свойств графического изображения
Первая секция Source (источник) недоступна для редактирования и содержит значение [in-line
image] (встроенное графическое изображение).
Вторая секция Text Wrap (параметры «обтекания» графического изображения текстом) содержит
единственное поле-список, предоставляющее для выбора большой набор значений. Каждое из значений
снабжено справа пиктограммой, достаточно наглядно иллюстрирующей положение графического
изображения относительно текста. Сами значения могут быть следующими:
•
Wrap, float image left (плавное «обтекание» слева). Для Web-приложений у тега <IMG SRC ... >
генерирует атрибут ALIGN=left;
•
Wrap, float image right (плавное «обтекание» справа). Для Web-приложений у тега <IMG SRC ... >
генерирует атрибут ALIGN=right;
•
Wrap around image (плавное «обтекание» вокруг графического изображения). Для Webприложений у тега <IMG SRC ... > генерирует атрибут ALIGN=top;
•
Don't wrap, align top («обтекания» нет, выравнивание по верхнему краю текста). Для Webприложений у тега <IMG SRC ... > генерирует атрибут ALIGN=top;
•
Don't wrap, align middle («обтекания» нет, выравнивание по центру). Для Web-приложений у тега
<IMG SRC ... > генерирует атрибут ALIGN=middle;
•
Don't wrap, align bottom («обтекания» нет, выравнивание по нижнему краю текста). Для Webприложений у тега <IMG SRC ... > генерирует атрибут ALIGN=bottom;
•
Don't wrap, align baseline («обтекания» нет, выравнивание по опорной линии). Значение по
умолчанию. При трансляции в Web не вызывает появления в теге <1MG SRC ... > дополнительных
атрибутов.
Следующая секция Scaling (%) (масштаб в процентах) содержит два поля, определяющих масштаб
графического изображения по горизонтали (Width) и вертикали (Height), а так же кнопку Reset
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
108
(восстановить), которая возвращает полям Width и Height первоначальное значение 100. При трансляции
параметров Width и Height в Web значения передаются в одноименные атрибуты тега <IMG SRC ... >
абсолютной (а не процентной) величиной в пикселях.
Секция Alternate Text (альтернативный текст) предназначена для Web-приложений, в которых
значение поля этой секции транслируется в атрибут ALT тега <IMG SRC ... >.
Секция Caption (заголовок) содержит текстовое поле для заголовка и поле-список Display caption
(отображение заголовка). Последнее доступно только после заполнения самого заголовка и содержит
следующие значения: Below image (под графическим изображением) и Centered on image (в центре
графического изображения). Параметры из данной секции в Web не транслируются.
Секцию Hotspots (гиперобъекты) мы рассмотрим позднее в контексте гиперобъектов, связанных с
графическими изображениями (см. раздел 4.15).
4.6.2
Picture Border - параметры границы графического изображения
Закладка
Picture Border (параметры границы графического изображения) практически
полностью идентична закладке Paragraph Border (см. раздел 4.4.2). Отличие наблюдается в том, что для
поля Border style разрешается выбирать значение Image. При этом, на закладке появляется одноименное
поле и кнопка
Browse Images (просмотр графических изображений), и закладка приобретает
следующий вид:
Рис. 4.63 Закладка Picture Border окна свойств графического изображения
Клик по кнопке Browse Images вызывает модальное окно определения графического ресурса (Image
Resource, подробнее см. раздел 16.1), которое будет определять границу текущего графического
изображения.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
109
Рис. 4.64 Модальное окно Insert Image Resource
После выбора подходящего графического ресурса и нажатия ОК, выбранный ресурс будет
отображаться в качестве границы текущего графического изображения.
При трансляции текущего графического изображения в Web, появление в теге <IMG SRC ... >
дополнительных атрибутов вызывает только установка для Thickness значения всех полей Left, Тор,
Right и Bottom отличных от нуля. Этот случай приведет к появлению в теге <IMG SRC ... > атрибута
BORDER, равного минимальному значению из полей Left, Top, Right и Bottom. Другие параметры с
закладки Picture Border не генерируют дополнительных атрибутов и тегов.
Остальные параметры и свойства с закладки Picture Border идентичны одноименной закладке
свойств статичного текста.
4.6.3
Объекты графического изображения, определяемые в объектно-событийной
панели
В объектно-событийной панели объект Picture представлен своими обработчиками событий на
JavaScript. Хотя в поле Run программной панели можно выбрать для Client и Web значения JavaScript и
Common JavaScript, перечисленные обработчики событий с версии R 6.5 работают только в браузере:
•
onClick (обработчик, выполняющийся при однократном клике мыши);
•
onDblClick (обработчик, выполняющийся при двойном клике мыши);
•
onHelp (обработчик, выполняющийся по факту вызова справки по клавише F1);
•
onKeyDown (обработчик, выполняющийся при нажатии на клавишу клавиатуры);
•
onKeyPress (обработчик, выполняющийся при нажатии или отпускании после нажатия на клавишу
клавиатуры);
•
onKeyUp (обработчик, выполняющийся при отпускании после нажатия на клавишу клавиатуры);
•
onMouseDown (обработчик, выполняющийся при нажатии на кнопку мыши);
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
110
•
onMouseMove (обработчик, выполняющийся, когда указатель мыши перемещается в рамках
объекта);
•
onMouseOut (обработчик, выполняющийся, когда указатель мыши уходит с объекта);
•
onMouseOver (обработчик, выполняющийся, когда указатель мыши попадает на объект);
•
onMouseUp (обработчик, выполняющийся при отпускании после нажатия на кнопку мыши).
4.7 Графический ресурс - image resource
Объект - графический ресурс (Image Resource) очень похож на только что рассмотренный объектграфическое изображение (Picture см. раздел 4.6). Размещения Image Resource на форме
осуществляется через пункты меню либо Create -> Image Resource, либо Create -> Resource -> Insert
Resource. В первом случае вызывается уже рассмотренное модальное окно Insert Image Resource (см.
Рис. 4.64). Во втором случае появляется модальное окно, представляющее большинство общих ресурсов.
Как добавить в БД новый графический ресурс будет рассмотрено в разделе 16.1.
Рис. 4.65 Модальное окно Insert Resource
В поле Resource type (тип ресурса) нужно выбрать значение Images, а затем выбрать нужный
графический ресурс в списке Available resources (доступные ресурсы).
После вставки на бланк формы графического ресурса, он становится объектом практически
полностью идентичным Picture. Единственное отличие обнаруживается на первой закладке Picture Info
его окна свойств. Для Image Resource становится доступной для редактирования первая секция Source
этой закладки. В частности, в секции появляется текстовое поле со значением, равным имени
добавленного графического ресурса. Разработчик имеет возможность изменить это значение как с
помощью клавиатуры, так и посредством кнопок
Browse images (просмотреть графические ресурсы) и
Formula (формула), аналогично определению фона формы (см. раздел 4.1.4). В остальном, объект ©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
111
графический ресурс (Image Resource) идентичен объекту графическое изображение (Picture) как по
свойствам, так и по поведению.
4.8 Акции формы - action
Акции (Action) формы в интерфейсе клиента Notes представляют собой кнопки в непрокручиваемой
панели, расположенной под панелью открытых в клиенте окон.
Рис. 4.66 Внешний вид панели акций и собственно акций в интерфейсе клиента Notes
Акции предоставляют разработчику возможность запрограммировать группу действий (например,
сохранить или распечатать текущий документ), выполняемую нажатием на одну кнопку. В Domino Designer
при разработке акций, начиная с 6-ой версии, появилось много новых возможностей, включая новые типы
акций, позиционирование и группировку акций в двухуровневые меню, операции с системными акциями.
Рассмотрение акций начнем с акций первого уровня.
Для создания новой акции первого уровня можно воспользоваться пунктом меню Create -> Action ->
Action. При этом, создается акция с именем (Untitled) (безымянная), открывается окно свойств этой
акции, и в панели тела элемента дизайна Domino Designer отображается панель акций (если она не была
открыта на этот момент).
Для доступа к свойствам существующей акции надо предварительно открыть панель акций. Это
можно сделать посредством пунктов меню View -> Action Pane. Далее выбираем требуемую акцию, и
опять используем меню Design -> Action Properties. Рассмотрим подробнее свойства акции.
4.8.1
Закладка
Action Info - общая информация об акции
Action Info (общая информация об акции) имеет вид:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
112
Рис. 4.67 Закладка Action Info окна свойств акции
Первая секция содержит следующие элементы интерфейса:
• поле Name (имя), определяющие названия акции. С версии R 6 в имени акции не может
присутствовать символ обратного слеша ("\"). Двухуровневые меню для акций создаются через пункт
меню Create -> Action -> Action with Sub Action. Таким образом, группировка меню акций второго
уровня осуществляется в момент разработки, а не выполнения, как это было в R 5. Двухуровневые
акции широко применяются в БД личных почтовых ящиков (шаблон MAIL7.NTF).
Рис. 4.68 Внешний вид двухуровневого меню акций
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
113
В имени акции по синтаксису может присутствовать «горячая» клавиша, символ которой должен
предваряться символом подчеркивания ("_"). По «горячей» клавише можно вызвать акцию только через
меню Action, но не в панели акций.
• поле Label (ярлык) позволяет определить надпись на кнопке акции на языке @-формул. Если это
поле пусто, то на акции выводится ее имя (поле Name). В противном случае заголовок акции
определяется в поле Label. Обратите внимание, что значение поля должно соответствовать
синтаксису @-формул, т.е. если требуется вывести статичный текст, то его надо заключить в двойные
кавычки. Такие формулы могут ссылаться на значение полей в документе, и их значения
перевычисляются при обновлении документа. Например, @lf(a1 = " 1 " ; "Вперед"; "Назад");
• кнопка
Label Formula (формула ярлыка) выводит содержимое @-формулы для поля Label в
отдельном окне.
Следующая секция окна свойств акции называется Target Frame (целевой фрейм). Секция содержит
одно поле, определяющее фрейм, в рамках которого будет выполнено действие акции. Поле, в основном,
предназначено для приложений с фреймовой организацией. В этом случае, если действие акции
вызывает открытие объектов переднего плана (например, другой формы), то это открытие произойдет во
фрейме из Target Frame. Свойство поддерживается в Web-приложениях.
Секция Display (параметры отображения) содержит следующие элементы интерфейса:
•
поле-список Туре (тип акции) со следующими значениями:
• Button (кнопка) - соответствует обычной кнопке акции;
• Checkbok (акция типа флаг). При этом выборе становятся доступными поле Value
(значение), кнопка
Control Value Formula (формула определения значения) и становится
недоступной секция Icon (см. ниже). Акции типа Checkbok в Web-приложениях не поддерживаются.
Для акций типа Checkbok действие, выполняемое по клику на них, определяется в объекте Click
или onClick объектно-событийной панели, а поднят или опущен флаг - задается формулой из поля
Value. Такие формулы могут ссылаться на значение полей в документе, и их значения
перевычисляются при обновлении документа. Например, определим значение поля Value как
Status = "Подписать", а значение для объекта Click как:
answer := @Prompt([OkCancelList] ; "Статус"; "Определите статус документа";
"Отклонить"; "Подписать":"Отклонить") ;
@Command([EditDocument];"1");
FIELD Status:= answer;
@Command([ViewRefreshFields])
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
114
Рис. 4.69 Внешний вид акции Checkbox в клиенте Notes
• Menu separator (разделитель меню). Данный тип акций используется для разделения
пунктов меню горизонтальной чертой в меню Action и меню акций второго уровня. При выборе
этого типа акции становится недоступной секция Icon (см. ниже), поле Value и кнопка Control Value
Formula, а также программная панель;
•
флаг Include action in button bar (включать акцию в панель акций). Если флаг опущен, то акция
присутствует только в меню Action клиента Notes (при условии поднятого флага Include action in
Action menu см. ниже);
•
флаг Only show icon in button bar (отображать только иконку акции на панели акций). При
поднятом флаге на кнопке акции отображается только иконка без имени или ярлыка акции. Иконка
акции должна быть определена в секции Icon (см. ниже);
•
флаг Right align action button (правое выравнивание для кнопки акции). При поднятии флага
акции выравниваются по правому краю панели акций. В Web-приложениях работает только при
отображении панели акции в виде апплета (подробнее см. в разделе 4.9.6);
•
флаг Include action in Action menu (включать акцию в меню Action клиента Notes).
Секция Icon (иконка) определяет графическое изображение, которое должно отображаться на кнопке
акции. В левой части секции размещены три радиокнопки: None (без графического изображения), Notes
(использовать предопределенные Notes иконки) и Custom (иконки, определяемые разработчиком). При
выборе None никаких дополнительных элементов интерфейса в правой части секции не появляется.
Выбор Notes вызывает появление в правой части секции двух полей типа выпадающий список:
•
Location (размещение) определяет как по отношению к иконке будет размещаться надпись на
кнопке акции. При значении Left (левое) соответственно слева, а для Right (правое) - справа.
Свойство поддерживается в Web;
•
Image (графическое изображение) определяет собственно иконку. Вызывает список доступных
иконок для выбора:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
115
Рис. 4.70 Окно выбора иконок типа Notes для кнопок акции
Если в левой части секции выбрана радиокнопка Custom, то в правой части секции так же
появляются два поля Location и Image. Если для Location никаких отличий от рассмотренного ранее при
значении радиокнопки Notes нет, то определение собственно иконки в Image изменилось. Определить
иконку (так же как и фон формы см. раздел 4.1.4) можно тремя способами. Первый способ - в поле,
расположенном справа от Image, можно с клавиатуры ввести имя файла, из имеющихся в Image Resource
текущей БД (например, actn009.gif). Второй - по кнопке
выводится диалоговое окно для выбора одного
из значений имени файла из имеющихся в Image Resource. Последний способ, определить формулу по
кнопке
. Формула должна подчиняться правилам языка @-формул и возвращать значение имени
доступного ресурса из Image Resource (например, @lf(@lsDocBeingEdited; "actn009.gif"; "actn010.gif").
Контекст данной формулы так же не определен (см. замечания к фону формы, раздел 4.1.4).
Экспериментально выяснено, что, например, в клиенте Notes для таких формул не работают значения
полей документа и @lsDocBeingEdited, а в интерфейсе браузера работает и то, и другое. Более подробно
о трансляции акций в Web будет рассмотрено в разделе 4.9.6.
4.8.2 Action Hide When - параметры "скрытия" акции
Закладка
Action Hide When (когда «скрывать» акцию) отличается от аналогичной закладки
Paragraph Hide When окна свойств поля (см. раздел 4.3.5) только отсутствием полей Printed, Copied to
the clipboard и Embedded из секции Hide paragraph when document is. В остальном интерфейс и
функциональность закладок совпадает.
4.8.3 Advanced - дополнительные параметры акции
Закладка
Advanced (дополнительно) имеет следующий вид:
Рис. 4.71 Закладка Advanced окна свойств акции
Данная закладка содержит одну секцию NotesFlow Publishing (поддержка акцией технологии
NotesFlow). Секция позволяет «связывать» поведение акции с OLE-объектом, представленным в
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
116
документе. Первый флаг Publish Action with OLE object («связать» акцию с OLE объектом) позволяет
связать определенные события из OLE-объекта с кодом акции (подробнее см. раздел 4.8.6).
Подсекция When action is chosen (действия при выборе акции) содержит две радиокнопки и один
флаг:
•
радиокнопка Close OLE object and return to Notes (закрыть OLE-объект и вернуться в Notes). При
этом выборе после выполнения действий акции OLE-объект будет принудительно закрыт и фокус
будет передан документу Notes;
•
радиокнопки OLE object remains open (OLE-объект останется открытым);
•
флаг Bring document window to front (передавать фокус документу Notes). OLE-объект останется
открытым (при выбранном значении OLE object remains open), но фокус передастся документу Notes.
Свойство обычно используется совместно с параметрами Auto Launch формы (см. раздел 4.1.3).
4.8.4
Позиционирование и группировка акций
Для создания акции второго уровня, начиная с версии R 6, используется команда меню Create ->
Action -> Action with Sub Action. При этом, в панели акций появляется акция первого уровня и, связанная
с ней, акция второго уровня с именами (Untitled). Акция второго уровня по своим свойствам и объектам,
представленным в объектно-событийной панели, ничем не отличается от аналогичной акции первого
уровня, создаваемой через меню Create -> Action -> Action. Акция же первого уровня, имеющая подакции
отличается от простых акций первого и второго уровня. В частности для нее недоступными становятся
программная панель, закладки Action Hide When и Advanced окна свойств, а на закладке Action Info
отсутствует секция Target Frame, и в секции Display нет поля Туре.
После того как акции созданы, их можно позиционировать (т.е. определять порядок, в котором они
будут появляться в панели акции и одноименном меню) с помощью операции drag&drop. Для этого,
выделяем акцию(и) в панели акции и «перетаскиваем» ее в требуемое место с помощью мыши. Таким
образом, можно перемещать акции внутрь/наружу меню второго уровня. Удаление акции происходит как
обычно, выделяем их в панели акции и нажимаем клавишу Delete.
4.8.5
Системные акции формы
В Domino Designer, начиная с версии R 6, при создании новой формы панель акций изначально
пуста, в отличие от R 5, где у формы сразу появлялось шесть предопределенных системных акций.
Добавить системные акции на форму в версии 6 и выше можно через меню: Create -> Action -> Insert
System Action. После добавления системных акций, их можно позиционировать, и если надо удалить ряд
из них аналогично обычным акциям. Единственное что нельзя, так это переопределить их действия
(панель программного кода для системных акций недоступна). Кроме этого в окне свойств системных
акций на закладке Action Info недоступно для изменения поле Туре из секции Display, значение которого
соответствует Button. Стоит также отметить, что для системных акций теряют смысл параметры с
закладки Advanced, хотя сама закладка в окне свойств присутствует. В остальном, системные акции
ничем не отличаются от рассмотренных ранее акций, создаваемых разработчиками. Можно изменить их
имя, отображать/скрывать в панели акций и меню и т.д. Сразу отметим, что системные акции формы в
Web не транслируются. Перечислим эти акции:
•
Categorize (категоризация) выполняет операцию категоризации документа. Для того чтобы
воспользоваться этим механизмом, необходимо присутствие в текущем документе поля с именем
Categories. Рекомендуется установить у данного поля свойство Allow multiple values и выбрать тип
поля - либо Text, либо Dialog list. В последнем случае, желательно поднять флаг Allow values not in
list (см. раздел 4.3.1). Кроме этого, в БД должен быть вид с именем «All by Category», у которого
первая колонка должна быть категоризирована по полю Categories (т.е. колонка должна иметь
формулу Categories и свойство Туре равное Categorized, подробнее см. раздел 6.4.2). Если все эти
условия выполнены, то при клике по акции Categorize выдается модальное окно:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
117
Рис. 4.72 Модальное окно категоризации документа
В нем можно мышью установить/снять отметку с любых категорий, из имеющихся в поле Categories,
или внести с клавиатуры новую категорию в поле Add categories (добавить категорию) и затем нажать
кнопку Add (добавить). Категоризация работает для документов как в режиме чтения, так и
редактирования;
•
Edit Document (редактировать документ). Работает как переключатель, переводит документ из
режима чтения в редактирование и обратно. Аналогична @-команде @Command( [EditDocument]);
•
Send Document (отправить документ по почте). Аналогична простому действию Send Document
(см. раздел 4.8.6). Отличается от последнего и @MailSend тем, что при отсутствии в документе двух
предопределенных полей Sign и Encrypt, выдается модальное диалоговое окно для определения
параметров шифрования и электронной подписи почтового сообщения.
Рис. 4.73 Модальное диалоговое окно определения параметров шифрования и электронной подписи
Пользователь может определить значения флагов Sign (электронная цифровая подпись) и Encrypt
(шифрование) и нажать Send (отправить) для отправки документа по почте или Cancel (отмена) для
аннуляции почтовой пересылки. Если в документе присутствует хотя бы одно из полей Sign или Encrypt, то
диалоговое окно не появляется, и документ сразу отправляется по почте;
•
Forward (переслать). Открывает в почтовом ящике пользователя форму стандартного письма, в
тело которого переносится содержимое текущего документа. Это содержимое предваряется текстом «— Forwarded by», т.е. операция аналогична одноименной акции стандартной почтовой формы;
• Move То Folder (переместить в папку). По функциональности похожа на одноименное простое
действие. Отличия: во-первых, в простом действии папки для перемещения жестко привязаны к
самому действию (определяются в окне Add/Edit Action), а для системной акции папки задаются в
модальном окне, появляющемся при клике по кнопке акции (или через меню Actions).
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
118
Рис. 4.74 Модальное окно выбора папки для перемещения документа по действию системной акции
Move То Folder
Папка, куда будет перемещен документ, выбирается в списке Select a folder (выбор папки).
Реальное перемещение документа осуществляется по кнопкам Move (переместить) или Add (добавить).
Кроме этого, в окне присутствует кнопка Create New Folder (создать новую папку). Окно создания новой
папки практически идентично аналогичному окну создания новой папки в Domino Designer и будет
подробно рассмотрено разделе 8.1. Второе отличие акции от одноименного простого действия состоите
том, что кнопка Move действительно осуществляет перемещение, в то время как, простое действие в
рамках акции формы только добавляет документ в папку;
•
Remove From Folder (удалить из папки). По функциональности акция похожа на одноименное
простое действие. Отличие состоит в том, что у простого действия папка для удаления жестко
привязана к самому действию (определяются в окне Add/Edit Action), а для системной акции документ
удаляется из текущей папки.
4.8.6
Объекты и свойства акции, определяемые в объектно-событийной панели
После создания новой простой акции в объектно-событийной панели появляется одноименный
объект с единственным подобъектом Click (обработчик клика мыши). Число и тип подобъектов акции
зависит от значений пары полей Run из программной панели, которые могут принимать значения: для
Client - Formula, Simple action(s), LotusScript, JavaScript и Common JavaScript, а для Web - JavaScript
и Common JavaScript. Рассмотрим подробнее эти значения:
•
Formula (язык @-формул). Если для акции определен только обработчик Client/Formula, то он
работает как в клиенте Notes, так и в Web. Например, @SetField("a1"; "Новое значение"). Исключение
составляют функции, неподдерживаемые в Web. Например, @Prompt. Формула должна удовлетворять
требованиям языка @-формул и быть уместна для данного объекта. Не все @-функции и @-команды
могут быть использованы в рамках формул акций формы (подробнее см. документацию). Кроме этого,
следует помнить о режиме, в котором сейчас находится текущий документ (редактирование, просмотр,
и т.д.). Например, использование в режиме чтения команды @Command( [FileSave] ) приведет к
ошибке (применяйте параметры скрытия акции). Существуют еще ограничения, связанные с ACL БД и
ECL (Execute Control List - список управления выполнением) рабочей станции, но на них мы
останавливаться не будем (см. документацию);
•
Simple action(s) (простые действия). Этот язык не поддерживается в Web. Для выбора конкретного
действия(й) предлагается воспользоваться кнопкой Add Action (добавить акцию) в нижней части
панели программного кода. При этом, появляется окно:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
119
Рис. 4.75 Окно определения простого действия Add Action
Интерфейс окна контекстно зависим от значения поля Action (действие). Для выбора предлагаются
следующие значения:
• @Function Formula (использовать @-формулы). Можно комбинировать с другими простыми
действиями, т.к., с одной стороны, не все Simple action можно запрограммировать на @-формулах, а с
другой стороны, @-формулы дают больше функциональности, чем Simple action. При выборе
@Function Formula в окне Add Action появляется большое поле Formula для ввода собственно @формулы. Кнопки Fields & Functions (поля и @-функции) и @Commands (@-команды) предназначены
для вывода справочных окон, содержащих соответственно поля БД, список всех @-функций и @команд, в окне можно выбрать нужную информацию и перенести ее в окно Formula по кнопке Paste
(вставить). Кнопка Ok производит синтаксический анализ @-формулы и, в случае успеха, переносит ее
в панель программного кода. После этого, акция присутствует в этой панели в виде кнопки, с
надписью, соответствующей полю Action, т.е. для @Function Formula это будет Run @function
formula (выполнить @-формулу), а для Copy to Database (копировать в БД) - Copy document to
имя_БД (копировать документ в БД). В одной акции может быть несколько простых действий, каждое
из которых будет представлено такой кнопкой в панели программного кода. Для редактирования
конкретного действия нужно кликнуть по его кнопке. При этом, появится окно Edit Action
(редактирование действия), совпадающее один в один с Add Action. Удалить конкретную акцию
можно, выделив соответствующую ей кнопку и нажав клавишу Del. Помимо рассмотренных элементов
интерфейса, в окне Add Action присутствуют три радиокнопки: Update existing document when run
(при запуске обновлять существующий документ), Create new document when run (при запуске
создавать новый документ) и Select document when run (выбирать документы при запуске). Данные
радиокнопки в акциях формы не влияют на ее функциональность. Они предназначены для контекста
определения агентов, выполняющих простые действия;
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
120
Рис. 4.76 Представление простых действий в панели программного кода
•
Copy to Database (копировать в БД). В окне присутствует единственная кнопка Select Database
(выбрать БД), с помощью которой можно определить БД, куда необходимо скопировать текущий
документ;
•
Copy to Folder (копировать в папку). В поле Copy documents to folder (копировать документы в
папку) отображаются доступные для данной БД папки, которые при выборе будут выступать в качестве
приемника для копируемых документов;
•
Delete from Database (удалить из БД). Для акций формы помечает документ к удалению, для
акций видов помечает/снимает пометку об удалении с документа(ов), а в агентах сразу удаляет
документ(ы).
•
Mark Document Read (пометить документ как прочтенный). Подробнее о пометках
прочтения/непрочтения документов см. раздел 6.3.5. Данное действие можно применять в режиме
чтения документа. В рамках агентов действие не работает с Before New Mail Arrives агентами,
подробнее см. раздел 13;
•
Mark Document Unread (пометить документ как непрочтенный);
•
Modify Field (изменить значение поля). В окне присутствует поле Field (поля), в нем можно
выбирать имя поля, значение которого необходимо изменить. Поле With the new value (значение)
используется для ввода нового значения поля. Согласно документации, Modify Field предназначено
для работы с текстовыми полями, однако из опыта, данное простое действие может работать со
значениями дата/время и число, если введенное в поле Value значение может быть успешно
конвертировано к требуемому типу данных. Еще в окне присутствуют две радиокнопки Replacing
(заменить значение) и Appending (добавить значение). В первом случае, старое значение поля
замещается значением из Value, во втором - новое значение добавляется к старому как элемент
списка. Радиокнопка Append value корректно работает только для текстовых полей;
•
Modify Fields by Form (изменять поля по форме). При этом выборе в окне появляется поле Form
(форма), которое отображает список доступных в БД форм. В большом поле снизу выводится бланк
выбранной формы, в поля которой можно ввести новые значения. Данное действие замещает старые
значения полей. Рекомендуется использовать только для текстовых полей;
•
Move to Folder (переместить в папку). В поле Move documents to folder (переместить документы в
папку) отображаются доступные для данной БД папки, которые при выборе будут выступать в качестве
приемника для перемещаемых документов. Перемещение (Move) отличается от копирования (Сору)
тем, что если документ присутствовал в папке, отличной от приемника, то при Move он оттуда
удаляется, а для Сору - нет. В акциях формы и видов данное действие осуществляет только
копирование документов в папку;
•
Remove from Folder (удалить из папки). В поле Remove documents to folder (удалить документы
из папки) выбирается папка, из которой нужно удалить документ(ы). Удаление документа происходит
только из папки, но не из БД;
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
121
•
Reply to Sender (ответить отправителю). В поле Reply with the following message (ответить со
следующим сообщением) можно ввести текст, который будет отправлен по почте отправителю. В
Reply with the following message окна воспринимается только простой текст (plain text), т.е. без
графики, присоединенных файлов и т.д. Для реальной отправки по почте документа требуется
наличие в нем полей, связанных с адресацией, например, From. Помимо Body в окне присутствует
флаг Include a copy of the document in the message (включить копию текущего документа в письмо) и
две радиокнопки Reply to sender only (ответить только отправителю) или Reply to all (ответить всем).
При поднятом флаге Include copy of document в письмо включается содержимое поле Body текущего
документа. При выборе радиокнопки Reply to sender only письмо отправляется только автору письма,
а при - Reply to all, кроме автора письмо уходит всем, кто входил в список Кому, Копия и Скрытая
Копия изначального письма;
•
Run Agent (выполнить агента). В поле Select the agent to be run (выберите агента для запуска)
можно выбрать доступного для данной БД агента, который будет запущен при выполнении этого
простого действия;
•
Send Document (отправить документ по почте). В этом случае, окно определения простого
действия не содержит дополнительных элементов интерфейса. Данное действие аналогично по
функциональности функции @MailSend. Для адресации обычно используются поля SendTo, СоруТо и
BlindCopyTo;
•
Send Mail Message (отправить почтовое сообщение). В окне присутствуют поля: То (кому письмо),
Subject (тема письма), Body (тело письма). Так же имеются два флага: Include link to document in the
message (включить в письмо Notes гиперссылку на текущий документ) и Include copy of document in
the message (включить в письмо копию текущего документа). Для облегчения процедуры адресации
используются две кнопки More (подробнее) и
. Последняя выводит стандартное диалоговое окно
выбора адреса. По кнопке More выводится окно:
Рис. 4.77 Окно более подробного задания параметров для действия Send Mail Message
В данном окне можно определить дополнительные адресные поля cc (копия) и bcc (скрытая копия).
Кроме этого, все параметры То, сc, bcc и Subject можно задать как в виде текстовых констант, так и
определить их по @-формуле (радиокнопки Text и Formula);
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
122
•
Send Newsletter Summary (отправить по почте аннотацию на документы). Позволяет
сформировать и отправить по почте документ, содержащий ссылки на другие документы (некий аналог
класса NotesNewsletter из LotusScript встроенных классов). Поля То, Subject, Body и кнопки More и
имеют тот же смысл, что и в простом действии Send Mail Message. Из новых элементов интерфейса
появились флаг Include summary each document using view (включать в аннотацию каждый документ
из вида) и поле для выбора конкретного вида. При использовании в акции формы и вида данное
действие включает в аннотацию только ссылку на текущий документ.
Вернемся к объектно-событийной панели. При выборе у акции формы для объекта Click языка
программирования LotusScript в объектно-событийной панели появляются следующие подобъекты:
•
(Options) (параметры) предназначен для объявления неисполняемых операторов на уровне
объекта акции (подробнее см. разделы 4.2.1 и 4.2.2);
•
(Declarations) (описания) предназначен для объявления переменных и констант на уровне
объекта акции;
•
Click (клик мыши) - обработчик события нажатия на кнопку акции;
•
Objectexecute (выполнение объекта) - обработчик события, возникающего при определенных
действиях в связанном с акцией специальном OLE-объекте. Рассмотрим немного подробнее данный
объект. Для того чтобы можно было задействовать настоящий обработчик, необходимо присутствие на
форме объекта типа OLE2 -сервер или OLE custom control. Далее необходимо, чтобы OLE объект
поддерживал технологию обмена данными полей FX/Notesflow, и конкретный класс, реализующий OLE
объект, содержал метод ActionLinkSet. Всем этим условиям удовлетворяет объект Sheet - электронная
таблица Lotus Spreadsheet Component из комплекта Lotus Components. Для связи объекта с акцией, у
последней необходимо установить свойство Publish Action with OLE object с закладки Advanced.
Далее можно, например, в событии Postopen формы разместить следующий код:
Sub Postopen(Source As Notesuidocument)
Source.EditMode = True
Call Source.GoToField("Body")
If source.IsNewDoc Then
Set VSheet = Source.CreateObject("Sheet", _
"Lotus.Spreadsheet.1")
Else
Set VSheet = Source.GetObject("Sheet")
End If
Call VSheet.ActionLinkSet(-600, "MyObjectExecute")
End Sub
Здесь обработчик события Postopen, первым делом, переводит документ в режим редактирования,
затем для нового документа в поле Body создается объект с именем Sheet, являющийся электронной
таблицей Lotus Spreadsheet Component из комплекта Lotus Components, и переменной VSheet
присваивается ссылка на этот объект. Для существующих документов скрипт просто получает ссылку на
OLE-объект Sheet из поля Body. В последнем операторе скрипта осуществляется «связывание» события
клика мыши по таблице Vsheet с LotusScript кодом собственно документа. Это осуществляется через
метод ActionLinkSet(EventlD, EventName) объекта Sheet. Первый аргумент метода определяет событие из
OLE-объект (в нашем случае это клик мыши «LC_CLICK = -600»), второй аргумент - имя объекта, событие
Objectexecute которого должно выполниться по факту события из OLE-объекта, определенного в первом
аргументе. В нашем случае MyObjectExecute имя акции формы, скрипт Objectexecute которой выполнится
по факту клика на электронной таблице.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
123
Далее в акции MyObjectExecute устанавливаем свойство Publish Action with OLE object с закладки
Advanced и определяем обработчик события Objectexecute:
Sub Objectexecute(Source As Button,
Data As Variant)
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim my_str As String
Set uidoc
= workspace.CurrentDocument
Set VSheet = uidoc.GetObject("Sheet")
my_str = |Номер текущего столбца = | & VSheet.Col & Chr(lO) & _
| Номер текущей
строки = | & VSheet.Row & Chr(lO) & _
| Значение в текущей ячейке = | & VSheet.Text
Messagebox my_str,
48,
"Пример для Objectexecute"
End Sub
Теперь при клике на ячейку электронной таблицы мы можем получить следующий результат:
Рис. 4.78 Результат работы приведенного примера
Опять вернемся в объектно-событийную панель. У акции остались не рассмотрены два объекта:
•
Initialize (инициализация) - обработчик события по факту создания объекта акция.
•
Terminate (завершение) - обработчик события по факту выгрузки объекта акции из памяти.
Реально происходит при закрытии формы.
При выборе у объекта Click в поле Run значения JavaScript или Common JavaScript в объектнособытийной панели появляются следующие объекты:
•
onBlur (обработчик, выполняющийся при потере фокуса). Событие поддерживается только в Webприложениях. В группе полей Run присутствуют неизменяемые значения Web и JavaScript;
• onClick (обработчик, выполняющийся при однократном клике мыши). Событие поддерживается в
клиенте Notes и в Web-приложениях. В группе полей Run можно выбирать значения Client/ Web и
JavaScript/Common JavaScript;
• onDblClick (обработчик, выполняющийся при двойном клике мыши). Событие поддерживается
только в Web-приложениях;
•
onFocus (обработчик,
выполняющийся
поддерживается только в Web-приложениях;
при
получении
объектом
фокуса).
Событие
•
onHelp (обработчик, выполняющийся по факту вызова справки по клавише F1). Событие
поддерживается только в Web-приложениях;
©InterTrust Со, Тел. (495) 9567928 http://www.intertrust.ru
124
•
onKeyDown (обработчик, выполняющийся при нажатии на клавишу клавиатуры). Событие
поддерживается только в Web-приложениях;
•
onKeyPress (обработчик, выполняющийся при нажатии или отпускании после нажатия на клавишу
клавиатуры). Событие поддерживается только в Web-приложениях;
•
onKeyUp (обработчик, выполняющийся при отпускании после нажатия на клавишу клавиатуры).
Событие поддерживается только в Web-приложениях;
•
onMouseDown (обработчик, выполняющийся
поддерживается только в Web-приложениях;
при
нажатии
на
кнопку
мыши).
Событие
•
onMouseMove (обработчик, выполняющийся, когда указатель мыши перемещается в рамках
объекта). Событие поддерживается только в Web-приложениях;
•
onMouseOut (обработчик, выполняющийся, когда указатель мыши уходит с объекта). Событие
поддерживается только в Web-приложениях;
•
onMouseOver (обработчик, выполняющийся, когда указатель мыши попадает на объект). Событие
поддерживается только в Web-приложениях;
•
onMouseUp (обработчик, выполняющийся при отпускании после нажатия на кнопку мыши).
Событие поддерживается только в Web-приложениях.
Для смены языка программирования с JavaScript на другой, необходимо проделать эту операцию у
объекта onClick
4.8.7
Общие акции - shared action
Кроме уже рассмотренных в данном разделе акций, которые сохраняются вместе с содержащими их
элементами дизайна верхнего уровня (форма, страница, вид или папка), в Domino/Notes можно
определить акции, сохраняемые отдельно от других элементов дизайна. Их называют Shared Action
(общие акции). Данные акции удобно применять, когда в различных элементах дизайна должны
выполняться одни и те же действия. Например, можно создать акцию, которая сохраняет документ,
находящийся в режиме редактирования, и затем закрывает текущее окно.
Для создания общей акции необходимо в списке элементов дизайна БД дизайн панели Domino
Designer перейти в раздел Shared Code -> Actions. При этом, в панели тела элемента дизайна откроется
список уже определенных общих акции, или пустой список, если таковых акций еще нет в БД.
Папка элементов дизайна Shared Actions в своем левом верхнем углу может содержать до двух
кнопок: New Shared Action (новая общая акция) и New Shared Action Note (новая запись для общих
акций). Последняя появляется только в случае, если БД установлено свойство многоязыковой поддержки
(Multilingual database, см. раздел 2.3.4). Более подробно работа с акциями в БД с многоязыковой
поддержкой будет рассмотрена позднее в настоящем разделе.
Создать простую новую общую акцию можно с помощью либо кнопки New Shared Action, либо меню
Create -> Design -> Shared Action. Объектно-событийная панель в режиме Shared Actions будет
отображать все определенные в БД общие акции и их подобъекты, а панель программного кода обработчики соответствующих событий конкретной акции.
Для доступа к свойствам уже существующей общей акции нужно два раза кликнуть мышью на строке
с именем акции в панели тела элемента дизайна. При этом, откроется окно свойств конкретной акции. В
остальном определение параметров акции в окне свойств, объектно-событийной и программной панелях
ничем не отличается от уже рассмотренных однократно используемых акций.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust
125
После определения Shared Action ее можно перенести в элементы дизайна верхнего уровня. Для
этого в последних надо установить фокус на панели акций и затем воспользоваться меню либо Create ->
Action -> Insert Shared Action (для форм и страниц), либо Create -> Insert Shared Action (для видов и
папок). Для общей акции в панели акций элемента дизайна верхнего уровня не доступны для изменения
ни параметры окна ее свойств, ни код из программной панели; допускается только изменять порядок
следования общих акций при отображении с помощью операции drag&drop. Двойной клик по общей акции
в панели акций элемента дизайна верхнего уровня открывает на редактирование эту акцию в папке
элементов дизайна Shared Actions.
Для БД с многоязыковой поддержкой работа с общими акциями может немного отличаться. По
кнопке New Shared Action Note можно создать несколько группирующих записей для всех общих акций,
имеющих отношение к одному поддерживаемому языку. Далее у группирующей записи можно установить
поддерживаемый ей язык. Для этого к ней надо обратиться как к записи дизайна верхнего уровня, т.е.
выбрать запись в папке элементов дизайна Shared Actions, и воспользоваться меню: Design -> Design
Properties. В окне свойств этой записи на закладке Design в поле Language выбираем поддерживаемый
акциями этой группы язык.
Рис. 4.79 Закладка Design для Shared Action Note
После создания группирующей записи для создания в ней определенной акции необходимо встать в
папке элементов дизайна Shared Actions на нужную группирующую запись или акцию из этой группы, а
затем, как обычно, воспользоваться кнопкой New Shared Action, либо меню Create -> Design -> Shared
Action.
У акций, созданных в БД с многоязыковой поддержкой, на закладке Action Info появляется новая
секция с единственным полем Action ID (идентификатор акции), содержащим числовое значение. Для
этого поля разработчик должен добиться выполнения двух условий:
• в рамках одной группирующей записи все значения Action ID должны быть уникальны. Это поле для
удобства еще отображается и в папке элементов дизайна Shared Actions;
• аналогичные по действиям акции в разных группирующих записях должны иметь одинаковое
значение поля Action ID. Например, если для акции «Сохранить» из Russian группирующей записи для
Action ID указано значение 3, то и для акции «Save» из English группирующей записи значение поля
Action ID тоже должно быть 3.
При встраивании общих акций в БД с многоязыковой поддержкой в окне Insert Shared Action
отображаются общие акции, относящиеся только к текущему поддерживаемому Domino Designer языку,
согласно User Preferences. Однако, после сохранения элемента дизайна, содержащего такие акции,
выполняемое акцией действие будет определяться по текущим настройкам User Preferences. Связь в
этом случае определяется по полю Action ID.
4.9 Панель акций как объект - action bar
Панель акций (Action Bar) в Domino/Notes так же является объектом, и хотя он не представлен в
объектно-событийной панели, свойства у него имеются. Для доступа к свойствам объекта Action Bar
необходимо в панели акций Domino Designer встать на любую акцию, и воспользоваться меню Design ->
Action Bar Properties. При этом, появится окно свойств панели акций с шестью закладками. Последняя
Button Font (шрифт кнопки) определяет параметры шрифта надписи на кнопках акции. Закладка
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
126
практически полностью идентична закладке Font tab окна свойств поля (см. раздел 4.3.3). Рассмотрим
подробнее другие закладки окна свойств панели акций.
4.9.1
На первой закладке
Action Bar Info - общая информация о панели акций
Action Bar Info (общая информация о панели акций) содержит две секции:
Рис. 4.80 Закладка Action Bar Info окна свойств панели акций
Первая из них Alignment (выравнивание) включает только одно поле со значениями: Buttons start at
left (отсчет позиции кнопок акций идет слева) и Buttons start at right (отсчет позиции кнопок акций идет
справа). Выбор Buttons start at left ведет к тому, что первая, согласно расположению в панели акций
формы/страницы/вида, кнопка акции будет расположена в панели акций первой слева, при опущенном у
акции флаге Right align action button или справа при поднятом флаге. Если у Alignment будет
установлено значение Buttons start at right, то выравнивание кнопок акций будет идти с точностью до
наоборот.
Секция Web Access (доступ через Web) содержит единственное поле Display (отображение),
предлагающее на выбор два значения: Using HTML (использовать HTML) и Using Java Applet
(использовать Java апплет). Подробнее трансляция акций в Web будет рассмотрена в разделе 4.9.6.
4.9.2
Закладка
Action Bar Size - размер панели акций
Action Bar Size (размер панели акций) содержит две секции:
Рис. 4.81 Закладка Action Bar Size окна свойств панели акций
В секции Bar Height (высота панели) присутствует поле-список, определяющее как будет задаваться
высота панели акций. Это поле содержит следующие значения:
• Default (по умолчанию). В этом случае высота определяется автоматически, остальные элементы
интерфейса на закладке Action Bar Size недоступны;
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
127
• Exs. При таком выборе высота панели акций прямо пропорциональна размеру строчного шрифта,
выбранного во второй секции закладки. Коэффициент пропорции определяется в одноименном поле
закладки в виде числового значения;
• Fixed (фиксированная высота). В этом случае высота панели акций определяется в пикселях через
одноименное поле, представленное ниже.
4.9.3
Закладка
Action Bar Background - цвет фона панели акций
Action Bar Background (цвет фона панели акций) имеет следующий вид:
Рис. 4.82 Закладка Action Bar Background окна свойств панели акций
Все элементы интерфейса закладки имеют свои аналоги на одноименной закладке окна свойств
формы (см. раздел 4.1.4).
4.9.4
Закладка
Action Bar Border - параметры границ панели акций
Action Bar Border (параметры границ панели акций) имеет следующий вид:
Рис. 4.83 Закладка Action Bar Border окна свойств панели акций
Первые три секции закладки идентичны соответствующим секциям одноименной закладки окна
свойств статичного текста (см. раздел 4.4.2).
Секция Old Style Bottom Border (deprecated) (старый стиль границ) доступна только для
приложений, подготовленных в версиях R 5. Для таких приложений панель акции по умолчанию
отделялась от собственно документа горизонтальной линией. Для изменения внешнего вида границы,
разделяющей документ и панель акций, используются следующие поля текущей секции:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
128
•
Width (ширина) из этой секции предлагает на выбор одно из четырех значений:
• None (никакой). Граница отсутствует;
• Fit to window (подгонка под размеры окна). Размеры границы соответствуют размерам
окна;
• Fixed width (фиксированная ширина). При данном выборе в секции появляется
дополнительное поле, определяющее реальную ширину границы в сантиметрах;
• Under buttons only (только под кнопками). Линия рисуется только под отображаемыми
кнопками.
•
Color (цвет) определяет цвет линии границы. При выборе значения появляется модальное окно,
уже рассмотренное нами в параграфе 4.1.2 в полях определения цвета ссылок. Единственное отличие
от рассмотренного примера, что в правом верхнем углу окна основного определения цвета объектов
(см. Рис. 4.9), в дополнение к кнопке
появились две радиокнопки
и . Последняя выбрана по
умолчанию, и при этом значении выбор цвета ничем не отличается от ранее рассмотренного. Клик по
кнопке приводит к появлению в поле Color значения (nоnе) (никакой), и цвет границы в интерфейсе
клиента Notes становится черным;
•
Style (стиль) определяет внешний вид границы. Допустимые значения: One pixel (высота границы
в один пиксель), Two pixels (два пикселя), Three pixels (три пикселя) и Double (двойная линия).
4.9.5
Закладка
Button Properties - свойства кнопок акций
Button Properties (свойства кнопок акций) содержит три секции:
Рис. 4.84 Закладка Button Properties окна свойств панели акций
Первая секция Button Size (размер кнопок акций) определяет высоту (Height) кнопок, их ширину
(Width) и отступ (Margin) от собственно кнопок до верхней и нижней границы панели акций. Поле Height
предлагает на выбор следующие значения: Default (значение по умолчанию), Minimum size
(минимальный размер), Background size (размер подложки) и Fixed size (фиксированный размер). Для
значений Minimum size и Fixed size появляется дополнительное поле, определяющее высоту кнопок в
пикселях. В поле Width доступно для выбора одно из следующих значений: Default (значение по
умолчанию), Background size (размер подложки) и Fixed size (фиксированный размер). В последнем
случае появляется дополнительное поле, определяющее ширину кнопок в пикселях. Для Margin, помимо
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
129
значения Default (значение по умолчанию), можно выбрать Fixed size (фиксированный размер) и
установить реальный размер отступа в пикселях в появившемся поле. При установке Background size как
в поле Height, так и в Width, размер кнопки акции «подгоняется» под размер подложки кнопки из поля
Image секции Button Background.
Секция Button Options (параметры кнопок) содержит:
• поле-список Display border (отображение границ кнопок). В поле для выбора представлены
следующие значения:
• On Mouse Over (при проходе указателя мыши через кнопку). Изначально границы кнопок
не отображаются;
• Always (всегда);
• Never (никогда);
• Notes Style (в стиле клиента Notes);
• поле-список Align text (выравнивание текста), которое определяет параметры выравнивания
надписи кнопки. Значения из этого поля влияют на выравнивание текста только в пространстве,
оставшемся после вывода иконки кнопки. Другими словами, выравнивание относительно самой иконки
определяется в поле Location закладки Action Info свойств конкретной акции (см. раздел 4.8.1). Поле
Align text предлагает на выбор следующие значения: Left (выравнивание по левому краю), Center
(выравнивание по центру) и Right (выравнивание по правому краю);
• поле Internal margins (внутренние поля) определяет отступ содержимого кнопки от ее границ.
Допускаются только числовые значения;
• флаг Always show drop down (всегда показывать наличие раскрывающегося списка). Данный флаг
доступен только при выборе в поле Display border значения On Mouse Over. Поднятый флаг
отображает на акции, которая содержит подакции, иконку треугольника независимо от прохода через
акцию указателя мыши.
Секция Button Background (фон кнопок) содержит два поля Color (цвет) и Image (графическое
изображение), а так же две кнопки
и
. Определение фона кнопок не отличается от определения фона
формы (см. раздел 4.1.4).
4.9.6
Трансляция акций формы в Web
При трансляции акций в Web наиболее важными являются два параметра: Use JavaScript when
generation pages из окна свойств БД (см. раздел 2.3.1) и Using Java Applet окна свойств панели акций.
Кроме всего прочего, эти два параметра взаимосвязаны. Если у БД не установлено свойство Use
JavaScript when generation pages, и разработчик пытается установить свойство Using Java Applet, то на
это будет выдано сообщение:
Рис. 4.85 Окно, предлагающее установить у БД свойство Use JavaScript when generation pages
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
130
Текст в окне гласит: «Это свойство требует, чтобы у БД было установлено свойство Use JavaScript
when generation pages. Вы хотите установить это свойство сейчас?». Для выбора предлагаются три
кнопки Yes (да), No (нет) и Cancel (отмена).
При установке обоих значений Use JavaScript when generation pages и Using Java Applet в Web
передается наибольшее число атрибутов как самих акций, так и панели акции. При этом, в Web
транслируются все акции, содержащие в обработчике события клик - код на @-формулах или JavaScript
Соответственно в генерируемую HTML-страницу не передаются акции, использующие LotusScript или
Simple Action. Для @-формул и JavaScript в момент генерации страницы сам код не проверяется на его
корректность. Например, акция может содержать функцию @Prompt, и она (акция) будет в Web передана
Передача акции с подакциями в Web отличается от интерфейса клиента Notes.
Рис. 4.86 Отображение в виде апплета панели акции с подакциями в Web
Если у панели акции для свойства Web Access установлено значение Using HTML, то параметров,
собственно, акций и панели акций в Web передается меньше. Панель акций, в этом случае, преобразуется
в теги <TABLE ...> ... </TABLE>, а сами кнопки в теги <TD><A ...> ... </A></TD>. Двухуровневые акции
будут отображаться в Web «как есть», т.е. для акции, например, «Go to\Inbox», и на кнопке будет написано
«Go to\Inbox».
Если у БД опустить флаг Use JavaScript when generation pages в Web будет транслировано
значительно меньшее число акции (подробнее см. раздел 2.3.1). В остальном внешний вид панели акции и
собственно акция не будут отличаться от рассмотренного выше случая, когда флаг Use JavaScript when
generation pages поднят, а у панели акций для свойства Web Access установлено значение Using HTML.
4.10 Гиперобъект «кнопка» - button
В NOTES/DOMINO РЯД элементов дизайна объединены одним групповым именем Hotspot
(гиперобъект). Гиперобъекты представляют собой активные участки формы (страницы) которые по
определенным действиям пользователя (проход указателя мыши через объект, или клик мыши
выполняют определенные действия (например, переход у другому документу). Первой из гиперобъектов
рассмотрим кнопку (Button).
Для создания кнопки нужно установить курсор в теле формы на место, где эта кнопка должна
находиться, и воспользоваться пунктами меню Create -> Hotspot -> Button. После этого в бланке формы
появится, собственно, кнопка, и сразу откроется окно свойств кнопки. Для получения доступа к свойствам
уже существующей кнопки, необходимо установить курсор в бланке формы на кнопку (она не должна быть)
выделена). При этом, в меню верхнего уровня появится пункт Button, состоящий из двух подпунктов:
•
Button Properties (свойства кнопки). Вызывает соответственно окно свойств кнопки;
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.
131
• Edit Button (редактировать кнопку). Пункт меню доступен только для кнопки, определенной в
рамках Rich Text полей. Вызывает в интерфейсе клиента Notes редактор для изменения свойств
кнопки и действий, определяемых по нажатию на последнюю.
Рассмотрим подробнее свойства кнопки, представленные в окне свойств. Закладки
Font tab,
Paragraph Alignment,
Paragraph Hide When и
Button Extra HTML, с точки зрения
интерфейса, практически полностью идентичны одноименным закладкам, рассмотренным в контексте
свойств поля (см. разделы 4.3.3, 4.3.4, 4.3.5 и 4.3.6). Изменения в интерфейсе возникают на закладке
Button Extra HTML, где поле Name (имя) доступно для редактирования (на закладке Field Extra HTML
поле имеет статус только для чтения). Значение из поля Name транслируется для Web-приложений в
одноименный атрибут тега <INPUT TYPE=button ... >.
Закладки
Paragraph Margins и
Paragraph Styles объекта Button по элементам
интерфейса тоже имеют аналоги из уже рассмотренных ранее. Это одноименные закладки статичного
текста (см. разделы 4.4.1 и 4.4.3). Так же следует отметить, что параметры с закладок Paragraph
Alignment, Paragraph Margins, Paragraph Hide When и Paragraph Styles применяются целиком к абзацу,
а не только к объекту «кнопка». И только Font tab воздействует на свойства шрифта надписи на кнопке, а
не текста абзаца.
Из нерассмотренных закладок окна свойств кнопки у нас осталась только первая Button Info (общая
информация о кнопке), перейдем к ней.
4.10.1 Button Info - общая информация о «кнопке»
Закладка
интерфейса:
Button Info (общая информация о «кнопке») представляет следующие элементы
Рис. 4.87 Закладка Button Info окна свойств кнопки
Секция Label (надпись) содержит текстовое поле, которое, собственно, и задает надпись,
появляющуюся на кнопке, и флаг Wrap label text as needed (разрешить перенос текста надписи на кнопке,
если это необходимо). Смысл полей ясен из названия.
В секции Width (ширина) присутствует поле-список, которое определяет, как будет влиять на ширину
кнопки значение из предшествующего текстового поля. Поле-список предлагает на выбор следующие
значения:
• Maximum width (максимальная ширина). В этом случае, предшествующее поле определяет
максимальный размер кнопки по горизонтали. Реальная длина кнопки может быть меньше, если
размер выводимой надписи на кнопке значительно меньше установленного значения. Не все значения
допустимы для предшествующего текстового поля. Например, при опущенном флаге Wrap label text
as needed нельзя установить значение меньше реальной длины отображаемой надписи.
Функциональное предназначение опции Maximum width состоит в совместном использовании с
поднятым флагом Wrap label text as needed. Данная комбинация значений позволяет определить
максимальную ширину кнопки, после которой надо осуществлять перенос текста надписи;
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
132
•
Minimum width (минимальная ширина). Реальная длина кнопки может быть больше, если размер
выводимой надписи на кнопке больше значения, установленного в предшествующем поле. Аналогично
с Maximum width для текстового поля допустимы не все значения. С точки зрения функциональности,
опция Minimum width запрещает уменьшать длину кнопки (даже если это возможно) в зависимости от
реального значения текста надписи;
•
Fixed width (фиксированная ширина). Позволяет точно задать длину кнопки. При опущенном
флаге Wrap label text as needed и реальной длине выводимой надписи больше значения,
установленного в предшествующем поле, происходит «усечение» выводимой надписи на кнопке;
•
Fit content (подогнать к содержимому). Реальная длина кнопки будет зависеть от значения
выводимой надписи. При данном выборе содержимое предыдущего поля игнорируется;
•
Fixed (chars) (фиксированная ширина, определяемая в выводимых символах надписи).
Секция Style (стиль) содержит два поля-списка:
•
Background (цвет фона). Определение цвета фона кнопки аналогично цвету фона формы;
•
Edge (граница). Поле определяет границу кнопки. Допустимыми являются следующие значения:
• System (системный стиль границ кнопки);
• Square (квадратные границы кнопки). Из личного опыта автора, не обнаруживается
различий между значениями System и Square;
• Rounded (скругленные границы кнопки).
Секция Туре (тип), в первую очередь, предназначена для отображения кнопок в рамках модального
диалога (например, функция @DialogBox или одноименный метод класса NotesUIWorkspace). Значение
поля-списка секции предлагает на выбор следующие значения:
• Normal (обычный). Данный тип кнопки не вызывает никаких новых дополнительных возможностей
как при обычном отображении формы, так и при отображении в рамках модального диалога;
• ОК. В рамках модального диалога вызывает закрытие модального окна и передачу в основную
форму значений из одноименных полей модального окна;
• Cancel. В рамках модального диалога вызывает закрытие модального окна без передачи значений в
основную форму;
•
Help. Только на платформе Macintosh вызывает отображение справки.
Помимо рассмотренного поля-списка в секции Туре присутствует еще флаг Default (по умолчанию).
Значение этого флага также имеет отношение к отображению кнопок в рамках модального диалога и
определяет, у какой из кнопок установлено значение фокуса по умолчанию. Такое значение может быть
установлено только у одной кнопки в рамках формы, отображаемой в модальном диалоге. Активация
кнопки с флагом Default может быть вызвана простым нажатием клавиши Enter. Для кнопки типа Cancel с
поднятым флагом Default ее активация клавишей Enter вызывает передачу значений в основную форму
(что является ошибкой, подтвержденной IBM). Простой клик мыши по такой кнопке не вызывает передачу
значений в основную форму.
С помощью значений из секции Туре для форм модального диалога разработчик может
самостоятельно управлять размещением кнопок, отвечающих за закрытие диалога и передачу значений в
основную форму. При использовании таких кнопок вызов модального диалога есть смысл осуществлять с
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
133
флагами [NoCancel] и [NoOkCancel]. Сами кнопки, помимо закрытия диалога могут выполнять еще и
дополнительные действия, которые в этом случае необходимо определить в объектно-событийной
панели.
4.10.2 Объекты и свойства «кнопки», определяемые в объектно-событийной панели
Объекты и свойства, появляющиеся в объектно-событийной панели после создания нового объекта «кнопка», полностью идентичны одноименным объектам и свойствам, рассмотренным ранее в контексте
акций формы (см. раздел 4.8.6). Из отличий можно отметить то, что при выборе для объекта Click языка
программирования LotusScript, обработчик события Objectexecute не вызывается при активизации OLEобъекта. Это связано, скорее всего, с тем, что у кнопки, в отличие от акции формы, не существует в окне
свойств специальной закладки организующей связь кнопки с OLE-объектом (типа Advanced см. раздел
4.8.3). С другой стороны, с точки зрения LotusScript, и кнопка, и акция формы реализованы встроенным
классом Button, у которого событие Objectexecute входит в описание класса.
4.10.3 Трансляция объекта «кнопка» в Web
С трансляцией кнопок в Web напрямую связано уже неоднократно рассматриваемое нами свойство
БД Use JavaScript when generation pages (о самом свойстве см. раздел 2.3.1, о трансляции акций в Web
- раздел 4.9.6).
При поднятом флаге Use JavaScript when generation pages в Web транслируются все кнопки,
содержащие в обработчике события клик, код на @-формулах или JavaScript. Соответственно в
генерируемую HTML-страницу не передаются кнопки, использующие LotusScript или Simple Action. Для @формул и JavaScript в момент генерации страницы сам код не проверяется на его корректность.
Например, кнопка может содержать функцию @Prompt, и, тем не менее, в Web кнопка будет передана.
С точки зрения HTML, кнопка транслируется в Web в виде тега <INPUT TYPE=button ...>. Значение
свойства Label передается в атрибут VALUE. Остальные свойства кнопки с закладок Button Info и Font
tab на Web-приложения влияния не оказывают.
Значения из полей закладки Button Extra HTML окна свойств кнопки, включая поле Name,
транслируется в Web в одноименный атрибут тега <INPUT TYPE=button ... >.
При опущенном флаге Use JavaScript when generation pages в Web транслируются все кнопки,
содержащие код Common JavaScript или Web/JavaScript. Из оставшихся кнопок в Web транслируется
лишь одна в виде тега <INPUT TYPE=submit ...>, остальные кнопки формы при этом игнорируются.
4.11 Гиперобъект «действие» - action hotspot
Все гиперобъекты, за исключением «кнопки» (Button), работают с выделенными участками формы
(страницы). Поэтому для создания таких гиперобъектов необходимо сначала выделить участок формы и
затем воспользоваться пунктами меню Create -> Hotspot ->
тип_гиперобъекта.
Согласно
документации, для выделения под гиперобъект допускается выбрать участок формы, содержащий либо
статичный текст, либо графическое изображение. Из опыта можно сказать, что допускается создание
гиперобъектов над участком формы, содержащей и текст, и графику. Правда, существуют достаточно
специфичные случаи, когда поведение таких объектов неадекватно.
Первым из оставшихся гиперобъектов рассмотрим гиперобъект «действие» (Action Hotspot). С точки
зрения функциональности, Action Hotspot очень похож на акции и кнопки, отличия состоят в том, что для
активизации последних нужно нажать на кнопку, а для Action Hotspot - на активный участок формы. Для
создания Action Hotspot используются пункты меню Create -> Hotspot -> Action Hotspot. Это вызовет
генерацию вокруг выделенного участка формы гиперобъекта действие, и сразу же откроется его окно
свойств. Для получения доступа к свойствам уже существующего Action Hotspot, необходимо установить
курсор в бланке формы на гиперобъект (он не должен быть выделен). При этом в меню верхнего уровня
появится пункт Hotspot, состоящий из трех подпунктов:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
134
•
Hotspot Properties (свойства гиперобъекта). Вызывает соответственно окно свойств гиперобъекта;
•
Remove Hotspot (удалить гиперобъект);
•
Edit Hotspot (редактировать гиперобъект). Пункт меню доступен только для гиперобъектов,
определенных в рамках Rich Text полей. Вызывает в интерфейсе клиента Notes редактор для
изменения свойств гиперобъекта и действий, определяемых по нажатию на последний.
Рассмотрим подробнее свойства гиперобъекта «действие», представленные в окне свойств.
Закладки
Font tab,
Paragraph Alignment,
Paragraph Hide When и
Hotspot Extra
HTML (дополнительные HTML параметры гиперобъекта), с точки зрения интерфейса, практически
полностью идентичны одноименным закладкам, рассмотренным в контексте свойств поля (см. разделы
4.3.3, 4.3.4, 4.3.5 и 4.3.6). Аналогично объекту «кнопка», у Action Hotspot на закладке Hotspot Extra HTML
доступно для редактирования поле Name (имя). Значение из поля Name транслируется для Webприложений в одноименный атрибут тега <А HREF ... >.
Закладки
Paragraph Margins и
Paragraph Styles объекта Action Hotspot по элементам
интерфейса тоже имеют аналоги из уже рассмотренных ранее. Это одноименные закладки статичного
текста (см. разделы 4.4.1 и 4.4.3). Так же следует отметить, что параметры с закладок Paragraph
Alignment, Paragraph Margins, Paragraph Hide When и Paragraph Styles применяются целиком к абзацу,
а не только к гиперобъекту. И только Font tab воздействует на свойства шрифта либо статичного текста
внутри гиперобъекта, либо заголовка графического изображения, но не текста абзаца.
Из нерассмотренных закладок окна свойств гиперобъекта «действие» у нас осталась только первая
Hotspot Info (общая информация о гиперобъекте), перейдем к ней.
Рис. 4.88 Закладка Hotspot Info окна свойств гиперобъекта действие
Секция Frame (фрейм) содержит текстовое поле, определяющее целевой фрейм, в рамках которого
будет выполнено действие гиперобъекта. Свойство аналогично параметру Target Frame объекта «акция» (см. раздел 4.8.1). Свойство поддерживается в Web-приложениях.
Секция Display (отображение) содержит единственный флаг Show border around hotspot
(показывать рамку вокруг гиперобъекта). Поднятый флаг в интерфейсе клиента Notes отображает вокруг
гиперобъекта зеленую рамку. При определенных условиях значение Show border around hotspot может
оказывать влияние на Web-приложения. Это происходит, если в качестве основы для гиперобъекта
выбрано графическое изображение, у которого при отображении в Web нет атрибута BORDER (см. раздел
4.6.2). Тогда при опущенном флаге Show border around hotspot в тег <IMG SRC ... > графического
изображения транслируется атрибут BORDER=0. В других случаях данный флаг дополнительных
атрибутов в тегах не создает.
Объекты и свойства, появляющиеся в объектно-событийной панели после создания нового объекта
Action Hotspot, полностью идентичны одноименным объектам и свойствам гиперобъекта «кнопка» (см.
раздел 4.10.2).
Гиперобъект Action Hotspot транслируется в Web тегом <А HREF ... >. Сами действия передаются
либо в атрибут HREF, либо в обработчик события onClick. В остальном трансляция Action Hotspot в Web
аналогична Button (см. раздел 4.10.3).
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
135
4.12 Гиперобъект «всплывающее текстовое окно» - text pop-up
Гиперобъект «всплывающее текстовое окно» (Text Pop-up) позволяет разработчикам создавать
всплывающие окна подсказки. Данный гиперобъект можно создать, предварительно выделив участок
формы, с помощью пунктов меню Create -> Hotspot -> Text Pop-up. Это вызовет генерацию вокруг
выделенного участка формы гиперобъекта «всплывающее текстовое окно», и сразу же откроется его окно
свойств. Для получения доступа к свойствам уже существующего Text Pop-up, необходимо установить
курсор в бланке формы на гиперобъект (он не должен быть выделен). При этом в меню верхнего уровня
появится пункт Hotspot, состоящий из двух подпунктов:
•
Hotspot Properties (свойства гиперобъекта). Вызывает соответственно окно свойств гиперобъекта;
•
Remove Hotspot (удалить гиперобъект).
Рассмотрим подробнее свойства гиперобъекта «всплывающее текстовое окно», представленные в
окне свойств. Закладки
Font tab,
Paragraph Alignment,
Paragraph Margins,
Paragraph Hide When и
Paragraph Styles, с точки зрения интерфейса, идентичны одноименным
закладкам, рассмотренным в контексте свойств гиперобъекта действие (см. раздел 4.11). Обратите
внимание, что в окне свойств гиперобъекта отсутствует закладка Hotspot Extra HTML, это связано с тем,
что гиперобъект всплывающее текстовое окно в Web не транслируется. Еще одно отличие Text Pop-up от
других рассмотренных гиперобъектов состоит в том, что он не присутствует в объектно-событийной
панели.
Основные свойства гиперобъекта «всплывающее текстовое окно» определяются на первой закладке
Hotspot Popup Info (общая информация о гиперобъекте всплывающее текстовое окно).
Рис. 4.89 Закладка Hotspot Popup Info окна свойств гиперобъекта всплывающее текстовое окно
Первая секция Popup text (всплывающий текст) содержит единственное поле, предназначенное для
ввода текста всплывающей подсказки.
Секция Display (отображение) содержит две подсекции: Show popup (когда показывать
всплывающее окно) и Hotspot style (внешний вид гиперобъекта). В подсекции Show popup присутствуют
две радиокнопки: On mouse over (при проходе через гиперобъект указателя мыши) и On click (при клике
мыши). Внешний вид гиперобъекта (Hotspot style) выбирается из трех радиокнопок:
• Border the text (граница вокруг гиперобъекта). Содержимое гиперобъекта при этом выборе
обрамлено зеленой рамкой;
• Highlight the text (подсветка фона вокруг гиперобъекта).
подсвечивается цветом фона (аналогично маркеру на бумаге);
Содержимое
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
гиперобъекта
136
•
None (отсутствует). Содержимое гиперобъекта не отличается от остального текста или графики
формы (т.е. нет ни подсветки фоном, ни заключения в рамку).
Рис. 4.90 Внешний вид гиперобъекта текстовое всплывающее окно в интерфейсе клиента Notes
4.13 Гиперобъект «всплывающее окно», определяемое по (@-формуле, formula pop-up
Гиперобъект «всплывающее окно», определяемое по @-формуле (Formula Pop-up), с точки зрения
функциональности, отличается от гиперобъекта Text Pop-up тем, что у первого «всплывающий» текст не
жестко зашит в элементе, а задается @-формулой. Создание гиперобъекта над выделенным участком
формы осуществляется с помощью пунктов меню Create -> Hotspot -> Formula Pop-up. При этом, кроме
создания гиперобъекта и открытия его окна свойств, в объектно-событийной панели появляется объект
Hotspot, с единственным подобъектом Click. Данный объект определяет @-формулу для всплывающего
текста. Например, @-формула может быть следующей: "Текущее время:" + @Text( @Time( @Now))
Обратите внимание, что хотя объект называется Click (т.е. клик мыши), результат формулы
используется как для клика мыши, так и при проходе указателя мыши через гиперобъект (все зависит от
свойств подсекции Show popup окна свойств гиперобъекта). Так же как и Text Pop-up, гиперобъект
Formula Pop-up не транслируется в Web. Еще одно отличие Formula Pop-up от Text Pop-up состоит в
том, что у первого в меню Hotspot присутствуют три, а не два подпункта. Дополнительный подпункт: Edit
Hotspot (редактировать гиперобъект). Пункт меню доступен только для гиперобъектов, определенных в
рамках Rich Text полей. Вызывает в интерфейсе клиента Notes редактор для изменения свойств
гиперобъекта и @-формулы, определяющей «всплывающий» текст.
В окне свойств гиперобъекта «всплывающее окно», определяемое по @-формуле последние пять
закладок:
Font tab,
Paragraph Alignment,
Paragraph Margins,
Paragraph Hide
When и
Paragraph Styles, с точки зрения интерфейса, идентичны одноименным закладкам,
рассмотренным в контексте свойств гиперобъекта Text Pop-up (см. раздел 4.12). Отличие первой закладки
Info (общая информация о гиперобъекте) от одноименной закладки гиперобъекта Text Pop-up
состоит в том, что у первой отсутствует секция Popup text, в остальном они идентичны.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
137
Рис. 4.91 Закладка Info окна свойств гиперобъекта Formula Pop-up
4.14 Гиперобъект «ссылка» - link hotspot
Гиперобъект ссылка (Link Hotspot) используется для создания активных ссылок на другие объекты
Lotus/Domino и ресурсы интернета. Создание гиперобъекта над выделенным участком формы
осуществляется с помощью пунктов меню Create -> Hotspot -> Link Hotspot. Это вызовет генерацию
вокруг выделенного участка формы гиперобъекта «ссылка», и сразу же откроется его окно свойств. Для
получения доступа к свойствам уже существующего Link Hotspot, необходимо установить курсор в бланке
формы на гиперобъект (он не должен быть выделен). При этом в меню верхнего уровня появится пункт
Hotspot, состоящий из двух подпунктов:
•
Hotspot Properties (свойства гиперобъекта). Вызывает соответственно окно свойств гиперобъекта;
•
Remove Hotspot (удалить гиперобъект).
Гиперобъект Link Hotspot не присутствует в объектно-событийной панели.
Рассмотрим подробнее свойства гиперобъекта «ссылка», представленные в окне свойств. Закладки
Font
tab,
Paragraph Alignment,
Paragraph Margins,
Paragraph Hide When,
Paragraph Styles и
Hotspot Extra HTML, с точки зрения интерфейса, практически полностью
идентичны одноименным закладкам, рассмотренным в контексте свойств гиперобъекта «действие» (см.
раздел 4.11). Отличия возникают на закладке Hotspot Extra HTML, где поле Name (имя) недоступно для
редактирования. Еще одно отличие Link Hotspot от гиперобъекта «действие» состоит в том, что первый
не присутствует в объектно-событийной панели.
Основные свойства гиперобъекта ссылка определяется на первой закладке
(общая информация о гиперобъекте).
Hotspot Info
Рис. 4.92 Закладка Hotspot Info окна свойств гиперобъекта «ссылка»
Для секции Content (содержимое) главным является поле-список Туре (тип), определяющее
соответственно тип ссылки. Допустимыми значениями для Туре являются следующие:
• Link (Notes-гиперссылка). Для использования данного типа ссылки необходимо предварительно
скопировать Notes-гиперссылку в буфер обмена. Например, через пункты меню Edit -> Copy As Link > Anchor Link, Edit -> Copy As Link -> Document Link, Edit -> Copy As Link -> View Link или Edit ->
Copy As Link -> Database Link. Данные пункты меню реализуют копирование в буфер обмена Notesгиперссылок соответственно на закладку типа якорь на документе, на сам документ, на вид или папку и
на базу данных. После копирования Notes-гиперссылки в буфер обмена ее необходимо вставить в
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
138
объект Link Hotspot. Это достигается с помощью кнопки
Paste (вставить). После этого в поле,
левее поля Туре, будет отображен тип Notes-гиперссылки, т.е. Database (ссылка на БД), View (ссылка
на вид или папку), Document (ссылка на документ) и Anchor (ссылка на якорь в документе). В поле
Value (значение) при этом отображаются некоторые уточняющие параметры «ссылки» (например, для
Database это заголовок БД). Оба недоступны для редактирования;
•
Named Element (поименованные элементы Notes). К последним относятся объекты,
перечисленные в следующем поле, а именно: Page (страница), Form (форма), Frameset (фреймсет),
View (виды), Folder (папки) и Navigator (навигатор). Поле Value (значение) предназначено для
определения конкретного имени поименованного элемента Notes. После определения данных полей,
Link Hotspot можно будет использовать для открытия указанных объектов. Значение Value можно
внести в поле непосредственно с клавиатуры (указывается только имя без кавычек), вставить имя из
буфера обмена по кнопке
Paste (вставить), определить по @-формуле через кнопку
Formula
(формула) и выбрать из имеющихся по кнопке
Browse (просмотр). В последнем случае выдается
диалоговое окно:
Рис. 4.93 Диалоговое окно выбора поименованного элемента Notes для организации Hotspot Link
«ссылки»
Поле Kind of object (тип поименованного объекта) соответствует второму полю из строки Туре (т.е.
имеет значения Page, Form, Frameset, View, Folder и Navigator). Список Database (БД) определяет БД,
содержащую поименованный объект. Допустимые значения: - Current database - (текущая БД) и
заголовки всех БД, размещенных на рабочем пространстве разработчика). И последнее поле-список,
содержащее конкретные значения поименованных объектов, указанного типа для выбранной БД. При
клике по кнопке
Formula вызывается следующее окно:
Рис. 4.94 Окно определения действия по формуле для Link hotspot
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
139
• URL (адрес ресурса интернета). При данном выборе Link Hotspot указывает на ресурс интернета.
Конкретный адрес задается в поле Value либо напрямую с клавиатуры, либо определяется по кнопке
Formula. Контекст данной формулы так же не определен (см. замечания к фону формы, раздел
4.1.4). Экспериментально выяснено, что, например, в контексте таких формул значения полей
документа работают и для клиента Notes, и для браузера, a @IsDocBeingEdited работает только в
интерфейсе браузера.
В секции Content осталось нерассмотренным одно поле Frame (фрейм). Оно определяет целевой
фрейм, в котором будет открываться объект, определенный в Link Hotspot. Свойство транслируется в
Web.
В Web объекты Link Hotspot транслируются в виде тега <А HREF ... >. Трансляция не зависит от
свойства БД Use JavaScript when generation pages. Значение ссылки передается в атрибут HREF тега <А
HREF ... >. Для объектов Notes правильно передаются в Web только «ссылки» в пределах одного сервера
(мы не рассматриваем здесь ограничения типа ACL и недопустимого Web дизайна). Это связано с тем, что
в атрибут HREF записывается относительное значение «ссылки» (т.е., без протокола и хоста).
Секция Display (отображение) содержит единственный флаг Show border around hotspot
(показывать рамку вокруг гиперобъекта). Секция полностью идентична одноименной секции объекта
Action Hotspot (см. раздел 4.11).
4.15 Гиперобъекты, жестко связанные с графическими изображениями и
ресурсами
В параграфах, посвященных объектам типа графические изображения (Picture см. раздел 4.6) и
графические ресурсы (Image Resource см. раздел 4.7), нами были опущены при рассмотрении меню
верхнего уровня Picture две секции, имеющие отношение к гиперобъектам. Теперь, когда уже
рассмотрены основные виды гиперобъектов, возвратимся к этим секциям меню. Установим курсор в
бланке формы на графическое изображение (оно не должно быть выделено), при этом в меню верхнего
уровня появится пункт Picture. Сразу после создания графического изображения/ресурса в меню Picture
доступны все подпункты из второй секции (третья не доступна). Вторая секция меню состоит из
следующих пунктов:
•
Add Hotspot Rectangle (добавить гиперобъект типа прямоугольник);
•
Add Hotspot Circle (добавить гиперобъект типа круг);
•
Add Hotspot Polygon (добавить гиперобъект типа многоугольник);
•
Add Default Hotspot (добавить гиперобъект по умолчанию);
Третья секция меню Picture состоит следующих пунктов:
•
Hotspot Properties (свойства гиперобъекта). Вызывает окно свойств гиперобъекта.
•
Delete Selected Hotspot(s) (удалить выделенные гиперобъект[ы]).
Используя первые три подпункта второй секции меню, разработчик может создать гиперобъекты
(прямоугольник, круг или многоугольник), границы которых лежат в пределах графического
изображения/ресурса. Например, таким образом можно создать изображение карты страны и сделать на
ней ссылки на города, регионы и т. д.
Применение первых трех подпунктов меню инициирует процесс определения границ гиперобъектов.
Данный процесс аналогичен «рисованию» мышью соответствующих объектов (прямоугольник, круг или
многоугольник) в большинстве графических редакторов (например, в MS Paint). После определения
границ данных гиперобъектов открывается окно их свойств. Пункт меню Add Default Hotspot генерирует
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
140
гиперобъект
вокруг
всего
графического
изображения/ресурса.
Для
каждого
графического
изображения/ресурса может быть только один гиперобъект по умолчанию, поэтому после его создания
соответствующий пункт меню становится недоступным.
Добавить на графическое изображение/ресурс новый гиперобъект можно и из нерассмотренной нами
ранее секции Hotspots закладки Picture Info окна свойств графического изображения/ресурса (см. раздел
4.6.1). Это достигается с помощью кнопок:
Polygon (многоугольник),
Circle (круг) и
Rectangle
(прямоугольник). Сам процесс дальнейшего «рисования» гиперобъектов не отличается от аналогичного с
использованием соответствующих пунктов меню Picture. Кроме данных трех кнопок в секции присутствует
нередактируемое поле Number (число), которое отображает общее число гиперобъектов,
ассоциированных с данным графическим изображением/ресурсом. Последнее замечание, связанное с
графическим изображением/ресурсом и ассоциированными гиперобъектам, состоит в том, что при
изменении, собственно, графического изображения/ресурса (через меню Picture -> Replace Picture, или
по кнопкам
Browse и
Formula из секции Source закладки Picture Info окна свойств графического
изображения/ресурса)
ассоциированные
гиперобъекты
переходят
на
новое
графическое
изображение/ресурс.
Когда хотя бы один гиперобъект, связанный с графическим изображением/ресурсом определен и
выбран, то становятся доступными пункты из третьей секции меню Picture. Рассмотрим подробнее
свойства гиперобъектов данного типа.
Первая закладка
Hotspot Info (общая информация о гиперобъекте) имеет следующий вид:
Рис. 4.95 Закладка Hotspot Info окна свойств гиперобъектов, связанных с графическим изображением
После создания гиперобъектов, связанных с графическим изображением, им автоматически
присваивается имя по умолчанию: DefaultHotspotN для гиперобъекта по умолчанию, HotspotRectangleN
для гиперобъекта типа прямоугольник, HotspotCircleN для гиперобъекта типа круг, HotspotPolygonN для
гиперобъекта типа многоугольник. Имя по умолчанию прописывается в поле Name (имя) первой секции.
Разработчик имеет возможность поменять имя по умолчанию.
Следующая секция Content (содержимое) полностью идентична одноименной секции гиперобъекта
ссылка (Link Hotspot см. раздел 4.14).
Вторая закладка
Advanced (дополнительно) имеет следующие элементы интерфейса:
Рис. 4.96 Закладка Advanced окна свойств гиперобъектов, связанных с графическим изображением
Секция Tab Key (порядок обхода активных объектов по клавише табуляции) содержит единственное
поле Position in Image Map tab order (позиция в порядке обхода активных объектов по клавише
табуляции в карте изображений). Поле имеет смысл только для приложений в интерфейсе клиента Notes.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
141
Секция Alternate Text (альтернативный текст) предназначена для Web-приложений, в которых
значение поля этой секции транслируется в атрибут ALT тега <AREA SHAPE ... >.
Последняя закладка
Hotspot Extra HTML, с точки зрения интерфейса, практически полностью
идентична одноименной закладке, рассмотренной в контексте свойств гиперобъекта ссылка (см. раздел
4.14). Из отличий можно отметить, что два поля Name с закладки Hotspot Info и Id с закладки Hotspot
Extra HTML жестко взаимосвязаны. Изменение значений одного поля автоматически приводят к
аналогичным изменениям в другом поле и наоборот. Это связано с тем, что по синтаксису у тега <AREA
SHAPE ... > отсутствует атрибут NAME, но есть атрибут ID.
Все гиперобъекты данного раздела присутствуют в объектно-событийной панели под именами,
определяемыми в поле Name с закладки Hotspot Info окна свойств гиперобъекта. Объекты и свойства
таких гиперобъектов, присутствующие в объектно-событийной панели, идентичны одноименным объектам
и свойствам, рассмотренным ранее в контексте гиперобъекта «кнопка» (см. раздел 4.10.2). При
программировании обработчиков событий гиперобъектов данного раздела следует проявлять
достаточную осторожность, т.к. последние могут вступить в конфликт с собственно ссылками,
определенными на первой закладке их окна свойств. Например, создадим Hotspot Circle, на первой
закладке его окна свойств определим значения полей Туре как URL, a Value - http://www.first.ru. Далее в
объектно-событийной панели для соответствующего объекта Click определяем язык программирования
как Formula, и в панели программного кода укажем формулу @URLOpen("http://www.second.ru"). Таким
образом, получилось, что данный гиперобъект ассоциирован сразу с двумя URL. Из опыта известно, что
объекты и свойства объектно-событийной панели имеют более высокий приоритет (подробнее см. ниже),
чем параметры из окна свойств объекта. То есть, в нашем примере при клике (как в клиенте Notes, так и в
Web) на Hotspot Circle откроется страница с http://www.second.ru.
В интерфейсе клиента Notes использование в объектно-событийной панели для объекта Click
языков программирования Formula, Simple action, LotusScript приоритетней, чем любые типы ссылок,
определяемых в окне свойства гиперобъекта. Другими словами, действия, запрограммированные в
обработчике Click, выполнятся, а объекты, определенные как ссылки в окне свойств, не откроются. В том
же интерфейсе клиента Notes выбор в качестве обработчика события onClick (т.е. JavaScript) приведет к
открытию в разных окнах и результатов кода на событие onClick, и объекта, определенного как ссылка в
окне свойств. Запуск двух процессов не зависит от параметра Frame.
В Web-приложениях использование кода на Simple action и LotusScript, как обычно для
гиперобъектов и акций, игнорируется. Поэтому в данном случае, ссылки, определенные в окне свойств
гиперобъекта, передаются в атрибут HREF тега <AREA SHAPE ... >. При выборе для Click языка Formula
игнорируются ссылки, определенные в окне свойств гиперобъекта. Само действие, при этом, передается
либо в атрибут HREF тега <AREA SHAPE ... >, либо в обработчик события onClick. Последнее может не
выполняться, если у БД опущен флаг Use JavaScript when generation pages. Использование JavaScript
приводит к передаче ссылок из окна свойств в атрибут HREF тега <AREA SHAPE ... >, а кода из onClick в
одноименный обработчик события. Таким образом, по клику мыши выполнится два действия.
Общие параметры гиперобъектов,
передаются в Web следующим образом:
ассоциированных с графическим
изображением/ресурсом,
•
вся карта изображений транслируется в тег <МАР ... > ... </МАР>. Конкретный гиперобъект
транслируется <AREA SHAPE ... >;
• тип гиперобъекта в атрибут SHAPE тега <AREA SHAPE ... >. Для Hotspot Rectangle как
SHAPE=rect, Hotspot Circle - SHAPE=circle, Hotspot Polygon - SHAPE=polygon и Default Hotspot SHAPE=default;
•
координаты гиперобъектов транслируются в атрибут COORDS тега <AREA SHAPE ... >.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
142
4.16 Простая секция - standard section
В Notes/Domino представлены два объекта с общим групповым именем секция. Это простая секция
(Standard Section) и секция с управляемым доступом (Controlled Access Section). Секции предназначены
для группировки информации на форме (странице и Rich Text поле) в одно целое. Секция может
находиться в одном из двух состояний: «развернутом» (представлена вся информация из секции и
возможно ее заголовок) и «свернутом» (отображается только заголовок секции). В интерфейсе клиента
Notes секция выглядит следующим образом:
Рис. 4.97 Внешний вид секций в интерфейсе клиента Notes
Рассмотрим подробнее простые секции (Standard Section). Для ее создания необходимо выделить
участок формы, который будет составлять секция, и воспользоваться меню Create -> Section -> Standard.
При этом сформируется секция, и ее содержимое свернется до заголовка. Обратите внимание, что секция
оперирует с информацией на уровне абзацев. То есть, если разработчик выделит на форме одно слово и
станет создавать секцию, то в нее будет помещен весь абзац, содержащий выделенное слово, а не только
само выделенное слово. Так же следует отметить, что создание секции не вызывает появления
дополнительных объектов в объектно-событийной панели.
После того как секция создана, для доступа к ее свойствам необходимо установить курсор на
заголовок секции. При этом в меню верхнего уровня появится новый пункт Section, состоящий из четырех
подпунктов:
•
Section Properties (свойства секции). Вызывает окно свойств секции;
•
Expand («развернуть» секцию);
•
Collapse («свернуть» секцию). Пункты Expand и Collapse работают как радиокнопки. Текущее
значение переключателя отображается слева от активного пункта в виде «галочки»;
•
Remove Section (удалить секцию). Возвращает форму к состоянию до создания секции, т.е.
удаляется объект Section, но не удаляется его содержимое. Непосредственно перед удалением Notes
выдает предупреждающее сообщение: This operation cannot be undone. Do you wish to proceed?
(Данная операция не может быть отменена. Желаете продолжить?).
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
143
Рис. 4.98 Предупреждающее окно Notes об «опасной» операции
После добавления в форму секций, кроме меню Section в меню View Domino Designer становятся
доступными два пункта: View -> Expand All Sections («раскрыть» все секции) и View -> Collapse All
Sections («свернуть» все секции).
Рассмотрим подробнее свойства простой секции. Закладки
Font tab и
Section Hide When
(параметры «скрытия» секции), с точки зрения интерфейса, идентичны одноименным закладкам,
рассмотренным в контексте свойств поля (см. разделы 4.3.3 и 4.3.5). В качестве отличий можно отметить,
что параметры, определяемые на закладке Font tab, влияют только на шрифт заголовка секции (но не на
ее содержимое).
4.16.1 Section Title and Border - заголовок и границы простой секции
Первая закладка
Section Title and Border (заголовок и границы секции) представляет
следующие элементы интерфейса:
Рис. 4.99 Закладка Section Title and Border окна свойств простой секции
Секция Title (заголовок) содержит две радиокнопки: Text (текст) и Formula (формула), которые
определяют как будет задаваться заголовок секции: - в виде константы (значение Text) или с помощью @формул (Formula). Само значение заголовка определяется в поле, расположенном под радиокнопками.
Секция Border (границы) содержит два поля Style (стиль) и Color (цвет). В поле Style значения
представлены в виде интуитивно понятных пиктограмм. Единственное замечание хотелось бы сделать по
поводу последнего значения (закрашенный прямоугольник).Выбор этого значения меняет элемент
интерфейса, который раскрывает/сворачивает содержимое секции. В этом случае, для этих целей
используется не иконка треугольника, отображаемая слева от заголовка секции, а иконки
соответственно раскрывающая и
сворачивающая содержимое секции. Эти иконки отображаются справа
от заголовка секции. Определение цвета границы аналогично рассмотренному ранее в разделе 4.1.2.
4.16.2 Expand/Collapse - параметры «свертывания/раскрытия» простой секции
Закладка
Expand/Collapse
следующие элементы интерфейса:
(параметры
«свертывания/раскрытия»
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
секции)
представляет
144
Рис. 4.100 Закладка Expand/Collapse окна свойств простой секции
Секция Expand and collapse rules when document is (правила «свертывания/раскрытия» секции в
зависимости от режима документа) содержит четыре поля, определяющие поведение секции в конкретном
статусе документа. Эти статусы следующие: Previewed (документ в панели предварительного просмотра),
Opened for reading (открытие документа на чтение), Opened for editing (открытие документа на
редактирование) и Printed (печать документа). Для каждого из перечисленных полей допустимо одно из
следующих значений:
•
Don't auto expand or collapse (не выполнять автоматическое «свертывание/раскрытие» секции). В
этом случае первоначальное состояние секции будет определяться состоянием секции на момент
сохранения формы;
•
Auto-expand section (автоматически «раскрывать» секцию);
•
Auto-collapse section (автоматически «свертывать» секцию).
Вторая секция закладки содержит два флага:
•
Hide title when expanded (скрывать заголовок секции при ее «раскрытии»);
•
Show as text when not previewing (отображать секцию как простой текст при открытии документа
не в панели предварительного просмотра).
4.16.3 Трансляция секций в Web
Трансляция секций в Web не зависит от свойства БД Web Access: Use JavaScript when generation
pages. При генерации HTML-страницы, на основе документа с секциями, Domino для каждой секции
создает тег <DIV ...></DIV>, в атрибут ID этого тега передается автоматически формируемый
иерархический номер секции. Например, id="cSec2_2". Вокруг иконки треугольника, которая
раскрывает/сворачивает содержимое секции, формируется тег <А ...>. Сразу отметим, что в Web
независимо от значения поля Style с закладки Section Title and Border окна свойств секции, всегда
отображается иконка треугольника, а не
и . Для раскрытия/сворачивания секции Domino используете
Web внутренние JavaScript-функции.
4.17 Секции с управляемым доступом - controlled access section
Секции с управляемым доступом (Controlled Access Section) отличаются от простых секций двумя
особенностями:
•
для полей, входящих в такие секции, разработчик может ограничить доступ на редактирование в
пределах данной формы;
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
145
• опять же для полей, входящих в эти секции, можно включить механизм электронно-цифровой
подписи при сохранении документа. Для этого у полей должно быть установлено свойство Sign if
mailed or saved in section (см. радел 4.3.1).
Тот факт, что поля, входящие в секции с управляемым доступом, могут использоваться в процессе
электронной цифровой подписи, приводит к невозможности создания вложенных секции с управляемым
доступом. Однако, невложенных секции с управляемым доступом в пределах одной формы может быть
несколько.
Создание секции с управляемым доступом осуществляется с помощью пунктов меню Create ->
Section -> Controlled Access. Для секции с управляемым доступом в меню верхнего уровня Section
появляется новый пункт Define Editors (определение редакторов для текущей секции). В интерфейсе
Domino Designer этот пункт недоступен, он предназначен для использования в клиенте Notes при
редактировании документа (функциональность Define Editors будет рассмотрена в разделе 4.17.4).
Рассмотрим подробнее свойства секции с управляемым доступом. Закладки
Font tab и
Section Hide When идентичны одноименным закладкам свойств простой секции (см. раздел 4.16).
4.17.1 Section Title and Border - заголовок и границы секции с управляемым доступом
Первая закладка
Section Title and Border (заголовок и границы секции) представляет
следующие элементы интерфейса:
Рис. 4.101 Закладка Section Title and Border окна свойств секции с управляемым доступом
Секция Title (заголовок) содержит два поля Title text (текст заголовка) и Section field name (for R3
compatability only) (имя поля для секции, использующееся только для совместимости с версией R3). Поле
Title text задает в виде текстовой константы отображаемый заголовок секции. Поле Section field name
(for R3 compatability only) предназначено для задания имени поля документа, в котором будут
содержаться значения редакторов данной секции (подробнее см. раздел 4.17.4). Поле обязательно для
заполнения.
Секция Border (границы секции) идентична одноименной секции, рассмотренной в контексте простой
секции (см. раздел 4.16.1).
4.17.2 Expand/Collapse- параметры «свертывания/раскрытия» секции с управляемым
доступом
Закладка
Expand/Collapse
следующие элементы интерфейса:
(параметры
«свертывания/раскрытия»
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
секции)
представляет
146
Рис. 4.102 Закладка Expand/Collapse окна свойств секции с управляемым доступом
В отличие от одноименной закладки простой секции, данная закладка позволяет определить
параметры «свертывания/раскрытия» секции как для ее редакторов, так и для пользователей, не
входящих в список редакторов данной секции. За это отвечает кнопка-список из первой секции закладки
Допустимые значения поля For Editors (для редакторов секции) и For Non-Editors (для пользователей, не
входящих в список редакторов секции). Кнопка Set all to same (установить одинаковые значения для всех
полей) позволяет задать значения полям Opened for reading, Opened for editing и Printed равные
значению из поля Previewed.
Секция For Editors and Non-Editors (для редакторов и не редакторов секции) - присутствует
единственный флаг Hide title when expanded (скрывать заголовок секции при ее «раскрытии»). Смысл
флага понятен из названия. В остальном текущая закладка аналогична одноименной закладке простой
секции (см. раздел 4.16.2)
4.17.3 Formula - параметры поля редакторов секции с управляемым доступом
Закладка
Formula (параметры поля редакторов секции) имеет следующий вид:
Рис. 4.103 Закладка Formula окна свойств секции с управляемым доступом
Закладка содержит единственную секцию Access Formula (формула доступа к секции с
управляемым доступом). Поле Туре (тип) задает тип поля Section field name (for R3 compatability only),
определенного на первой закладке окна свойств секции с управляемым доступом (см. раздел 4.17.1). Для
Туре допустимы следующие значения: Editable (редактируемое), Computed (вычисляемое), Computed
when composed (вычисляемое в момент создания документа) и Computed for display (вычисляемое
только для отображения).
Поле, расположенное под Туре, предназначено для определения либо начального значения (Default
Value) поля Section field name (for R3 compatability only), либо для задания формулы вычисляемого
значения (Value) этого поля. Формула должна возвращать значение типа «текстовый список», каждая
составляющая которого может быть интерпретирована как имя из ACL БД. Кнопка
Formula
Window (окно для формулы) выводит значение предыдущего поля в отдельном окне. О функциональном
предназначении представленных на данной закладке полей см. следующий раздел.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
147
4.17.4 Особенности применения секции с управляемым доступом
Попробуем разобраться, как же работает механизм секции с управляемым доступом. Для этого
создадим такую секцию, в рамках которой присутствует хотя бы одно редактируемое поле (например,
My_field). Определим на закладке Formula окна свойств секции поле Туре как редактируемое (Editable). В
следующем поле зададим формулу, определяющую список редакторов секции, в данном случае по
умолчанию (например, "[admin]" : @UserName). На закладке Section Title and Border определим имя для
поля Section field name (for R3 compatability only) (например, My_sec). Создадим еще одно поле типа
«Авторы» (Authors) со значением "[test]" : @UserName, для возможности доступа на редактирование к
документам пользователей с правами «Авторов».
При создании документа по нашей форме, откроем указанную секцию и увидим, что редактируемое
поле доступно для ввода значений. Теперь установим курсор на заголовок секции, и воспользуемся меню
Section -> Define Editors. При этом появляется диалоговое окно:
Рис. 4.104 Модальное окно определения редакторов секции с управляемым доступом для случая с
редактируемым полем секции
В верхней части окна присутствуют две радиокнопки: All users (все пользователи) и Only the
following users (только следующие пользователи). В окне под радиокнопками расположен список,
собственно и задающий редакторов секции в случае выбора Only the following users. Кнопка Add
(добавить) вызывает стандартный диалог добавления имен из доступных адресных книг:
Рис. 4.105 Стандартный диалог выбора имен из доступных адресных книг
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
148
В нижней строке диалога выбора имен можно ввести с клавиатуры недостающие значения,
например, имя роли (для примера [System]). По кнопке Ok значение будет перенесено в список редакторов
секции.
Вернемся к окну редакторов секции (см. Рис. 4.104). Кнопка Remove (удалить) удаляет выбранное
значение из списка. Нажатие Ok переносит измененное значение редакторов секции в документ.
Сохраним документ. Просмотрев содержимое полей сохраненного документа через его окно свойств
(подробнее см. раздел 18.4.2), мы увидим, что у документа появилось поле, определенное в Section field
name (for R3 compatability only) (в нашем случае это My_sec). В поле будут содержаться имена
редакторов данной секции, которых мы изначально определили на закладке Formula окна свойств секции
и/или изменили в модальном окне определения редакторов секции (см. Рис. 4.104).
Теперь переключимся на ID-файл другого пользователя, который не входит в список редакторов
исследуемой секции, но имеет права Автора или выше для созданного нами документа (в нашем примере
в ACL БД он должен быть назначен на роль [test]). Открываем документ на редактирование и видим, что в
секции поле, определенное как редактируемое (My_field), недоступно для ввода информации. Однако,
диалог определения редакторов секции доступен (см. Рис. 4.104). Вносим себя в список редакторов
секции и сохраняем документ. Редактируемое поле (My_field) все равно пока недоступно. Закрываем и
повторно открываем документ, теперь поле становится действительно редактируемым. Аналогичная
картина наблюдается, если мы создаем документ, но изначально не прописаны в список редакторов
секции.
Выводы: при определении типа поля (Туре) секции с управляемым доступом как редактируемое
(Editable), любой пользователь с уровнем доступа Автор и выше может изменить значение редакторов
секции. Изменения вступают в силу после сохранения и перезагрузки документа.
Изменим нашу задачу. Определим тип поля (Туре) секции как Computed или Computed when
composed. В данном случае значение поля секции (My_sec) вычисляется, и при двойном клике мыши по
заголовку секции выдается окно с текущим значением редакторов секции:
Рис. 4.106 Окно, отображающее редакторов секции с управляемым доступом
Обратите внимание, что теперь в этом окне нельзя изменить редакторов секции.
Выбор для поля редакторов секции типа Computed for display ведет к тому, что само поле в
документе не сохраняется. Как результат после сохранения и перезагрузки документа изменения в поле
редакторов секции могут не передаться в вычисляемое для показа поле, и, следовательно, доступа к
редактируемым полям секции получено не будет.
Общие выводы относительно закрытия доступа на редактирование к полям из секции с управляемым
доступом:
•
данный механизм работает только на уровне формы. При открытии документа по другой форме
или программным путем, возможно получить и изменить значение таких полей;
•
данный механизм не заменяет собой ACL БД, а только накладывает дополнительные ограничения.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
149
Перейдем ко второй особенности секций с управляемым доступом - возможности электронной
цифровой подписи (ЭЦП) для полей, входящих в такие секции. Для включения механизма ЭЦП
необходимо установить у полей, находящихся в пределах секции с управляемым доступом, свойство Sign
if mailed or saved in section (см. раздел 4.3.1). При сохранении такого документа, в нем появится поле с
именем $Sig_имя_поля_секции (в нашем примере - $Sig_My_sec), куда собственно и будет занесено
значение функции хеширования по подписываемым полям секции, зашифрованное по RSA на секретном
ключе подписавшего, а также все сертификаты-компоненты из ID-файла текущего пользователя. Теперь,
при повторном открытии документа, имя секций с управляемым доступом будет отображаться как
собственно имя, кем и когда была осуществлена подпись, и в соответствии с каким сертификатом
выполнена проверка подписи (в нашем примере - «Sec - Signed by Doctor Notes/Org0 on 12.12.2005
12:31:18, according to /Org0»).
Назначение ЭЦП состоит в том, чтобы проверить, не изменилось ли содержимое подписываемых
полей с момента сохранения документа «подписавшим» его пользователем. При открытии документа с
ЭЦП любым пользователем сначала выполняется попытка «достоверно» определить открытый ключ
подписавшего информацию, затем расшифровать по RSA на этом открытом ключе значение функции
хеширования
и
сравнить
его
с
текущим
значением
функции
хеширования
из
поля
$Sig_имя_поля_секции. Какие здесь могут возникнуть проблемы? Во-первых, может закончиться
неудачей попытка определения публичного ключа подписавшего. Например, документ открывает
пользователь из другой организации, и для этой организации/пользователя нет ни общего сертификатора,
ни взаимного сертификата с сертификатами из поля $Sig_имя_поля_секции. Тогда Notes/Domino
предложит создать взаимный сертификат.
Рис. 4.107 Модальное окно с предложением о создании взаимного сертификата (Cross Certificate)
Если пользователь откажется от создания такого сертификата, то следующим
предупреждающее окно о невозможности проверки открытого ключа подписавшего информацию:
будет
Рис. 4.108 Предупреждающее окно: «Адресная книга не содержит подходящего взаимного сертификата
для проверки публичного ключа»
Следующий случай, когда проверка ЭЦП заканчивается неудачей, возникает, если содержимое
полей, участвующих в ЭЦП, было изменено с момента создания подписи. Например, после создания
документа его поля были изменены либо программно (агентом, акцией и т.д.), либо редактированием по
другой форме. Тогда при проверке ЭЦП будет выдано окно.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
150
Рис. 4.109 Предупреждающее окно: «Документ был изменен или искажен с момента подписания данных»
В обоих случаях, после предупреждающего сообщения документ открывается. Нарушение ЭЦП не
является препятствием для дальнейшей работы с документом. Так же следует отметить, что проверка
ЭЦП связана с формой. Если документ будет открываться по форме, отличной от используемой при
создании (например, для вида по формуле формы), и в форме будут присутствовать поля, участвующие в
ЭЦП, но нет секций с управляемым доступом, то проверка ЭЦП осуществляться не будет.
В Web-приложениях для секций с управляемым доступом механизм ЭЦП, вполне естественно, не
работает. Ограничения на доступ для редакторов секции действительны и для Web-приложений. В
остальном, алгоритм трансляции секций с управляемым доступом в HTML аналогичен рассмотренному в
параграфе, посвященном простым секциям (см. раздел 4.16.3).
В заключение настоящего параграфа рассмотрим еще несколько примеров. Как уже упоминалось, в
форме может быть несколько непересекающихся секций с управляемым доступом. Эти секции можно
настроить на использование ЭЦП различными редакторами. При создании и последующем
редактировании документа, созданного по такой форме, можно добиться, чтобы разные секции были
подписаны разными людьми.
4.18 Таблицы - table
Таблицы (Table) позволяют повысить внешнюю привлекательность приложений, а в ряде случаев и
изменить их функциональность. В ячейках таблицы можно разместить большинство объектов
Notes/Domino (включая поля, статичный текст, графику, встроенные виды и т.д.). В приложениях таблицы
достаточно часто применяются для форматирования бланков формы. Например, можно создать таблицу с
«невидимой» сеткой и разместить в правом столбце названия полей, а в левом - собственно поля. Такая
организация формы предотвратит вводимую информацию от «расползания» по бланку.
Для создания таблицы необходимо установить курсор на бланке формы в место, где таблица должна
находиться, и воспользоваться меню Create -> Table. При этом выдается модальное окно:
Рис. 4.110 Модальное окно создания таблицы
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
151
Данное окно определяет для таблицы первоначальные параметры, которые в дальнейшем могут
быть изменены через окно свойств таблицы, или через меню Table. Тем не менее, рассмотрим элементы
интерфейса окна создания таблицы (см. Рис. 4.110).
Секция Table Size (размеры таблицы) содержит два поля Number of rows (число строк) и Number of
columns (число столбцов), а также радиокнопки, определяющие ширину таблицы (Table width).
Радиокнопки имеют следующие значения: Fit to margins (подгонять под размеры полей), Fit to window
(подгонять под размеры окна) и Fixed width (фиксированная ширина).
Вторая секция определяет тип таблицы (Table Туре). Задание типа таблицы осуществляется
кнопками с пиктограммами. С точки зрения интерфейса, эти кнопки ведут себя как радиокнопки (т.е., в
нажатом состоянии может быть только одна кнопка). Кнопка
-таблицу с закладками (Tabbed table),
создает обычную таблицу (Basic table),
- анимированную таблицу (Animated table),
- таблицу
- программируемую таблицу (Programmed table). Подробнее отличия,
с заголовками (Caption table) и
вызываемые типом таблицы, будут рассмотрены в текущем параграфе.
После создания таблицы и установки курсора в ее пределах, в меню верхнего уровня появляется
пункт Table. В данный пункт меню входят следующие подпункты:
•
Table Properties (свойства таблицы). Выводит окно свойств таблицы;
• Table Select (выделение объектов таблицы). Может применяться для последующих групповых
операций с выделенными объектами таблицы. Данный пункт раскрывается в меню второго уровня,
состоящее из следующих подпунктов:
• Row(s) (строка(и)). Выделяет всю текущую строку или строки, если выделены ячейки
нескольких строк;
• Column(s) (столбец(ы)). Выделяет текущий или несколько столбцов;
• All Cells (все ячейки). Выделяет все ячейки таблицы;
• Entire (выделяет всю таблицу);
•
Insert Row (вставить строку). Вставляет строку перед текущей строкой;
•
Insert Column (вставить столбец). Вставляет столбец перед текущим столбцом;
•
Insert Special (специальная вставка). Вызывает появление модального окна:
Рис. 4.111 Модальное окно специальной вставки строк/столбцов
Единственное поле окна задает требуемое для вставки число строк/столбцов. Радиокнопки Row(s)
(строк) и Column(s) (столбцов) определяют, что будет, собственно, вставлено. Кнопка Insert (вставить)
осуществляет вставку указанного числа строк или столбцов перед текущей ячейкой, a Append (добавить)
добавляет строки/столбцы в конец таблицы;
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
152
•
Append Row (добавить строку). Добавляет строку в конец таблицы;
•
Append Column (добавить столбец). Добавляет столбец в конец таблицы;
•
Delete Selected Row(s) (удалить выделенную строку/и). Если выделения в пределах таблицы нет,
то удаляет текущую строку, в противном случае удаляются все строки, в которых присутствует
выделение. Перед, собственно, удалением Notes/Domino выдаст запрос на подтверждение операции
(см. Рис. 4.98);
•
Delete Selected Column(s) (удалить выделенный столбец/ы). Если выделения в пределах таблицы
нет, то удаляет текущий столбец, в противном случае удаляются все столбцы, в которых присутствует
выделение. Перед, собственно, удалением Notes/Domino выдаст запрос на подтверждение операции
(см. Рис. 4.98);
•
Delete Special (специальное удаление). Вызывает появление модального окна, с точки зрения
интерфейса, очень похожего на окно специальной вставки строк/столбцов (см. Рис. 4.111). Вместо
кнопок Insert и Append у нашего окна присутствует кнопка Delete (удалить), которая инициирует
процесс удаления указанного числа строк/столбцов, считая от текущей ячейки, включая последнюю.
Если указанное число строк/столбцов больше, чем есть в наличии до конца таблицы, то клик по Delete
не вызовет окончания диалога. Перед удалением - Notes/Domino выдаст запрос на подтверждение
операции (см. Рис. 4.98);
•
Merge Cells (объединить ячейки). Пункт доступен только в случае, когда выделена более чем одна
ячейка. Объединяет выделенные ячейки;
•
Split Cell (разбить ячейку). Пункт доступен только в случае, когда курсор находится в пределах
ячейки, к которой ранее была применена операция объединения ячеек (Merge Cells). Возвращает
таблицу к состоянию, имевшемуся до объединения ячеек;
•
Autosize Columns (автоматическое определение размеров столбцов).
Рассмотрим подробнее свойства таблицы. Для этого вызовем ее окно свойств.
4.18.1 Table L a y o u t - параметры размещения таблицы
Закладка
интерфейса:
Table Layout (параметры размещения таблицы) содержит следующие элементы
Рис. 4.112 Закладка Table Layout окна свойств таблицы
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
153
Секция Table (таблица) включает в себя поле-список - Width (ширина). Для Width допустимыми
являются следующие значения: Fit to window (подгонять под размеры окна), Fit with margins (подгонять
под поля документа) и Fixed width (фиксированная ширина). Начальное значение параметра
определяется в зависимости от положения радиокнопок Table width окна создания таблицы (см. Рис.
4.110). При выборе для Width значения Fixed width в секции появляется дополнительное поле-список:
Position (позиция). Это поле определяет выравнивание таблицы по отношению к полям документа,
соответственно по левому краю (Left), по правому краю (Right) и по центру (Center).
Секция Cell (ячейка) определяет параметры ячейки. Схематическое изображение ячейки достаточно
наглядно объясняет смысл каждого параметра данной секции. Обратите внимание, что названия трех
параметров (Minimum height, Row spacing и Column spacing) помечены символом сноски («*»). В правой
нижней части секции дается расшифровка этой сноски - * Applies to all cells (применяется ко всем
ячейкам таблицы). Таким образом, если в названии параметра отсутствует символ сноски, то он
применяется только к текущей (иногда к выделенным) ячейке/ам. Рассмотрим теперь сами параметры:
•
Width (ширина) определяет ширину ячейки;
•
Minimum height* (минимальная высота ячейки) задает минимальную высоту всех ячеек таблицы,
независимо от их содержимого;
•
Row spacing* (межстрочный интервал) задает расстояние, как от первой строки текста ячеек до
границы ячейки, так и от последней строки текста ячейки опять же до ее границы. Иначе говоря, это
вертикальные поля для ячеек;
•
Column spacing* (интервал между столбцами) задает горизонтальные поля для всех ячеек
таблицы;
•
Vertically align (параметры вертикального выравнивания содержимого ячейки). Параметр может
принимать одно из следующих значений: Тор (по верхнему краю), Center (по центру) и Bottom (по
нижнему краю).
Выбор в поле Width секции Table значений Fit to window или Fit with margins ведет в появлению в
секции Cell дополнительных элементов интерфейса:
• флага Fixed width (фиксированная ширина), который устанавливает фиксированную ширину только
для текущей колонки;
• флага Size to fit (подогнать размер), подгоняющего размер колонки под размеры его содержимого.
4.18.2 Cell Borders - параметры границ ячеек
Закладка
Cell Borders (параметры границ ячеек) определяет внешний вид границ ячеек.
Данное окно имеет большое сходство по интерфейсу с одноименной закладкой окна свойств статичного
текста (см. раздел 4.4.2). Следует обратить внимание, что не все параметры закладки Cell Borders
находят свое внешнее отражение в приложении. Это зависит от типа таблицы (подробнее см. раздел
4.18.6). Перейдем, собственно, к окну закладки. Оно содержит следующие элементы интерфейса:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
154
Рис. 4.113 Закладка Cell Borders окна свойств таблицы
Секция Cell Border Style (стиль границы ячеек) содержит два поля типа список: Style* (стиль) и
Color* (цвет). Звездочка в названии полей указывает на то, что данные параметры применяются ко всем
ячейкам таблицы. Поле Style предлагает на выбор одно из следующих значений: Solid (сплошная линия),
Ridge (с резкой границей снизу и справа) и Groove (с резкой границей сверху и слева).
В секции Cell Border Thickness (толщина границы ячеек) присутствуют следующие элементы
интерфейса: поля Left (толщина левой границы), Тор (толщина верхней границы), Right (толщина правой
границы) и Bottom (толщина нижней границы), а также кнопки
(групповое увеличение/уменьшение на
единицу всех границ ячейки). Обратите внимание, что толщина границы может изменяться в пределах от
0 до 10 включительно. Для установки толщины всех границ равной нулю используется кнопка Set All То 0
(установить все значения в ноль), а кнопка Set Аll То 1 (установить все значения в единицу)
соответственно устанавливает толщину всех границ равной единицы. Кнопка Outline (контур) становится
доступной только при выделении в таблице более чем одной ячейки. В данном случае нажатие на Outline
вызывает установку всех внутренних границ выделенного фрагмента ячеек в ноль. По аналогии с кнопкой
Outline, и все остальные элементы интерфейса секции Cell Border Thickness могут применяться как к
текущей, так и к выделенным ячейкам таблицы.
4.18.3 Table/Cell Background - фон таблицы/ячейки
Закладка
Table/Cell Background (фон таблицы/ячейки) имеет следующий вид:
Рис. 4.114 Закладка Table/Cell Background окна свойств таблицы
На закладке присутствуют три секции: Table color (цвет таблицы), Cell color (цвет ячейки) и Cell
image (графическое изображение для ячейки). Приоритет воздействия параметров из этих секций на
реальный вид таблицы раскрыт в пиктограмме, расположенной в нижней части закладки. Перейдем к
рассмотрению, собственно, секций.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
155
Секция Table color по умолчанию содержит одно поле Style (стиль), определяющее цветовые
параметры на уровне таблицы. Все значения из данного поля снабжены слева интуитивно понятной
пиктограммой. Перечислим допустимые значения поля Style: None (цвет отсутствует), Solid (сплошной
цвет), Alternating Rows (чередующиеся строки), Alternating Columns (чередующиеся столбцы), Left and
Тор (левый столбец и верхняя строка), Left (левый столбец), Right and Тор (правый столбец и верхняя
строка), Right (правый столбец) и Тор (верхняя строка). При выборе любого значения, отличного от None,
в секции появляется одно или два поля определения основного (Color) и дополнительных (And или Body)
цветов таблицы.
Секция Cell color изначально содержит поле Color (цвет), определяющее цвет ячейки, подсекцию
Style (стиль), представленную тремя кнопками, работающими как радиокнопки, и кнопкой Apply to All
(применить ко всем), распространяющей цвет текущей/выделенной ячейки на все ячейки таблицы. Кнопки
из подсекции Style работают следующим образом: первая
задает сплошной цвет ячейки, вторая
градиентное изменение цвета сверху вниз, третья
- градиентное изменение цвета слева направо.
Выбор последних двух значений влечет к появлению в секции еще одного поля (То), определяющего
второе цветовое значение для градиента.
Секция Cell image позволяет задать фон ячейки через графические ресурсы БД (Image Resource).
Определение фона ячейки посредством поля Source (источник) и кнопок:
Browse images (просмотреть
графические ресурсы) и
Formula (формула), идентично рассмотренному в параграфе, посвященном
объекту формы (см. раздел 4.7). Поведение кнопки Apply to All (применить ко всем) аналогично
одноименной кнопке из секции Cell color. Поле Repeat (повторы изображения) определяет, как будет
дублироваться графическое изображение, в случае, если оно по размерам меньше чем ячейка. Значения
поля так же для наглядности снабжены пиктограммами и представляют следующий набор: Repeat once
(однократный повтор в верхнем левом углу ячейки), Repeat vertically (повтор по вертикали слева), Repeat
horizontally (повтор по горизонтали вверху), Tile (многократный повтор по всей ячейке как по горизонтали,
так и по вертикали), Center (только в центре) и Size to Fit (подогнать под размеры ячейки).
4.18.4 Table Borders - параметры границ таблицы
Закладка
Table Borders (параметры границ таблицы) имеет следующий вид:
Рис. 4.115 Закладка Table Borders окна свойств таблицы
Закладка по элементам интерфейса полностью идентична одноименной закладке окна свойств
статичного текста (см. раздел 4.4.2).
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
156
4.18.5 Table Margins - параметры полей таблицы
Закладка
интерфейса:
Table Margins (параметры полей таблицы) содержит следующие элементы
Рис. 4.116 Закладка Table Margins окна свойств таблицы
Секция Table margin (поля таблицы), с точки зрения интерфейса, идентична уже рассмотренной
одноименной секции закладки Paragraph Margins окна свойств статичного текста (см. раздел 4.4.1).
Секция Table wrap (параметры «обтекания» текста для таблицы) изначально содержит два флага:
Outside table - Wrap text around table (вне таблицы - «обтекание» текста вокруг таблицы) и Inside tableWrap text between cells (внутри таблицы - «перетекание» текста между ячейками таблицы). Флаг Outside
table - Wrap text around table доступен только при установке фиксированного размера таблицы (значение
Fixed width для параметра Width см. раздел 4.18.1). При поднятии флага осуществляется «обтекание»
окружающим текстом таблицы справа от ее границы. Поднятие флага Inside table - Wrap text between
cells вызывает появление в секции дополнительного поля At height (начиная с какой высоты
осуществлять перенос). В случае, когда текст, содержащийся в ячейке, превышает установленную высоту
- осуществляется перенос оставшейся части текста в следующую ячейку строки и т.д. Перенос
осуществляется только в пределах строки таблицы слева направо.
Секция Compatibility (совместимость) содержит единственный флаг Use R4 spacing within table
(использовать интервалы внутри таблицы совместимые с версией R4). Поле, как видно из названия,
используется для обеспечения совместимости с предыдущими версиями Notes/Domino.
4.18.6 Table R o w s - т и п ы строк таблицы
Закладка
Table Rows (типы строк таблицы) является, скорее всего, самой главной в окне
свойств таблицы, т.к. определяет внешний вид таблицы. Первоначальный внешний вид закладки зависит
от типа таблицы, который был выбран при ее создании (параметр Table Туре см. раздел 4.18). Закладка
Table Rows имеет следующий вид:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
157
Рис. 4.117 Закладка Table Rows окна свойств таблицы
Секция Special table row display (особенности отображения строк таблицы) содержит две
радиокнопки Show all table rows (показывать все строки таблицы) и Show only one row at a time
(показывать только одну строку таблицы в каждый конкретный момент времени). Общий вид окна закладки
контекстно зависим от выбранного значения данных радиокнопок. При выборе Show all table rows на
закладке Table Rows присутствует только одна секция Special table row display. Выбор значения Show
only one row at a time ведет к появлению еще ряда секций на текущей закладке.
Секция Which row to display (какую строку показывать) содержит четыре радиокнопки и слева
динамически изменяемую пиктограмму, демонстрирующую взаимосвязь внешнего вида таблицы и
выбранного значения радиокнопки секции. Эти значения следующие: Users pick row via tab buttons
(пользователи выбирают строку таблицы через ее закладку), Users pick row via captions (пользователи
выбирают строку таблицы через ее заголовок), Switch row every XXX milliseconds (переключать строки
через определенное число миллисекунд) и Switch rows programmatically (программное переключение
показа строк таблицы).
Контекст закладки зависит от установленного значения радиокнопок из секции Which row to display.
При выборе Users pick row via tab buttons и Users pick row via captions третья секция получает
заголовок For selected row (для выбранной строки), которая позволяет определить текст на закладке или
заголовке текущей строки таблицы через поле Tab label and caption (надпись на закладке и заголовке
строки таблицы). Параметры шрифта текста на закладке/заголовке таблицы можно задать в секции For
tab labels and captions (для ярлыков закладок и заголовков). Интерфейс секции аналогичен закладке Font
tab окна свойств поля (см. раздел 4.3.3).
Для таблиц с закладками на текущей странице окна свойств появляется секция For tabs (для
закладок). В секции присутствуют следующие элементы интерфейса:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
158
• флаг Size tabs equally (одинаковые размеры закладок). Поднятый флаг выравнивает размеры всех
закладок независимо от содержимого надписей на них;
• поле-список Show tabs on (отображать закладки на). Позволяет выводить закладки сверху
(значение поля Тор), слева (Left), снизу (Bottom) и справа (Right) от строк таблицы. Значения Left и
Right отображаются в клиенте Notes как обычные текстовые ссылки. Указанные значения в Webприложения не транслируются;
• поле Indent first tab (отступ первой закладки) задает указанный отступ закладки от левой границы
таблицы.
Таблицы с закладками часто применяются в системных БД (например, в адресных книгах).
Рис. 4.118 Внешний вид таблицы с закладками в интерфейсе клиента Notes
Для таблиц с заголовками, активная в данный момент строка отображается сразу под своим
заголовком, у которого в правом углу выводится иконка
. Остальные заголовки строк выводятся с
иконкой
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
159
Рис. 4.119 Внешний вид таблицы с заголовками в интерфейсе клиента Notes
Выбор Switch row every XXX milliseconds делает доступным текстовое поле внутри названия
радиокнопки. Поле определяет число миллисекунд, по прошествии которых осуществляется
переключение показа на следующую строку таблицы. Третья секция закладки при данном выборе
получает заголовок Transition when switching rows (переход при переключении строк). Поле Cycle
through rows (цикл переключения строк) определяет, как будут переключаться строки таблицы.
Допустимые значения поля:
• Advance on Click (дополнительно по клику мыши). Переключение на следующую строку
происходит по клику мышью на текущей строке. Переключение идет по кругу, т.е. с первой строки до
последней, а затем снова первая. При установке данного значения обнуляется текстовое поле, в
котором указывается число миллисекунд для автоматического переключения;
• Continually (непрерывно). Переключение происходит автоматически через указанное число
миллисекунд и идет по кругу. Значение используется по умолчанию. Выбор данного и двух
последующих значений, устанавливает в поле для числа миллисекунд значение по умолчанию равное
2000;
• Once when opened (однократное переключение при открытии документа). Осуществляет
однократное автоматическое переключение строк от первой до последней, и затем цикл
заканчивается;
• Once on Click (однократное переключение по клику мыши). Похож на Once when opened, но
процесс переключения инициируется не фактом открытия документа, а кликом на первой строке
таблицы. Цикл переключения также однократный, до последующего клика.
В секции Transition when switching rows присутствует поле Effect (эффекты), определяющее тип
графических эффектов, происходящих в ячейках таблицы в момент переключения строк. Поле
воздействует на текущую/выделенные ячейки. Кроме этого, для определения графических эффектов
ячейки, у нее должен быть определен фон; либо одноцветный, либо в виде графического ресурса (секции
Cell color и Cell image с закладки Table/Cell Background, см. раздел 4.18.3). Для поля Effect допустимы
следующие значения: None (эффекты отсутствуют), Rolling («раскручивание»), LeftToRight (слева
направо), TopToBottom (сверху вниз), Wipe («стирание»), ВохВуВох («по блокам»), Explode («взрыв») и
Dissolve («растворение»). Обратите внимание, что процесс выполнения эффектов в ячейках таблицы в
определенной степени модален, т.е., пока он не завершится, нельзя даже выйти из документа по клавише
ESC. Еще одно замечание по поводу поля Effect. При установке любого значения отличного от None, это
значение будет распространяться на программируемые таблицы и таблица с заголовками. Т.е., если
©InterTrust Со. Тел. (495) 9567928 http://www.inteiirust.ru
160
после установки значения поля Effect переключить тип таблицы с анимированной на программируемую
или с заголовками, то установленные эффекты будут проявляться и у таких таблиц.
Возвращаемся ко второй секции Which row to display. Последнее нерассмотренное значение
радиокнопки - Switch rows programmatically. Выбор этого значения вызывает появление в секции еще
одного флага Also show tabs so user can pick row (разрешить отображать закладки для возможности
пользователям через них переключать строки таблицы). Далее (до тех пор пока это не будет специально
оговорено) будем считать, что этот флаг опущен.
Для объяснения работы механизма программного переключения строк таблицы, нам необходимо
забежать немного вперед, и рассмотреть некоторые поля с закладки Table Programming (параметры
программируемых таблиц см. раздел 4.18.7). В частности, это поле Name/Id (имя/Id таблицы) из секции
Table HTML Tags (HTML теги таблицы) и поле Name (имя строки) из секции Row Tags (теги строки). В
нашем случае (т.е., для механизма программного переключения строк таблицы) первое поле (Name/Id)
определяет групповое имя таблицы, а второе (Name) имя каждой конкретной строки (для их определения
необходимо устанавливать курсор в каждую конкретную строку). Обратите внимание, что имена строк
чувствительны к регистру.
Рассмотрим конкретный пример. Создадим таблицу из трех строк с программным переключением
последних (опция Switch rows programmatically с закладки Table Rows). Определим имя таблице (поле
Name/Id секции Table HTML Tags закладки Table Programming) как My_TabIe, а для строк зададим имена
(поля Name секции Row Tags закладки Table Programming) соответственно Row1, Row2 и Row3. Имена,
как и обычно, для тегов задаются без кавычек. Для программного переключения строк таблицы будем
использовать акцию формы, у которой в обработчике события Click разместим следующий код на языке
@-формул:
а := @Prompt([OKCANCELCOMBO] ; "Выбор строки таблицы" ;
открытия" ; "Row1" ; "Rowl" : "Row2" : "Row3" );
"Выберите строку таблицы для
FIELD $Му_Таblе := a;
@Command([RefreshHideFormulas])
Теперь клик мыши по акции формы будет сначала вызывать диалог выбора требуемой строки, а
затем по Ok будет осуществляться реальный переход к выбранной строке таблицы.
Как видно из примера, для программного переключения строк таблицы необходимо присвоить полю
$имя_таблицы (в нашем случае $Му_ТаЫе) конкретное имя строки таблицы (например, можно было
явно написать FIELD $My_Table := "Row3"). В конце формулы переключения строк требуется пересчитать
формулы видимости объектов (команда @Command([RefreshHideFormulas]) ). Данный механизм
переключения строк нормально работает помимо акций формы в формулах гиперобъектов и формулах
преобразования введенного значения полей (Input Translation см. раздел 4.3.7, например, для полей с
выбором значения из списка). Для гиперобъектов и акций формы переключение строк таблицы нормально
работает как в режиме редактирования, так и чтения документа. Для гиперобъектов и акций формы
исполнимый код может быть не только на языке @-формул, но и на LotusScript. Например:
Sub Click(Source As Button)
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim item As NotesItem
Dim my_row(0 To 2) As String
Set uidoc = workspace.CurrentDocument
Set doc = uidoc.Document
my_row(0) = "Row1"
my_row(l) = "Row2"
my_row(2) = "Row3"
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
161
а = workspace.Prompt(PROMPT_OKCANCELCOMBO, "Выбор строки таблицы" , _
"Выберите строку таблицы для открытия" , "Row1" , my_row )
Set item = doc.ReplaceItemValue( "$My_Table", a )
Call uidoc.RefreshHideFormulas
End Sub
При создании нового документа по форме с программируемой таблицей по умолчанию первой будет
открываться первая строка таблицы. Это также можно изменить, разместив, например, в обработчике
события формы Postopen (см. раздел 4.2.2) следующий код на языке @-формул:
FIELD $Му_Таblе := @ If (@IsNewDoc; "Row2 "; $My_Table) ;
@Command([RefreshHideFormulas])
Тогда при создании нового документа будет открываться вторая строка из нашего примера.
Вернемся опять к флагу Also show tabs so user can pick row из секции Which row to display. При
поднятии этого флага пользователь может переключаться между строками как программно (с рядом
ограничений по сравнению с опущенным флагом), так и через соответствующие закладки. Кроме этого,
поднятие флага вызывает появление секций, отвечающих за шрифт и стиль закладок (For tab labels and
captions и For tabs) редактируемого поля Tab Label (надпись на закладке строки таблицы).
Рассмотрим подробнее ограничения по программному переключению строк при поднятом флаге
Also show tabs so user can pick row. Клик по закладке таблицы в режиме чтения документа не вызывает
изменения значения поля $имя_таблицы, тогда как в режиме редактирования значение этого поля
изменяется на имя_строкиN, в соответствии с выбранной строкой. Таким образом, определить какая
закладка в текущий момент времени активна, можно только в режиме редактирования и если значение
поля $имя_таблицы явно присутствует на форме.
4.18.7 Table Programming - параметры программируемых таблиц
Закладка
Table Programming (параметры программируемых таблиц) имеет двоякое
предназначение. Во-первых, она определяет параметры, используемые для таблиц с программным
переключением строк, а во-вторых, может применяться для передачи определенных атрибутов в теги
таблицы и ее составляющих для Web-приложений и клиента Notes (например, имя класса из таблицы
каскадных стилей). Внешний вид закладки следующий:
Рис. 4.120 Закладка Table Programming окна свойств таблицы
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
162
Первый аспект применения параметров (программное переключение строк) данной закладки был
нами уже рассмотрен в предыдущем параграфе, что касается применения параметров в Webприложениях, то он будет детально рассмотрен в следующем параграфе. Единственное замечание по
поводу текущей закладки состоит в том, что параметры из секции Table HTML Tags (HTML теги таблицы)
применимы ко всей таблице целиком, из секции Row Tags (теги строки) к конкретной строке, а из секции
Cell HTML Tags (теги ячейки) соответственно к конкретной ячейке. Другими словами, если необходимо
установить какие-то теги у конкретной ячейки, то сначала в Domino Designer надо установить курсор
именно в эту ячейку, а затем уже воспользоваться окном свойств таблицы. Свойства из секций Cell HTML
Tags и Row Tags хранятся независимо друг от друга для каждой ячейки и строки.
4.18.8 Трансляция таблиц в Web
Рассмотрение процесса трансляции таблиц в Web начнем с «простых» таблиц (т.е. тех, у которых на
закладке Table Rows установлено свойство Show all table rows, см. раздел 4.18.6). Такие таблицы
транслируются в обычные для HTML теги таблиц <TABLE ...> ... </TABLE>, строки соответственно в <TR
...> ... </TR>, а ячейки в <TD ...> ... </TD>.
Выбор для поля Show only one row at a time значения Users pick row via tab buttons или Users
pick row via captions вызывает генерацию Domino ряда таблиц, имитирующих в Web, таблицы с
«закладками». Для «скрытых» в определенный момент строк, в соответствующих им ячейках ярлыков
генерируется тег якоря <А NAME ... >.
Анимированные таблицы (т.е., с установленным свойством Switch row every XXX milliseconds) в
Web не поддерживаются. Отображается только первая строка такой таблицы.
Для таблиц с программным переключением строк (Switch rows programmatically) механизм
переключения нормально работает даже при поднятом флаге Also show tabs so user can pick row.
4.19 Область размещения - layout region
Объект Layout region (область размещения) представляет собой прямоугольную область формы, в
рамках которой разработчику предоставляются дополнительные возможности по оформлению внешнего
вида приложения. В свою очередь область размещения может выступать в роли контейнера для других
элементов дизайна формы. В области размещения могут находиться поля, статичный текст, графические
изображения, а также кнопки как обычные, так и графические. В области размещения отсутствует такое
понятие как «абзац», все составляющие отображаются в виде слоев. Слои могут перекрывать друг друга,
причем, разработчик может изменять порядок следования объектов области размещения в Z-индексе.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
163
Рис. 4.121 Внешний вид области размещения в интерфейсе клиента Notes
Помимо простого отображения области размещения в форме, разработчик может вывести только
одну (первую) область размещения в модальном окне. Это достигается использованием либо @-формулы
@DialogBox, либо одноименным методом класса NotesUIWorkspace для LotusScript. Причем, размеры
модального окна могут быть «подогнаны» под размеры области размещения.
Важное замечание: объект Layout region и его составляющие в Web-приложения не транслируются.
Перейдем к более детальному рассмотрению области размещения и её компонент.
Для создания Layout region нужно установить курсор на бланке формы в место, где эта область
размещения должна находиться, и воспользоваться меню Create -> Layout Region -> New Layout Region.
При этом, на бланке форме появляется прямоугольник, определяющий границы области размещения. Для
получения доступа к свойствам существующей области размещения, нужно выбрать ее на бланке формы
(без выделения) и воспользоваться меню Design -> Layout Properties. Окно свойств области размещения
имеет две закладки. Вторая
Layout Hide When (параметры «скрытия» области размещения), с точки
зрения интерфейса, идентична одноименной закладке, рассмотренной в контексте свойств поля (см.
разделы 4.3.5). Первая закладка
Layout Info (общая информация об области размещения) имеет
следующий вид:
Рис. 4.122 Закладка Layout Info окна свойств Layout Region
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
164
В первой секции Position (позиция) определяются размеры и положение области размещения. Поле
Left (отступ слева) определяет отступ от левой границы формы, а поля Width (ширина) и Height (высота)
- размеры области размещения по горизонтали и вертикали соответственно.
Секция Display (отображение) содержит три флага:
•
Show border (отображать границу области размещения). Смысл поля ясен из названия;
•
3D style (трехмерный стиль). Поднятие флага задает для области размещение серый цвет фона.
Опущенный флаг делает общий цвет фона области размещения совпадающим с цветом фона формы;
•
Wrap text around region (переносить текст вокруг области размещения). Если область
размещения расположена внутри параграфа Notes (например, с текстом), то поднятие флага
заставляет «обтекать» содержимое параграфа по правому краю области размещения. Опущенный
флаг «разрывает» параграф, собственно, областью размещения.
Секция Grid (сетка) определяет параметры сетки, которую можно наложить на область размещения
в интерфейсе Domino Designer. Эта сетка может помочь разработчику в позиционировании на Layout
region его составляющих. Секция содержит три поля:
•
флаг Show grid (отобразить сетку). Смысл флага понятен из названия;
•
флаг Snap to grid (фиксировать объекты по узлам сетки). Поднятие флага «заставляет» входящие
в область размещения объекты располагать только в узлах сетки;
•
поле Grid size (размер шага сетки).
Перейдем к рассмотрению объектов, которые можно расположить на области размещения. Это:
•
поля. Для их создания необходимо выбрать область размещения на бланке формы (без
выделения) и воспользоваться меню Create -> Field.
•
статичный текст. Создается через меню Create -> Layout Region -> Text.
•
обычные кнопки. Можно создать через меню Create -> Hotspot -> Button.
•
графические кнопки. Создаются через меню Create -> Layout Region -> Graphic Button. Перед
выполнением операции необходимо сначала скопировать фон будущей кнопки в буфер обмена.
•
графическое изображение. Создается через меню Create -> Layout Region -> Graphic. Перед
выполнением операции необходимо сначала скопировать изображение в буфер обмена.
После создания любого из перечисленных объектов разработчик может позиционировать их в
пределах области размещения, а также изменить их порядок следования в Z-индексе. Последнее
достигается посредством применения пунктов меню:
•
Design -> Bring То Front делает текущий объект самым верхним в Z -индексе;
•
Design -> Send То Back делает текущий объект самым нижним в Z -индексе;
•
Design -> Bring Forward One перемещает текущий объект на один уровень вверх в Z -индексе;
•
Design -> Send Back One перемещает текущий объект на один уровень вниз в Z -индексе.
Перейдем к рассмотрению допустимых составляющих области размещения:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
165
4.19.1 Поля на области размещения
В контексте области размещения на объект поле (Field см раздел 4.3) накладываются
дополнительные ограничения. В частности, на Layout Region нельзя размещать общие поля (Shared
Field), а также поля с типами данных: Dialog list, Rich Text, Rich Text Lite, Password, Formula, Time zone
и Color. Кроме этого, в окне свойств поля произошли следующие изменения:
•
на первой закладке Field Info появилась новая секция Position (позиция), определяющая
местоположение текущего поля. При этом, значение Left задает отступ по горизонтали от границы
формы, а Тор - по вертикали от верхней границы области размещения;
•
опять же, на первой закладке стала недоступной секция Style, а, собственно, стиль поля
приобретает значение Native OS style;
•
наличие полосы «прокрутки» для таких полей определяется специальным полем Show scroll bars
(показывать полосу прокрутки) в секции Display, определенной на второй закладке (Control tab) окна
свойств поля.
4.19.2 Статичный текст на области размещения
Окно свойств статичного текста из Layout Region содержит три закладки. Закладка Text Hide When
аналогична одноименной закладке, рассмотренной в контексте свойств поля (см. раздел 4.3.5). Закладка
Font tab, в отличие от своего аналога (см. раздел 4.3.3), содержит дополнительное поле-флаг Transparent
(прозрачный фон). Если этот флаг поднят, то фон текстовой надписи соответствует фону области
размещения. В противном случае, можно определить цвет фона самостоятельно через дополнительное
поле Background (цвет фона).
Первая закладка
Static Text Info (общая информация о статичном тексте) имеет следующий
вид:
Рис. 4.123 Закладка Static Text Info окна свойств статичного текста из области размещения
Первая секция Text (текст) определяет содержимое текстовой надписи. Вторая секция Alignment
(выравнивание) содержит два поля. Первое определяет выравнивание по горизонтали и предлагает на
выбор одно из трех значений: Left (выравнивание по левому краю), Center (выравнивание по центру) и
Right (выравнивание по правому краю). Второе поле-флаг Center vertically (центровка по вертикали) при
его поднятии позволяет отцентрировать текст по вертикали.
Секция Position (позиция) определяет размер и положение текстовой надписи на области
размещения. Четыре поля секции определяют следующие параметры статичного текста:
•
Left - отступ по горизонтали от границы формы;
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
166
•
Top - отступ по вертикали от верхней границы области размещения;
•
Width - ширину слоя текстовой надписи;
•
Height - высоту слоя текстовой надписи.
4.19.3 Кнопки на области размещения
Как уже упоминалось, на Layout Region можно размещать обычные и графические кнопки. Окно
свойств этих кнопок несколько отличается от аналогичного окна свойств кнопки, размещенной просто на
форме (см. раздел 4.10). Собственно, окно свойств состоит из трех (для графической кнопки) или четырех
закладок (для обычной кнопки появляется еще закладка Font tab, определяющая параметры шрифтов
надписи на кнопке). Закладки Hide When и HTML идентичны одноименным закладкам окна свойств кнопки,
размещенной просто на форме. Следует отметить, что закладка HTML не влияет на поведение
приложения, т.к. область размещения в Web не транслируется. На первой закладке окна свойств кнопок из
Layout Region присутствует секция Position, поля Left и Тор которой определяют положение кнопки на
области размещения. Для обычной кнопки доступно еще поле Width (ширина), определяющее
соответственно ширину кнопки. Действия по нажатию на кнопки, как обычные, так и графические,
определяются аналогично в объектно-событийной панели.
4.19.4 Графические изображения на области размещения
Окно свойств графического изображения, размещенного на Layout Region, состоит из трех закладок.
Закладки Hide When и HTML идентичны одноименным закладкам окна свойств поля (см. разделы 4.3.5 и
4.3.6). Последняя не оказывает влияние на приложение, т.к. область размещения в Web не транслируется.
На первой закладке размещена единственная секция Position, поля Left и Тор которой определяют
положение графического изображения на области размещения.
4.20 Слой - layer
Элемент дизайна Layer (слой) представляет собой прямоугольную область, в рамках которой можно
размещать другие элементы дизайна (например, поля, графические изображения, статичный текст и т.д.).
Слой можно использовать в рамках форм и страниц.
Рис. 4.124 Внешний вид Layers Domino Designer
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
167
Объект Layer имеет определенные сходства с Layout region, оба объекта представляют собой
прямоугольные области для размещения на них других элементов дизайна. Из отличий Layer по
отношению к Layout region можно отметить следующее:
• внутри Layer существует понятие абзаца, и поэтому размещение других объектов дизайна идет в
рамках абзацев слоя;
• позиционирования самих объектов Layer не привязано к абзацам формы, они могут перекрываться,
и, вообще, «скрываться» как другими слоями, так и с помощью формул скрытия (будет рассмотрено
позднее в этом разделе);
• на слой можно добавлять практически все доступные (кроме Page Break, см. раздел 4.35) для
формы/страницы элементы дизайна более низшего уровня (включая другие слои), в отличие от Layout
region. Слои, якорь которых находится в пределах другого слоя, называются дочерними слоями
(children layer);
• слои транслируются в Web тегом <DIV>;
• модальные окна типа DialogBox не могут быть «подогнаны» под размеры слоя.
При создании слоя в Domino Designer появляются сразу два объекта: собственно слой и его якорь
(Layer anchor). Якорь слоя отображается в Domino Designer иконкой . Якорь слоя выполняет следующие
функции:
• применение формул «скрытия» объекта к абзацу, в рамках которого находится якорь слоя «скрывает» и сам слой. Если у скрываемого слоя есть дочерние слои, то они скрываются вместе со
своим «родителем»;
• порядок вычисления формул полей, представленных на слоях, зависит от порядка следования
якорей слоев в рамках формы. Общепринятый порядок вычисления формул полей формы (см. раздел
4.3.8) сверху вниз слева направо. Если в порядке этого обхода встретится якорь слоя, то здесь начнут
вычисляться формулы полей слоя, относящегося к этому якорю. Порядок вычисления формул полей в
рамках слоя соответствует общепринятому в Notes/Domino;
• копирование в буфер обмена якоря слоя влечет одновременное копирование и самого слоя.
Последнее замечание, относящееся к якорям слоев - позиционирование самого слоя в рамках
формы/страницы не влечет изменения позиции якоря данного слоя.
Для создания нового слоя необходимо поместить курсор в место, где должен находиться якорь слоя,
и воспользоваться меню Create -> Layer. После создания слоя его размер и позиционирование в рамках
формы может осуществляться как с помощью мыши, так и через окно свойств слоя. Для доступа к
свойствам, собственно, слоя необходимо выбрать слой (без выделения) и воспользоваться меню Layer ->
Layer Properties. При этом, появляется окно с тремя закладками. Закладка Background по элементам
интерфейса идентична одноименной закладке свойств панели акций (см. раздел 4.9.3). Закладка Layer
Extra HTML по элементам интерфейса также идентична одноименной закладке свойств поля (см. раздел
4.3.6). Из отличий Layer Extra HTML можно отметить, что сразу при создании слоя автоматически
заполняется поле Id (разработчик может отредактировать или вообще удалить это значение). Изменение
поля Id на закладке Layer Extra HTML автоматически меняет аналогичное поле Layer Id в окне свойств
якоря данного слоя. Для получения доступа к свойствам якоря слоя надо выбрать его (без выделения) на
форме и воспользоваться меню Layer Anchor -> Layer Anchor Properties. При этом, появляется
следующее окно:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
168
Рис. 4.125 Закладка Layer Anchor Info окна свойств Layer Anchor
Последнее замечание по поводу значения поля Id слоя. С помощью этого поля в Web-приложения
через JavaScript и таблицы каскадных стилей (или стиль по месту) можно программным образом менять
размеры, позиционирование, цвет фона и т.д. у слоя. Однако, в клиенте Notes такие шаги не проходят,
несмотря на то, что клиент Notes поддерживает в достаточном объеме и CSS, и JavaScript.
Вернемся к свойствам собственно слоя. Нерассмотренной осталась закладка Positioning, которая
имеет следующий вид:
Рис. 4.126 Закладка Positioning окна свойств Layer
На закладке представлены следующие поля: Тор (отступ от верхней границы формы), Left (отступ от
левой границы), Width (ширина слоя), Height (высота слоя) и Z-lndex (порядок следования слоя в Zиндексе). Первые четыре поля снабжены дополнительными полями-списками, определяющими единицы
измерения для координат и размеров. На выбор предлагаются следующие значения: Pixels (размер в
пикселях), Centimeters (в сантиметрах), Ems (в единицах измерения em, см. ниже), Percents (в
процентах), Characters (в символах) и Auto (автоматически). В полиграфии единица измерения em
соответствует размеру буквы m напечатанной шрифтом цицеро.
4.20.1 Работа со слоями через меню Domino Designer
Если на форме/странице присутствует хотя бы один слой, то в меню Domino Designer становятся
доступными следующие пункты:
• Design -> Layer Tree (дерево слоев). Выбор пункта вызывает модальное окно:
Рис. 4.127 Модальное окно Layer Tree
В поле Layers отображаются все слои формы/страницы согласно своей иерархии (родители-дети).
Представленные справа кнопки выполняют следующие действия:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
169
• Hide - скрывает выбранный в поле Layers слой. После нажатия кнопка меняет свое
название на Show - которая выполняет обратное действие, т.е., отображает скрытый слой.
Скрытие осуществляется только в рамках Domino Designer, но не в клиентах Notes и Web.
Последнее утверждение справедливо для всех скрытий/отображений в рамках настоящего
параграфа;
• Hide All - скрывает все слои в дереве слоев;
• Show All - отображает все слои в дереве слоев;
• Close - закрывает окно Layer Tree;
• при выборе на форме/странице якоря слоя становится доступным меню Layer Anchor, состоящее из
следующих подпунктов:
• Layer Anchor Properties - выводит окно свойств якоря слоя;
• Hide Layer или Show Layer - скрывает/отображает слой, соответствующий выбранному
якорю;
• Go То Layer - осуществляет переход к слою, соответствующему выбранному якорю. Слой
будет находиться в режиме изменения размеров/позиционирования;
• Go То Parent - осуществляет переход к родительскому слою, соответствующему
выбранному якорю. Пункт меню доступен только для якорей дочерних слоев;
• при выборе на форме/странице собственно слоя становится доступным меню Layer, состоящее из
следующих подпунктов:
• Layer Properties - выводит окно свойств текущего слоя;
• Hide- скрывает текущий слой;
• Select -> All Sublings - выбирает все слои одного уровня иерархии по отношению к
текущему. После выполнения этого пункта меню с выбранными слоями можно осуществлять
групповые действия, как через ряд пунктов текущего меню, так и с помощью клавиатуры. Для
последней при комбинации клавиш Shift и управления курсора можно одновременно менять
размеры выбранных слоев, a Ctrl + клавиши управления курсора выполняют совместное
позиционирование выбранных слоев;
• Select -> All Children - выбирает все дочерние слои по отношению к текущему;
• Align -> Left/Top/Right/Bottom/Horizontal Center/Vertical Center - осуществляют
выравнивание всех выбранных слоев соответственно по самому левому, верхнему, правому,
нижнему, горизонтально по центру и вертикально по центру. Пункты меню доступны при выборе
более одного слоя;
• Make Same Size -> Height/Width/Both - осуществляют задание общих размеров по самому
большому из выбранных слоев, соответственно по высоте, ширине и двум размерностям.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
170
4.21 Встроенный вид - embedded view
В данном параграфе рассматривается объект - вид, «встроенный» в форму, и свойства данного
объекта. Собственно, объект - вид и его свойства, как элемента дизайна верхнего уровня, описаны в
разделе 6. В связи с этим, рекомендуется перед изучением настоящего параграфа сначала ознакомиться
с разделом 6.
В Domino Designer, начиная с версии R 6, снято ограничение, запрещающее встраивать в одну
форму/страницу только один вид, также теперь можно встраивать виды/папки не только из текущей БД.
Несколько встроенных видов на форме в Web-приложениях корректно будут отображаться, только если
они выводятся с помощью Java-апплета. Точнее, на генерируемой Domino HTML-странице будет
присутствовать только один встроенный вид, отображаемый не с помощью Java-апплета, встроенных
видов, выводимых через Java-апплет, может быть несколько (подробнее будет рассмотрено позднее в
рамках этого параграфа).
Для встраивания существующего вида/папки в форму можно воспользоваться меню Create ->
Embedded Element -> View. Выбор последнего приводит к выводу модального диалогового окна Insert
Embedded View выбора вида для встраивания в форму:
Рис. 4.128 Модальное окно выбора вида для встраивания в форму
В данном окне можно выбрать имя БД (поле Database) и затем - имя вида/папки выбранной БД (поле
Choose a View - выберите вид), или организовать «встраивание» на основании @-формул (поле-флаг
Choose a View based on formula). Здесь следует обратить внимание на то, что выбор в окне Insert
Embedded View статичного или динамичного встраивания вида в форму не обладает «необратимыми»
последствиями (как, например, для встраивания подформ). После, собственно, встраивания в объектнособытийной панели можно поменять эти параметры (кроме Database, подробнее будет рассмотрено
позднее в рамках этого параграфа).
Для получения доступа к окну свойств встроенного вида нужно выбрать (но не выделить) встроенный
вид, при этом, в меню верхнего уровня появится новый пункт Element, содержащий два подпункта:
•
View Properties (свойства вида) - выводит окно свойств встроенного вида;
•
Edit Embedded View (редактировать встроенный вид). Пункт доступен только для видов,
встроенных в Rich Text поля документов. Позволяет в интерфейсе клиента Notes получить доступ к
окну свойств и аналогу объектно-событийной панели для встроенного вида.
Окно свойств встроенного вида состоит из шести закладок. С точки зрения интерфейса, четыре из
них идентичны одноименным закладкам, рассмотренным в контексте свойств поля и статичного текста:
Border (см. раздел 4.4.2),
Paragraph Alignment (см. раздел 4.3.4),
Paragraph Hide When
Paragraph
Margins
(см.
раздел
4.4.1).
Остальные
закладки
рассмотрим
(см. раздел 4.3.5)
подробнее.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
171
4.21.1 Info tab - общая информация о встроенном виде
Закладка
интерфейса:
Info tab (общая информация о встроенном виде) содержит следующие элементы
Рис. 4.129 Закладка Info tab окна свойств встроенного вида
Первая секция закладки содержит три поля:
• Name (имя) - поле может быть использовано для осуществления связи между двумя встроенными
на одну форму/страницу видами. Механизм связи будет подробно рассмотрен в разделе 4.21.4.
• Target Frame (for single click) (целевой фрейм для одинарного клика) и Target Frame (for double
click) (целевой фрейм для двойного клика) определяют фреймы, в которых будут открываться
документы при одинарном и двойном клике на них в области встроенного вида. Значения данных
полей, главным образом, используются в случае, когда вид, встроенный в форму, отображается в
рамках некоторого фрейма из фреймсета. Однако, даже при безфреймовой структуре отображения
формы, данные поля могут оказывать влияние на приложение. Например, задание для поля Target
Frame (for double click) значения _blank приводит к открытию документа в новом окне как в
интерфейсе клиента Notes, так и в Web. Кроме того, поле может быть использовано для обеспечения
взаимосвязи между двумя встроенными видами (рассмотрено в разделе 4.21.4) и между встроенным
видом и редактором (рассмотрено в разделе 4.22.3).
Секция Web Access (при доступе через Web) предназначена для Web-приложений. Поле Display
(отображение) предлагает на выбор одно из трех значений:
• Using HTML (использовать HTML). Это значение используется как антоним (противопоставление)
следующему значению Using Java Applet. При выборе Using HTML могут учитываться установленные
значения для трех флагов из секции For Web Access закладки Advanced tab окна свойств собственно
вида (см. раздел 6.3.5). Если у вида поднят флаг Use applet in the browser, а у встроенного вида
стоит Using HTML, то вид в рамках формы будет отображаться без использования апплета тегами
таблицы (<TABLE>, <TR> и <TD>). Если же у вида установлены флаги Treat view contents as HTML
или Allow selection of documents, то установка у встроенного вида значения Using HTML приводит к
отображению встроенного вида в соответствии с указанными значениями собственно вида. Другими
словами, если поднят флаг Treat view contents as HTML, то в браузере встроенный вид будет
передан своим содержимым, а при Allow selection of documents - со столбцом флагов, но в обоих
случаях не апплетом;
• Using Java Applet (использовать Java Applet). В этом случае не зависимо от флагов собственно
вида, встроенный вид всегда будет передаваться в Web с помощью Java апплета;
• Using View's display property (использовать параметры отображения вида). Оформление
встроенного вида в интерфейсе браузера будет определяться значением одного из трех флагов,
расположенных секции For Web Access собственно вида.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
172
Кроме поля Display в секции Web Access присутствует еще ряд полей: Lines to display
(отображаемое число строк), Use default (использовать параметры по умолчанию) и Use views selection
margin property (использовать для отображения столбца специальных пометок параметры собственно
вида). Поля Lines to display и Use default предназначены для определения принятого по умолчанию
числа выводимых строк встроенного вида. Флаг Use default становится доступным только для значений
Using HTML и Using View's display property из предыдущего поля. Если для таких встроенных видов
флаг Use default поднят, то значение по умолчанию для числа выводимых строк берется из настроек
сервера. Точнее документ Server закладка Internet Protocols -> Domino Web Engine поле Default lines
per view page из секции Conversion/Display. Возвращаемся опять в окно свойств встроенного вида. Если
флаг Use default опустить, то становится доступным поле Lines to display, в которое разработчик может
самостоятельно ввести значение по умолчанию для числа выводимых строк встроенного вида. В рамках
текущего абзаца для числа выводимых строк встроенного вида часто использовалось словосочетание «по
умолчанию». Дело в том, что разработчик, как несмотря на серверные, так и на настройки из поля Lines to
display, может при выводе в браузере изменить число выводимых строк, добавляя к URL параметр
Count=N. Например,
http://www.inttrust.ru/test.nsf/New1?OpenForm&count=7.
Для встроенных видов,
передаваемых в Web Java-апплетом, число выводимых строк определяется высотой встроенного вида,
которая определяется на следующей закладке его окна свойств.
Последним нерассмотренным в секции Web Access остался флаг Use views selection margin
property (использовать для отображения столбца специальных пометок параметры собственно вида).
Этот флаг оказывает влияние только на виды, передаваемые в Web с помощью Java-апплета. Если этот
флаг поднят, то параметры отображения столбца для специальных пометок определяются в самом виде
(флаги Show selection margin и Hide selection margin border, см. раздел 6.3.3) и не зависят от свойства
встроенного вида Show selection margin, определяемого на закладке Display tab его окна свойств.
4.21.2 Display tab - параметры отображения встроенного вида
Закладка
Display tab (параметры отображения встроенного вида) содержит следующие
элементы интерфейса:
Рис. 4.130 Закладка Display tab окна свойств встроенного вида
Первая секция Size (размер) содержит по две пары полей на каждую из размерностей и флаги:
Disable scrollbars (запретить полосы «прокрутки») и Thin Scrollbars (тонкие полосы «прокрутки»). Ширина
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
173
(Width) задается, собственно, значением в первом поле свой пары, и если поднят флаг Fit to window (%)
(подгонка под размеры окна в %), то значение из предыдущего поля определяет ширину в процентах от
размера окна. Если флаг опущен, то значение из предыдущего поля определяет ширину встроенного вида
в сантиметрах или дюймах. Для высоты (Height) поднятие флага Fit to window делает предыдущее поле
недоступным. Если флаг опущен, то значение из предыдущего поля определяет высоту встроенного вида
в сантиметрах. Флаг Disable scrollbars в поднятом состоянии для интерфейса клиента Notes блокирует
появление вертикальной и горизонтальной полос «прокрутки» для встроенного вида. Опущенный флаг
приводит к выводу обеих полос прокрутки, если это необходимо, исходя из содержимого вида. Флаг Thin
Scrollbars делает полосы «прокрутки» более тонкими при отображении в клиенте Notes.
Секция Display (отображение) содержит целый ряд флагов:
• Show header (отображение заголовков). Снятие флага ведет к блокировке вывода строки
заголовков встроенного вида;
• Selection tracks mouse movement (отслеживание перемещения мыши). Поднятый флаг позволяет
при перемещении указателя мыши в рамках встроенного вида выделять текущую строку рамкой.
Свойство не поддерживается, если у встроенного вида отображается столбец для специальных
пометок. Если данный флаг поднят, то встроенный вид не поддерживает механизм редактирования
документов по месту (подробнее см. раздел 6.9). На Web-приложения флаг Selection tracks mouse
movement влияния не оказывает;
• Transparent background (прозрачный фон). Поднятый флаг заставляет отображаться встроенный
вид с прозрачным фоном по отношению к цвету фона формы/страницы. Флаг работает корректно,
даже если в свойствах собственно вида установлены параметры фона как сплошного, так и на
основании графического изображения. На Web-приложения данный флаг влияния не оказывает;
• Show entries as web links (отображать строки вида как Web-ссылки). Поднятый флаг отображает
значения столбцов вида подчеркнутым шрифтом, как у Web-ссылок. На Web-приложения данный флаг
влияния не оказывает;
• Show action bar (отображать панель акций встроенного вида). Смысл флага понятен из названия.
На Web-приложения данный флаг влияния не оказывает;
• Show selection margin (отображать столбец для специальных пометок). Смысл флага понятен из
названия. Не допускается совместное использование данного флага с Selection tracks mouse
movement. В Web-приложениях флаг поддерживается только при отображении встроенного вида с
помощью апплета;
• Show only current thread (отображать только текущую нить). Флаг применяется для
осуществления взаимосвязи двух встроенных видов (подробнее см. раздел 4.21.4). Из личного опыта,
независимое применение флага (т.е., только в рамках одного вида) к ожидаемому результату (т.е.,
отображение во встроенном виде только документов «родителей» и «потомков» по отношению к
текущему документу) не приводит;
•
Summarize calendar entries (выводить строки календарного вида в категоризованном стиле).
Поднятие флага аналогично применению в рамках календарного вида пункта меню View -> Show ->
Summary. Флаг оказывает влияние только на календарные виды в интерфейсе клиента Notes;
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
174
Рис. 4.131 Summary в календарном виде
• Show recent first (отображать последний первым). В документации сказано, что поднятие флага
должно осуществлять автоматический скроллинг содержимого вида так, чтобы более новые
сообщения отображались в самом верху вида, и что флаг применяется в почтовых видах. К
сожалению, в документации не сказано, какими должны быть параметры самого вида. Тестирование
поведения указанного флага в этих условиях не привело к ожидаемому результату.
4.21.3 Свойства встроенного вида, определяемые в объектно-событийной панели
После создания встроенного вида, в объектно-событийной панели Domino Designer появляется
одноименный объект, содержащий два подобъекта: Embedded selection (определение имени встроенного
вида) и Show single category (показ единственной категории).
Объект Embedded selection позволяет задать как будет определяться конкретное имя
встраиваемого вида, на основании языка @-формул, или статично по имени. Этой цели отвечают две
радиокнопки: Display (отображение), расположенные в заголовке панели программного кода и, имеющие
значения View (вид) и Formula (формула). Выбор View приводит к отображению в панели программного
кода списка всех доступных видов/папок для БД, которая была выбрана в момент встраивания вида в поле
Database, а значение Formula позволяет определить имя встраиваемого вида на языке @-формул. Таким
образом, в любой момент времени разработчик может переопределить первоначальные параметры
встроенного вида, определяемые в окне Insert Embedded View (см. Рис. 4.128), за исключением
Database.
Если имя встраиваемого вида определяется по @-формуле, то такая формула должна возвращать
имя или алиас существующего для данной БД вида/папки. Например, @lf(@lsMember("$$WebClient";
@UserRoles); "WebView"; "NotesView").
Объект Show single category позволяет ограничить вывод содержимого встроенного вида только
контентом одной категории. Для этого первая колонка вида должна быть категоризована и иметь
текстовый формат. Причем, под термином «первая колонка» здесь подразумевается именно первая
колонка, независимо от ее видимости или «скрытости». Далее в программной панели объекта Show single
category указывается @-формула, возвращающая значение искомой категории или символа звездочки
(«*»). Последнее значение (звездочка) выводит содержимое встроенного вида как без определения
объекта Show single category. Если задано значение отличное от «звездочки», то осуществляется
попытка найти в виде категорию с таким значением. В случае успеха, содержимое встроенного вида будет
соответствовать документам из найденной категории, причем сама категория отображаться не будет. В
противном случае будет отображаться пустой встроенный вид.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
175
Пример использования объекта Show single category. БД используется для учета автомобильного
транспорта. В документах присутствует поле Туре, куда внесена марка автомобилей. Форма со
встроенным видом, у которого первая категоризованная колонка имеет формулу Туре, имеет еще поле
Туре типа список (Dialog list, Listbox или Combobox). В качестве значений поля Туре в форме
перечислены все допустимые марки автотранспорта и значение «*», кроме этого, у поля поднят флаг
Refresh fields on keyword change. Последний штрих - у встроенного вида в объекте Show single category
стоит формула Туре. Теперь при выборе в поле Туре конкретной марки автомобиля во встроенном виде
будут отображаться только те документы, которые имеют отношение к этой марке. Выбор символа
звездочки вызовет отображение встроенного вида без ограничения.
4.21.4 Осуществление взаимосвязи двух встроенных видов
В рамках Domino Designer можно осуществить взаимосвязь двух встроенных на одной
форме/странице видов. Для этого нужно в окне свойств встроенного вида под номером два на закладке
Display tab поднять флаг Show only current thread, и на закладке Info tab определить имя встроенного
вида в поле Name. Далее у первого встроенного вида в его окне свойств на закладке Info tab вносим в
поле Target Frame (for single click) значение Name, определенное на предыдущем шаге. Теперь при
перемещении по строкам в рамках первого вида, во втором будет отображаться только нить документов,
относящихся к выбранной строке из первого вида. Под нитью здесь понимается отображение во втором
виде только документов «родителей» и «потомков» по отношению к текущему документу первого вида.
Для корректной работы указанного механизма у второго вида должно быть установлено свойство
отображения ответных документов в соответствии с иерархией (флаг Show response documents in a
hierarchy, см. раздел 6.3.2).
Указанный механизм «почти» работает и для нитей, построенных на основе категорий, несвязанных
с ответными документами (например, по полям типа "Россия\Москва", "Россия\Владивосток" с
категоризацией). Под «почти» здесь понимается то, что при выборе в первом виде категории (которая не
является в этом случае документом), во втором виде ничего не происходит. Если выбирать в первом виде
конкретный документ, то нить во втором виде отображается.
В Web-приложениях указанная технология не работает даже в случае, когда встроенные виды
транслируются с помощью Java-апплетов.
4.21.5 Трансляция встроенного вида в Web
Отображение встроенного вида в интерфейсе браузера очень похоже на отображение обычного (не
встроенного) вида (см. раздел 6.10). Основными параметрами, определяющими трансляцию встроенного
вида в Web, являются поле: Display из секции Web Access с первой закладки окна свойств встроенного
вида (см. раздел 4.21.1) и свойства собственно вида из секции For Web Access (см. раздел 6.3.5).
Для встроенного вида, передаваемого в Web апплетом, транслируется большинство свойств с
первых двух закладок окна встроенного вида. При стандартном HTML и HTML с первым столбцом для
выделения документов в Web не транслируется значение поля Frame (for double click) с первой закладки
окна свойств. Со второй закладки транслируется только поле Show header. Для видов, передаваемых как
контекст HTML, в Web транслируется с первой закладки только поле Lines to display, а со второй закладки
- Show header.
Пример. Вариант использования встроенного вида с параметром Treat view contents as HTML. В
виде отбираются документы, содержащие поля Subject и Comment . Перед встроенным видом в форме
размещаем статичный текст [<TABLE BORDER="3">], затем размещаем встроенный вид с установленным
для него свойством Using View's display property, а за видом опять статичный текст на форме
[</TABLE>]. У встроенного вида устанавливаем для первого столбца формулу: "[<tr><td>" + Subject +
"</td>]", а для второго столбца - "[<td>" + Comment + "</td></tr>]". У самого вида устанавливаем свойство
Treat view contents as HTML. Можно еще в поле Title для первого столбца ввести значение
«[<tr><th>Subject</th>]», а для второго - «[<th>Comment</th></tr>]». При трансляции такой формы в Web
мы получим «нормальную» HTML таблицу. Например,
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
176
<HTML>
<HEAD>
</HEAD>
<BODY
TEXT="000000"
<FORM><TABLE
BGCOLOR="FFFFFF">
B0RDER="3"><BR>
<tr><th>Subject</th><th>Comment</th></tr>
<tr><td>Re:
Глас
<tr><td>Web
Users
<tr><td>Multiple
вопиющего. </td><td>Reply</td></tr>
</td><td>Memo</td></tr>
User
</td><td>Memo</td></tr>
<tr><td>Hoвoe в @-формулах </td><td>Memo</td></tr>
<tr><td>Hac атакуют. . . </td><td>Memo</td></tr>
<tr><td>serious
Lotus
Domino</td><td>Memo</td></tr><BR>
</TABLE></FORM>
</BODY>
</HTML>
4.22 Встроенный редактор - embedded editor
Элемент дизайна встроенный редактор (embedded editor) фактически представляет собой форму,
встроенную в другую форму. Допускается встраивание нескольких редакторов в пределах одной формы. С
помощью встроенного редактора можно реализовать следующую функциональность:
•
находясь в рамках одной формы, создать и сохранить документ по другой форме, включая
документы в БД отличных от текущей;
•
встроить в форму редактор со ссылкой на конкретный документ или якорь документа;
•
осуществить взаимосвязь встроенного вида и редактора.
Для создания embedded editor нужно установить курсор на бланке формы в место, где этот
редактор должен находиться, и воспользоваться меню Create -> Embedded Element -> Editor. Последнее
приводит к выводу модального диалогового окна Insert Embedded Form выбора формы для встраивания
в текущую форму:
Рис. 4.132 Модальное окно выбора формы для встраивания в текущую форму
Данное окно очень похоже на аналогичное модальное окно, появляющееся в процессе встраивания
вида на форму/страницу. В поле Database можно выбрать БД, выступающую в качестве источника форм
для поля Choose a Form (выбор формы). В последнем поле, кроме списка форм выбранной БД,
присутствует еще значение None (никакая форма). Это значение необходимо при встраивании редактора,
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
177
который будет ссылаться на некий документ или якорь документа, а также при осуществлении
взаимосвязи со встроенным видом (подробнее будет рассмотрено в раздел 4.22.3). Флаг Choose a Form
based on a formula (выбор формы базирующейся на языке @-формул) позволяет динамически
определять имя встраиваемой формы на основании языка @-формул. После встраивания редактора на
форму можно изменить все параметры из окна Insert Embedded Form, за исключением Database.
После создания встроенного редактора он отображается в Domino Designer и клиенте Notes в рамках
прямоугольной области, куда загружается выбранная форма.
Рис. 4.133 Внешний вид встроенного редактора в интерфейсе клиента Notes
Если встроенный редактор базировался на конкретной форме (т.е., не значение None), то открытие
родительской формы как на чтение, так и редактирование вызывает открытие формы встроенного
редактора в режиме создания нового документа. Соответственно последовательно отрабатывают события
(например, onLoad) сначала родительской формы, а затем встроенного редактора. Последовательность
возникновения событий сохранения, закрытия документа, пересчета полей и т.д., в общем случае зависит
от того, где это событие было инициировано, от режима отображения документа и еще от ряда
обстоятельств.
Пример. Основной документ уже был сохранен на диске и в настоящий момент находится в режиме
редактирования. В поля формы встроенного редактора и основного документа введены какие-либо
изменения. В родительской форме и форме, отображаемой через встроенный редактор, присутствуют
акции с кодом:
@UpdateFormulaContext;
@Command([FileSave]);
@Comraand([FileCloseWindow])
Клик по акции в родительской форме вызовет следующую последовательность событий: QuerySave
или onSubmit, затем QueryClose или onUnload родительской формы, потом стандартный запрос на
сохранение измененного документа. При положительном ответе приведенные события повторяются для
формы, отображаемой через встроенный редактор.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
178
Исходные данные те же, выполним клик по акции встроенной формы. Последовательность событий
будет следующая: QuerySave или onSubmit встроенной формы, затем запрос на сохранение
родительского документа, при положительном ответе - QuerySave или onSubmit родительского документа,
и, наконец, события закрытия окна сначала родительского, а затем дочернего документа.
Если в акциях формы убрать функцию @UpdateFormulaContext; то последовательность событий
может измениться в зависимости от того, какой из документов в настоящий момент времени активен, с
точки зрения клиента Lotus. Например, при клике по акции во встроенном редакторе может сначала
вызваться QuerySave или onSubmit родительского документа, а затем запрос на изменения документа из
встроенного редактора. К сожалению, данные моменты не отражены в документации, и подобную
информацию приходится получать из личного опыта.
В документации сказано, что в рамках формы встроенного редактора нельзя использовать: кнопки,
вычисляемый текст, гиперобъекты «действие», «всплывающее окно», определяемое по @-формуле, и
навигаторы. В этом же документе указано, что не нужно встраивать редактор в ячейку анимированной
таблицы. Из личного опыта, в простейших примерах указанные ограничения не действуют, т.е., можно
использовать во встроенном редакторе кнопки, вычисляемый текст, однако, возможно не во всех
контекстах. Опять же из личного опыта, в самих дочерних формах нельзя использовать встроенный
редактор, т.е. редактор, встроенный во встроенный редактор, не работает. Последнее замечание - для
использования формы в качестве встроенного редактора, у последней должно быть установлено свойство
Туре равное Document, но не Response или Response to Response (см. раздел 4.1.1). В противном
случае будет появляться ошибка как в Domino Designer, так и в клиенте Lotus Notes, об отсутствии
главного документа для ответа («Nо document is selected; please select a document to respond to.»).
При отображении во встроенном редакторе формы, разработчик может скрыть определенные ее
абзацы именно для такого режима отображения. Другими словами, абзац формы будет скрыт только при
отображении формы во встроенном редакторе. Это достигается поднятием флага Embedded с закладки
Paragraph Hide When (см. раздел 4.3.5)
Перейдем к рассмотрению свойств встроенного редактора. Для получения доступа к свойствам
встроенного редактора нужно его выбрать (но не выделить), при этом в меню верхнего уровня появится
новый пункт Element, содержащий единственный подпункт Editor Properties, выводящий окно свойств
встроенного редактора.
Окно свойств встроенного редактора состоит из пяти закладок. С точки зрения интерфейса, четыре
из них идентичны одноименным закладкам, рассмотренным в контексте свойств поля и статичного текста:
Border (см. раздел 4.4.2),
Paragraph Alignment (см. раздел 4.3.4),
Paragraph Hide When
(см. раздел 4.3.5) и
Paragraph Margins (см. раздел 4.4.1). Оставшуюся закладку рассмотрим
подробнее.
4.22.1 Info tab - общая информация о встроенном редакторе
Закладка
Info tab (общая информация о встроенном редакторе) содержит следующие
элементы интерфейса:
Рис. 4.134 Заклабка Info tab окна свойств встроенного редактора
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
179
В первой секции присутствует единственное поле Name (имя), определяющее имя встроенного
редактора. Значение поля используется при осуществлении взаимосвязи между встроенными редактором
и видом (подробнее см. раздел 4.22.3).
Секция Size (размеры) определяет ширину (поле Width) и высоту границ (Height) встроенного
редактора. Помимо полей Width и Height, напротив каждого из них имеется флаг Fit to window (подогнать
под окно), который подгоняет соответствующие рамки встроенного редактора под размеры окна.
В секции Content (содержимое) имеется ряд полей. Для встроенных редакторов, создаваемых на
основании конкретной формы (т.е., в поле Choose a Form стоит значение отличное от None) в секции
доступны только два флага:
•
Hide action bar (скрывать панель акций) - скрывает панель акций у дочерней формы;
•
Disable scrollbars (запретить полосы «прокрутки»). Смысл флага понятен из названия.
Если при встраивании редактора выбрать значение None для поля Choose a Form, то на закладке
Info tab окна свойств встроенного редактора становится доступной кнопка Paste
. Кнопка позволяет в
качестве объекта редактирования для встроенного редактора указать документ, заданный Notesгиперссылкой на якорь или документ. Эта ссылка должна быть предварительно скопирована в буфер
обмена через меню Edit -> Copy As Link -> Anchor Link или Edit -> Copy As Link -> Document Link. В
этом случае документ во встроенном редакторе по умолчанию будет находиться в режиме чтения,
независимо от режима родительского документа. При этом, документ во встроенном редакторе можно
стандартными средствами перевести в режим редактирования и сохранить.
4.22.2 Свойства встроенного редактора, определяемые в объектно-событийной панели
После создания встроенного редактора, в объектно-событийной панели Domino Designer появляется
одноименный объект, содержащий единственный подобъект: Embedded selection (определение имени
встроенного редактора).
Объект Embedded selection позволяет задать, каким образом будет определяться конкретное имя
встраиваемого редактора, на основании языка @-формул, или статично по имени. Этой цели отвечают
две радиокнопки Display (отображение), расположенные в заголовке панели программного кода, и
имеющие значения Editor (редактор) и Formula (формула). Выбор Editor приводит к отображению в
панели программного кода списка всех доступных для выбранной БД форм, а значение Formula позволяет
определить имя встраиваемого редактора на языке @-формул. Таким образом, в любой момент времени
разработчик может переопределить первоначальные параметры встроенного редактора, определяемые в
окне Insert Embedded Form (см. Рис. 4.132), за исключением Database. Если имя встраиваемого
редактора определяется на @-формулах, то такая формула должна возвращать имя или алиас
существующего для данной БД формы. Например, @lf(@lsMember("$$WebClient"; @UserRoles);
"WebForm"; "NotesForm").
4.22.3 Осуществление взаимосвязи редактора и вида, встроенных на форму
В рамках Domino Designer можно осуществить взаимосвязь встроенных на одну форму редактора и
вида. Для этого нужно при встраивании редактора указать в окне Insert Embedded Form для поля Choose
a Form значение None, и в окне свойств встроенного редактора на закладке Info tab определить значение
поля Name. Затем это значение нужно внести в поле Target Frame (for single click) с закладки Info tab
окна свойств встроенного вида (см. раздел 4.21.1).
Теперь при движении по встроенному виду, во встроенном редакторе будет отображаться документ,
выбранный во встроенном виде. Документ во встроенном редакторе по умолчанию будет находиться в
режиме чтения, но его можно перевести в режим редактирования и затем сохранить.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
180
4.22.4 Трансляция встроенного редактора в Web
Следует сразу заметить, что механизм взаимосвязи встроенных на одну форму редактора и вида в
Web не работает. В этом случае встроенный редактор в Web вообще не транслируется.
Встроенный редактор, у которого явно указана форма или редактируемый документ/якорь документа,
транслируется в Web тегом <IFRAME ...>. При этом редактируемый ресурс передается в атрибут SRC
данного тега. Размеры встроенного редактора в этом случае транслируются в атрибуты WIDTH и HEIGHT
тега <IFRAME ...>.
4.23 Встроенный аутлайн - embedded outline
В данном параграфе рассматривается объект аутлайн, «встроенный» в форму, и свойства данного
объекта. Собственно, объект аутлайн и его свойства, как элемента дизайна верхнего уровня, описаны в
разделе 9. В связи с этим, рекомендуется перед изучением настоящего параграфа сначала ознакомиться
с разделом 9.
Для встраивания существующего аутлайна в форму можно воспользоваться меню Create ->
Embedded Element -> Outline. Выбор последнего приводит к выводу модального диалогового окна Insert
Embedded Outline:
Рис. 4.135 Модальное окно выбора аутлайна для встраивания в форму
Данное окно очень похоже на аналогичное модальное окно, появляющееся в процессе встраивания
вида на форму/страницу. В поле Database можно выбрать БД, выступающую в качестве источника
аутлайнов для поля Choose an Outline (выбор аутлайна). Флаг Choose an Outline based on a formula
(выбор аутлайна базирующегося на языке @-формул) позволяет динамически определять имя
встраиваемого аутлайна на основании языка @-формул. После встраивания аутлайна на форму можно
изменить все параметры из окна Insert Embedded Form, за исключением Database.
После создания встроенного аутлайна он отображается в Domino Designer и клиенте Notes в рамках
прямоугольной области, куда загружается выбранный аутлайн.
После встраивания аутлайна в форму можно получить доступ и соответственно изменить свойства
«встроенного» аутлайна, как элемента формы. Для этого нужно выбрать (но не выделить) встроенный
аутлайн, при этом в меню верхнего уровня появится новый пункт Element, содержащий два подпункта:
•
Outline Properties (свойства аутлайна) - выводит окно свойств встроенного аутлайна;
•
Edit Embedded Outline (редактировать встроенный аутлайн). Пункт доступен только для
аутлайнов, встроенных в Rich Text поля документов. Позволяет в интерфейсе клиента Notes получить
доступ к окну свойств и аналогу объектно-событийной панели для встроенного аутлайна.
Окно свойств встроенного аутлайна состоит из семи закладок. С точки зрения интерфейса, три из них
идентичны одноименным закладкам, рассмотренным в контексте свойств поля и статичного текста:
©InterTrust Со. Тел. (495) 9567928 http.//www.intertrust.ru
181
Border (см. раздел 4.4.2),
Paragraph Hide When (см. раздел 4.3.5) и
Paragraph Margins (см.
раздел 4.4.1). Остальные закладки рассмотрим подробнее.
4.23.1 Info tab - общая информация о встроенном аутлайне
Закладка
интерфейса:
Info tab (общая информация о встроенном аутлайне) содержит следующие элементы
Рис. 4.136 Закладка Info tab окна свойств встроенного аутлайна
Первая секция закладки представляет следующие поля:
•
Name (имя). Задает имя встроенного аутлайна. Может быть использовано при программном
доступе к встроенному аутлайну;
•
Туре (тип). Определяет внешний вид аутлайна. Поле предоставляет на выбор одно из двух
значений: Tree style («древовидная» структура) и Flat style («плоская» структура). В первом случае
(Tree style) для аутлайнов, имеющих «раскрываемые» строки будут отображаться именно с
возможностью их явного дальнейшего раскрытия/свертывания. Для значения Flat style все строки
аутлайна, включая «раскрываемые», будут отображаться на одном уровне. Данную установку (Flat
style) рекомендуется использовать совместно с установкой свойства Title style (стиль заголовка) в
значение Simple («явный»). При установке Flat style «раскрываемые» строки продолжают оставаться
«раскрываемыми», однако, клик по ним приводит к отображению только входящих в данную строку
подстрок, и заголовок аутлайна (при Title style равном Simple) меняется с имени БД на имя
«раскрытой» строки аутлайна. Клик по заголовку в данном контексте вернет аутлайн на предыдущий
уровень. Установка Flat style вызывает появление в окне свойств дополнительного поля,
определяющего порядок вывода строк аутлайна: сверху вниз - Vertical (вертикальный), или слева
направо - Horizontal (горизонтальный). Из личного опыта, для корректного отображения (т.е., без
наложения друг на друга) у горизонтальных аутлайнов названий строк аутлайна и заголовка, следует
установить для них фиксированную ширину (поле Width из соответствующих секций Entry с закладки
Layout окна свойств встроенного аутлайна, подробнее см. раздел 4.23.4);
• Title style (стиль заголовка). Поле предлагает на выбор два значения: Hide («скрывать» заголовок)
и Simple («явный» заголовок). При значении Simple под первоначальным заголовком воспринимается
имя текущей БД. Может использоваться с предыдущим полем (при Туре равном Flat style);
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
182
•
Target frame (целевой фрейм). Определяет целевой фрейм для тех строк аутлайна, у которых
явно не определено одноименное свойство (см. разделы 9.2.1 и 9.2.2). Свойство передается в Webприложения;
•
подсекция Twisties (переключатели) появляется только, если в поле Туре выбрано значение Tree
style. Подсекция содержит:
• флаг Show twisties (отображать переключатели), который отвечает за вывод иконок,
показывающих текущее состояние строк аутлайна - свернута/развернута;
• флаг OS style (стиль операционной системы). При поднятом флаге иконки
сворачивания/раскрытия строк аутлайна соответствует операционной системе (символы «+» и «-»).
Данная установка поддерживается только на Windows платформах;
• поле Image (графическое изображение) позволяет разработчику самостоятельно
определить иконку, показывающую текущее состояние строки аутлайна (свернута/развернута).
Конкретная иконка выбирается из доступных графических ресурсов с помощью текстового поля и
кнопок:
Browse images (просмотреть графические ресурсы) и
Formula (формула).
• подсекция Columns (столбцы) появляется только, если в поле Туре выбрано значение Flat style, и в
следующем поле выбрано значение Vertical. Подсекция содержит:
• флаг Show as multiple columns (отображать как несколько столбцов). При поднятом флаге
если строки аутлайна не помещаются в отведенные ему границы по высоте, то непомещающиеся
строки будут выведены в несколько столбцов;
• поле Column Width (ширина столбца) определяет для этого режима ширину столбцов со
строками аутлайна.
Следующая секция содержит два поля. Второе поле определяет внешний вид аутлайна при наличии
в нем «раскрываемых» строк. Допустимыми для данного поля являются следующие значения: Expand all
(«раскрыть» все уровни), Expand first («раскрыть» только первую строку первого уровня, входящие в нее
строки отображаются так, как они были сохранены), Display as saved (отображать «раскрываемые» строки
так, как они были сохранены) и Collapse all («сворачивать» все уровни). Если для встроенного аутлайна
выбран тип Flat style, то у рассматриваемого поля остается для выбора только одно значение - Collapse
all.
Первое поле секции Root entry («корневая» строка) предназначено для отображения только
«дочерних» подстрок у конкретной «раскрываемой» строки аутлайна. В качестве допустимого значения
для Root entry следует задавать имя алиаса «раскрываемой» строки аутлайна (поле Alias с закладки
Outline Entry Info окна свойств строки аутлайна, подробнее см. раздел 9.2.1). Для невозможности
перехода на другие уровни аутлайна рекомендуется совместное использование Root entry и Title style
равным Hide, в противном случае будет отображаться заголовок текущей строки аутлайна, клик по
которой позволит подняться на один уровень вверх по отношению к «корневой» строке.
Следует отметить, что иногда после изменения свойств собственно аутлайна, для адекватного его
функционирования в качестве встроенного элемента формы/страницы следует удалить его из
формы/страницы и затем повторно встроить.
Секция Outline size (размер аутлайна) определяет размеры встроенного в форму аутлайна. Ширина
(Width) и высота (Height) определяется с помощью пары полей, первое - текстовое поле определяет
размер, а второе, поле-список, условно говоря, единицы измерения. Допустимыми значениями для полясписка, относящегося к ширине, являются следующие значения: Fit to window (%) (подгонять под размеры
окна в процентах), Fixed (Size) (фиксированный размер в сантиметрах), Fit to content (подгонять под
размеры содержимого аутлайна) и Fixed (Chars.) (фиксированный размер в символах). Для поля-списка,
задающего единицы измерения высоты, допустимы два значения: Fixed height (фиксированная высота) и
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
183
Fit to content (подгонять под размеры содержимого аутлайна). Кроме этого в секции присутствует еще
флаг Show scroll bar (выводить полосу «прокрутки»). При поднятом значении флага, и если содержимое
встроенного аутлайна не помещается по высоте/ширине в отведенные ему границы, то в интерфейсе
клиента Notes появляется вертикальная/горизонтальная полоса «прокрутки» содержимого аутлайна.
Секция Web access (при доступе через Web) содержит единственное поле, определяющее как будет
транслироваться аутлайн в Web-приложения, с помощью стандартного HTML (Using HTML), или
посредством Java-апплета (Using JavaApplet). Подробнее трансляция встроенного аутлайна в Web будет
рассмотрена в разделе 4.23.5.
В секции Special (специальная) присутствуют два флага:
• Maintain folder unread information (поддерживать информацию о непрочтенных документах в
папках). Поднятие флага выполняет две функции. Во-первых, становится доступным для изменения
следующий флаг, а во-вторых, в рамках папок, на которые есть ссылки во встроенном аутлайне,
можно использовать диалог Folders containing current document (папки, содержащие текущий
документ). Подробнее см. пример в конце этого параграфа;
• Show folder unread information (показывать информацию о непрочтенных документах в папках).
При поднятии данного флага, если в папках, ссылки на которые есть в аутлайне, будут находиться
непрочтенные документы, то такие папки будут отображаться в строке аутлайна жирным шрифтом, а
за, собственно, ярлыком в скобках будет выведено число непрочтенных документов.
Пример использования флага Maintain folder unread information. Создаем в БД несколько папок, у
одной из папок создадим акцию с командой:
@Command( [DiscoverFolders] )
Потом создаем аутлайн по умолчанию (Default Outline). Встраиваем его в форму (а лучше страницу).
У объекта встроенный аутлайн поднимаем флаг Maintain folder unread information. Далее создаем
фреймсет с двумя вертикальными фреймами, в левом отображаем страницу/форму со встроенным
аутлайном, а в правом вид/папку по умолчанию. Еще зададим для левого фрейма значение целевого
фрейма для открытия ссылок (Default target for links in frame) в виде имени правого фрейма. Теперь
откроем через аутлайн папку с акцией @Command( [DiscoverFolders] ), встанем на любой документ в
папке, и кликнем по акции. В результате получим диалог Folders containing current document:
Рис. 4.137 Диалог Folders containing current document
В котором в поле Select a folder (выбор папки) отображаются имена папок, содержащих текущий
документ. Кнопки диалога выполняют следующие действия:
• Open Folder (открыть папку) выполняет переход в папку, выбранную в поле Select a folder;
• Remove from Folder (удалить из папки) удаляет текущий документ из папки, выбранной в поле
Select a folder;
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
184
• Add to Folder (добавить в папку) открывает диалог выбора папки, в которую будет добавлен
текущий документ;
•
Exit (выход) закрывает диалог Folders containing current document.
Если в приведенном выше примере не использовать встроенный аутлайн с поднятым флагом
Maintain folder unread information или в папке не встать на какой-либо документ, то применение команды
@Command( [DiscoverFolders] ) вызовет ошибку: «Cannot execute the specified command.» (невозможно
выполнить указанную команду).
4.23.2 Font tab - параметры шрифтов встроенного аутлайна
Закладка
Font tab (параметры шрифтов) встроенного аутлайна имеет много общего с
одноименной закладкой окна свойств поля (см. раздел 4.3.3). Однако, на ней появились новые элементы
интерфейса, поэтому рассмотрим ее подробнее.
Рис. 4.138 Закладка Font tab окна свойств встроенного аутлайна
В дополнение к уже рассмотренным в контексте поля свойствам шрифта Font (шрифт), Size (размер)
и Style (стиль) появилась новая секция, содержащая кнопку-список, и кнопку Set All to Same (установить
одинаковые значения для текстовых надписей всех уровней). Кнопка-список определяет, к текстовым
надписям какого уровня будут применены параметры из второй секции закладки. Допустимыми для списка
являются следующие значения: Title Font (шрифт заголовка аутлайна), Top-Level Font (шрифт строк
аутлайна самого верхнего уровня) и Sub-Level Font (шрифт для строк аутлайна всех подуровней).
Обратите внимание, что значение Title Font присутствует в списке только, если на предыдущей закладке
окна свойств аутлайна для свойства Title style выбрано значение Simple (см. раздел 4.23.1). Кнопка Set
All to Same позволяет определить параметры шрифта для любого из значений поля списка (Title Font,
Тор-Level Font или Sub-Level Font), а затем, по нажатию на кнопку, распространить эти параметры на
оставшиеся уровни из списка.
Во второй секции закладки, по отношению к одноименной закладке свойств поля, изменился способ
определения цвета шрифта. Для этих целей теперь предназначены три поля: Normal (цвет для шрифта
обычной строки аутлайна, т.е., не Selected и не Moused), Selected (цвет шрифта выбранной строки
аутлайна, т.е., той на которой находится фокус) и Moused (цвет шрифта строки аутлайна, через которую в
настоящий момент проходит указатель мыши). Обратите внимание, что для шрифта заголовка аутлайна
(Title Font) для определения цвета используются только два поля: Normal и Moused.
4.23.3 Background tab - параметры фона встроенного аутлайна
Закладка
Background tab (параметры фона встроенного аутлайна) имеет следующий вид:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
185
Рис. 4.139 Закладка Background tab окна свойств встроенного аутлайна
В первой секции, аналогично предыдущей закладке, присутствует кнопка-список и кнопка Set All to
Same (установить одинаковые значения фона для строк аутлайна всех уровней). Кнопка-список
определяет, к фону строк аутлайна какого уровня будут применены параметры из второй и третьей секций
закладки. Допустимыми для списка являются следующие значения: Control Background (цвет фона тех
строк аутлайна, у которых фон не был задан явно в других элементах текущего списка), Title Background
(цвет фона строки заголовка аутлайна), Top-Level Background (цвет фона строк аутлайна самого
верхнего уровня) и Sub-Level Background (цвет фона строк аутлайна всех подуровней). Обратите
внимание, что значение Title Background присутствует в списке только, если на закладке Info tab окна
свойств аутлайна для свойства Title style выбрано значение Simple (см. раздел 4.23.1).
Интерфейс секции Background Color (цвет фона) контекстно зависим от рассмотренного поля
первой секции. В секции могут присутствовать до трех полей (Normal, Selected и Moused). Смысл полей
аналогичен одноименным полям с предыдущей закладки с той лишь разницей, что в секции Background
Color эти поля определяют цвет фона, а не шрифта. Обратите внимание, что для определенных значений
из поля-списка первой секции закладки, присутствуют не все три поля выбора цвета. Так для значения
Control Background отображается только одно поле Normal, а для Title Background - два поля Normal и
Moused.
Последняя секция Background Image (фоновой графическое изображение) текущей закладки
позволяет задать цвет фона определенных строк аутлайна (заголовок, строки верхнего уровня, подстроки
и остальные строки) на основании доступных графических ресурсов. Единственное отличие от
предыдущей секции состоит в том, что графические изображения не «привязываются» к действиям
пользователя (т.е., проход мыши, фокус на строке или остальные). С точки зрения интерфейса, секция
закладки очень похожа на секцию Cell image закладки Table/Cell Background окна свойств таблицы (см.
раздел 4.18.3). Из отличий можно отметить отсутствие в рассматриваемой секции кнопки Apply to All, а
также немного отличающиеся значения списка Repeat (повторы изображения). В нашем случае значения
поля следующие: Repeat once (однократный повтор в верхнем левом углу строки аутлайна), Repeat
vertically (повтор по вертикали слева), Repeat horizontally (повтор по горизонтали вверху), Tile
(многократный повтор по горизонтали и по вертикали) и Size to Fit (подогнать под размеры строки).
Следует отметить, что графические изображения аутлайна (если они определены см. разделы 9.2.1
и 9.2.2), отображаются поверх фона, определенного как с помощью графического изображения, так и
сплошного.
4.23.4 Layout tab - параметры размещения встроенного аутлайна
Закладка
Layout tab (параметры размещения встроенного аутлайна) предназначена для
определения параметров выравнивания и размещения строк, текстовых надписей и графических
изображений строк аутлайна. Закладка имеет следующий вид:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
186
Рис. 4.140 Закладка Layout tab окна свойств встроенного аутлайна
По аналогии с двумя предыдущими закладками, в первой секции текущей присутствуют кнопкасписок и кнопка Set All to Same (установить одинаковые значения параметров размещения для строк
аутлайна всех уровней). Кнопка-список определяет, к строкам аутлайна какого уровня будут применены
параметры из двух или трех нижележащих секций закладки. Допустимыми для списка являются
следующие значения: Title Layout (параметры размещения строки заголовка аутлайна), Top-Level Layout
(параметры размещения для строк аутлайна самого верхнего уровня) и Sub-Level Layout (параметры
размещения для строк аутлайна всех подуровней). Обратите внимание, что значение Title Layout
присутствует в списке только, если на закладке Info tab окна свойств аутлайна для свойства Title style
выбрано значение Simple (см. раздел 4.23.1).
Ниже расположены следующие секции: Entry (параметры размещения собственно строк аутлайна),
Entry Label (параметры размещения текстовых надписей) и Entry Image (параметры размещения
графических изображений). Если в кнопке-списке из первой секции закладки выбрано значение Title
Layout, то секция Entry Image на закладке отсутствует. В каждой из этих секций справа отображается
пиктограмма, которая относительно наглядно демонстрирует, как будут применяться параметры секции к
текущей строке аутлайна. Смена значения в поле-списке из первой секции закладки изменяет внешний
вид пиктограммы согласно текущему типу строки аутлайна.
Секция Entry содержит четыре поля. Первые два определяют высоту (Height) или ширину (Width)
строк аутлайна. Обычно в секции присутствует поле Height, но если на закладке Info tab окна свойств
встроенного аутлайна (см. раздел 4.23.1) установлены свойства Туре, равное Flat style и Horizontal, то
поле меняет свое название на Width. Первое поле Height/Width недоступно, если во втором выбрано
значение Fit content (подгонять размер под содержимое строки аутлайна). Второе значение Fixed
(фиксированные размеры) позволяет задать определенные разработчиком высоту или ширину строки
аутлайна. Собственно размер заносится в предшествующее поле. Из личного опыта, для корректного
отображения (т.е., без наложений) у горизонтальных аутлайнов названий строк аутлайна и заголовка,
следует установить для них фиксированную ширину. Следующие два текстовых поля определяют
величину вертикального и горизонтального смещения (Offset) строки аутлайна. Правая пиктограмма при
этом отражает, от каких собственно границ исчисляется смещение.
Секции Entry Label и Entry Image так же содержат два поля, определяющих вертикальное и
горизонтальное смещение. Вместо поля Height/Width в секции присутствует поле-список Align
(выравнивание), определяющий параметры выравнивания надписи/графического изображения. Данное
поле-список предлагает на выбор одно из следующих значений: Top-left (выравнивание по отношению к
левому верхнему углу строки), Top-center (по горизонтали по центру, по вертикали по верхнему краю),
Top-right (относительно правого верхнего угла строки), Middle-left (по вертикали по центру, по
горизонтали по левому краю), Middle-center (по центру как по вертикали, так и по горизонтали), Middleright (по вертикали по центру, по горизонтали по правому краю), Bottom-left (относительно левого нижнего
угла строки), Bottom-center (по горизонтали по центру, по вертикали по нижнему краю) и Bottom-right
(относительно правого нижнего угла строки).
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
187
4.23.5 Трансляция аутлайнов в Web
Трансляция аутлайна в Web практически не зависит от свойства БД Use JavaScript when generation
pages. Если у БД не установлено данное свойство, то при попытке транслировать аутлайн в Web
посредством Java апплета будет выдано предупреждающее сообщение, так же как для акций формы (см.
Рис. 4.85). Однако даже если отказаться от поднятия флага Use JavaScript when generation pages, то
Java-апплет аутлайна в браузер будет передаваться.
При передаче встроенного аутлайна в Web с помощью Java-апплета (Using JavaApplet) в HTML
страницу транслируются практически все свойства встроенного аутлайна. Исключение составляют
некоторые стили шрифтов и определенные значения параметров выравнивания с закладки Layout tab
(см. раздел 4.23.4).
В случае передачи встроенного аутлайна в Web с использованием стандартного HTML (Using
HTML), транслируется значительно меньше его свойств. В общем, трансляция в Web встроенных
аутлайнов с установленным свойством Using HTML, оформляется тегами: <TABLE...>, <TR> и <TD...>.
Активные элементы аутлайна передаются в HTML страницу тегом <А HREF ...>. Для «раскрываемых»
строк в атрибут HREF добавляются параметры ExpandOutline или StartOutline.
4.24 Встроенный навигатор - embedded navigator
В данном параграфе рассматривается объект навигатор, «встроенный» в форму, и свойства данного
объекта. Собственно объект навигатор и его свойства, как элемента дизайна верхнего уровня, описаны в
разделе 10. В связи с этим, рекомендуется перед изучением настоящего параграфа сначала ознакомиться
с разделом 10.
Встроенный в форму навигатор используется для осуществления навигации только в Webприложениях. В интерфейсе клиента Notes встроенный навигатор только отображается как графическое
изображение и не вызывает дополнительной навигации при клике по входящим в него объектам.
Для встраивания существующего навигатора в форму можно воспользоваться меню Create ->
Embedded Element -> Navigator. Выбор последнего приводит к выводу модального диалогового окна
Insert Embedded Navigator:
Рис. 4.141 Модальное окно выбора навигатора для встраивания в форму
Данное окно очень похоже на аналогичное модальное окно, появляющееся в процессе встраивания
вида на форму/страницу. В поле Database можно выбрать БД, выступающую в качестве источника
навигаторов для поля Choose a Navigator (выбор навигатора). Флаг Choose a Navigator based on а
formula (выбор навигатора, базирующегося на языке @-формул) позволяет динамически определять имя
встраиваемого навигатора на основании языка @-формул. После встраивания навигатора на форму
можно изменить все параметры из окна Insert Embedded Navigator, за исключением Database.
Создание встроенного навигатора вызывает появление в объектно-событийной панели формы
нового объекта Embedded Navigator. Данный объект содержит единственный подобъект Embedded
selection, позволяющий изменить встроенный навигатор на другой, или вообще определить его с
помощью языка @-формул. При выборе объекта Embedded selection в объектно-событийной панели,
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
188
разработчик может с помощью радиокнопок Navigator и Formula, представленных в верхней части
программной панели, задать встроенный навигатор, как постоянный из имеющихся в наличие (Navigator),
так и выбираемый на основании языка @-формул (Formula). Например, для Embedded selection может
быть определена следующая @-формула: @lf(@lsDocBeingEdited;"Nav1";"Nav2").
После встраивания навигатора в форму, можно получить доступ и соответственно изменить свойства
«встроенного» навигатора, как элемента формы. Для этого надо выбрать (но не выделить) встроенный
навигатор, при этом в меню верхнего уровня появится новый пункт Element, содержащий два подпункта:
Navigator Properties, выводящий окно свойств встроенного навигатора, и Edit Embedded Navigator.
Последний пункт доступен только для навигаторов, встроенных в Rich Text поля документа, и позволяют в
интерфейсе клиента Notes (а не Domino Designer) вызвать редактор встроенного навигатора.
Окно свойств встроенного навигатора состоит из шести закладок. С точки зрения интерфейса, пять
из них идентичны одноименным закладкам, рассмотренным в контексте свойств поля и статичного текста:
Border (см. раздел 4.4.2),
Paragraph Alignment (см. раздел 4.3.4),
Paragraph Hide When
(см. раздел 4.3.5),
Paragraph Margins (см. раздел 4.4.1) и
Paragraph Styles (см. раздел 4.4.3).
Рассмотрим подробнее первую закладку.
4.24.1 Info tab - общая информация о встроенном навигаторе
Закладка
Info tab (общая информация о встроенном навигаторе) имеет следующий вид:
Рис. 4.142 Закладка Info tab окна свойств встроенного навигатора
Первая секция Navigator (навигатор) не содержит активных элементов интерфейса, а только
информирует о том, как был создан навигатор - на основании формулы (отображается - By Formula -) или
на основании существующего навигатора (отображается имя навигатора).
Во второй секции присутствует единственное поле-флаг Display navigator specified in form name
when this form is used as a Navigator Template (отображать навигатор, определенный в имени формы,
когда данная форма используется в качестве шаблона для навигатора). В ранних релизах четвертой
версии Notes/Domino для отображения в Web-приложениях навигаторов, встроенных в форму,
использовались
формы
с
именем
$$NavigatorTemplate
for
имя_навигатора
или
$$NavigatorTemplateDefault. Далее на такой форме должно было присутствовать поле $$NavigatorBody.
В этом случае при обращении к навигатору по URL ...БД/навигатор?OpenNavigator происходил вывод
формы либо $$NavigatorTemplate for имя_навигатора (если навигатор из URL соответствовал
имени_навигатора из формы), либо $$NavigatorTemplateDefault (в противном случае). При этом на
месте поля $$NavigatorBody отображалось содержимое конкретного навигатора. В более поздних
релизах четвертой версии Notes/Domino появилась возможность «встраивать» навигатор в форму,
аналогично описанному в настоящем параграфе. Однако, для совместимости с предыдущими версиями,
продолжала (и продолжает) поддерживаться работа с формами $$NavigatorTemplate for
имя_навигатора и $$NavigatorTemplateDefault. Теперь, если встроить любой навигатор в такую форму
и установить у него флаг Display navigator specified in form name when this form is used as a Navigator
Template, то при обращении к навигатору по URL ...БД/навигатор?OpenNavigator будет осуществляться
вывод не конкретного навигатора, встроенного в форму $$NavigatorTemplate for имя_навигатора или
$$NavigatorTemplateDefault, а навигатора, соответствующего параметру навигатор из URL запроса.
Пример в конце параграфа закрепит эти знания на практике.
В остальном, трансляция в Web встроенных в форму навигаторов не отличается от трансляции
обычных навигаторов, как элементов дизайна верхнего уровня (см. раздел 10.4). Точно также, если у
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
189
навигатора не установлено свойство Web browser compatible, то браузер вернет ошибку на попытку
обращения к форме, содержащей такой встроенный навигатор.
Пример. В БД создадим два навигатора с именами First и Second. Создадим форму с именем
$$NavigatorTemplate for First, в которую встроим через меню Create -> Embedded Element -> Navigator
навигатор Second. Если у встроенного навигатора опущен флаг Display navigator specified in form name
when this form is used as a Navigator Template, то обращение пo URL ...БД/First?OpenNavigator
отобразит навигатор Second, а если флаг Display navigator specified in form name when this form is used
as a Navigator Template поднять - навигатор First.
4.25 Импортированный навигатор - imported navigator
В данном параграфе рассматриваются: объект навигатор, «импортированный» в форму, и свойства
данного объекта. Собственно объект навигатор и его свойства, как элемента дизайна верхнего уровня,
описаны в разделе 10. В связи с этим, рекомендуется перед изучением настоящего параграфа сначала
ознакомиться с разделом 10.
Для встраивания существующего навигатора в форму можно воспользоваться меню Create ->
Embedded Element -> Import Navigator. Выбор последнего приводит к выводу модального диалогового
окна Import Navigator выбора навигатора для импортирования в форму. Само окно очень похоже на
аналогичное окно Insert Embedded Navigator (см. Рис. 4.141), отличается от последнего отсутствием поля
Database (т.е., навигатор можно «импортировать» только из текущей БД) и флага Choose a Navigator
based on formula. В остальном, процесс «импортирования» навигатора в форму не отличается от
аналогичного процесса «встраивания». После импортирования навигатора в форму, он сам преобразуется
в графическое изображение Picture (см. раздел 4.6), а большинство его активных объектов - в
гиперобъекты, связанные с графическим изображением (см. раздел 4.15). Рассмотрим подробнее
процедуру трансляции объектов навигатора:
• текстовая надпись (Text), «закрашенный» прямоугольник (Rectangle), «закрашенный»
прямоугольник со скругленными углами (Rounded Rectangle), «закрашенный» эллипс (Ellipse), кнопка
(Button), «графическая» кнопка (Graphic Button) и гиперобъект прямоугольник (Hotspot Rectangle)
транслируются в «импортированном» графическом изображении в гиперобъект типа прямоугольник
(Hotspot Rectangle);
•
«закрашенный» многоугольник (Polygon) и гиперобъект многоугольник
транслируются в гиперобъект типа многоугольник (Hotspot Polygon);
•
(Hotspot
Polygon)
гиперобъект круг (Hotspot Circle) - в одноименный объект графического изображения.
Объект навигатора ломаная линия (Polyline) при трансляции в графическое изображение не
вызывает появления в последнем дополнительных гиперобъектов (т.е., просто остается как неактивная
часть картинки). Также не транслируются в графическое изображение свойства навигатора Initial view or
folder и Web browser compatible.
При трансляции составляющих навигатора в гиперобъекты графического изображения реальные
имена последних соответствуют именам объектов/гиперобъектов навигатора. Действия по событию клика
мыши передаются либо в поля секции Content, либо в объект Click из объектно-событийной панели.
После импортирования навигатора в форму его поведение ничем не отличается от графического
изображения и жестко связанных с ним гиперобъектов (см. раздел 4.15).
4.26 Стандартный встроенный навигатор «виды/папки»- folder pane
Объект Folder Pane (панель папок) предназначен для отображения в Web-приложениях
стандартного навигатора по всем доступным видам и папкам. В интерфейсе клиента Notes объект Folder
Pane отображается как серый прямоугольник с заголовком Folder Pane.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
190
Для размещения объекта Folder Pane на форме необходимо установить курсор в место, где этот
объект должен находиться, и воспользоваться меню Create -> Embedded Element -> Folder Pane, которое
вызовет появление на бланке формы серого прямоугольника с заголовком Folder Pane. После
«встраивания» объекта Folder Pane в форму, можно получить доступ и соответственно изменить его
свойства как элемента формы. Для этого надо выбрать (но не выделить) объект Folder Pane, при этом в
меню верхнего уровня появится новый пункт Element, содержащий единственный подпункт Folder Pane
Properties, выводящий окно свойств панель папок.
Окно свойств объекта Folder Pane состоит из пяти закладок.. С точки зрения интерфейса, все они
идентичны одноименным закладкам, рассмотренным в контексте свойств поля и статичного текста:
Font tab (см. раздел 4.3.3),
Paragraph Alignment (см. раздел 4.3.4),
Paragraph Hide When (см
раздел 4.3.5),
Paragraph Margins (см. раздел 4.4.1) и
Paragraph Styles (см. раздел 4.4.3).
При использовании объекта Folder Pane в Web-приложениях внешний вид объекта определяется
тегами маркированного списка (<UL> и <LI>). Ссылки на допустимые виды/папки транслируются в теги <А
HREF ...>. Имена видов/папок передаются в содержимое этого тега, причем, если имена видов/папок
составные (например, «туры\по стране»), то компоненты имени отделяются друг от друга символом тире
(«-»). Порядок следования элементов списка определяется в лексографическом порядке по всем именам
видов и папок (не зависимо от типа, т.е., виды и папки «вперемешку»). Пример:
<UL>
<LI><A HREF="/Test7.nsf/hhh?OpenView">hhh</A>
<LI><A HREF="/Test7.nsf/yyy?OpenView">hhh-jjj</A>
</UL>
Код сгенерированной HTML-страницы был несколько упрощен для удобства восприятия.
Трансляция объекта Folder Pane в Web не зависит от свойства БД Use JavaScript when generation
pages
4.27 Объект загрузки файлов на сервер - file upload
Объект File Upload (загрузка файлов на сервер) предназначен для создания в Web-приложениях
управляющего элемента, осуществляющего присоединение (attach) файлов к документам. В интерфейсе
клиента Notes объект File Upload отображается как серый прямоугольник с заголовком File Upload.
Для размещения объекта File Upload на форме необходимо установить курсор в место, где этот
объект должен находиться, и воспользоваться пунктами меню Create -> Embedded Element -> File Upload
Control. После этого на бланке формы появится серый прямоугольник с заголовком File Upload. После
«встраивания» объекта File Upload в форму можно получить доступ и соответственно изменить его
свойства как элемента формы. Для этого надо выбрать (но не выделить) объект File Upload, при этом в
меню верхнего уровня появится новый пункт Control, содержащий единственный подпункт File Upload
Control Properties, выводящий окно свойств объекта File Upload.
Окно свойств объекта File Upload состоит из пяти закладок. С точки зрения интерфейса, все они
идентичны одноименным закладкам, рассмотренным в контексте свойств поля и статичного текста:
Paragraph Alignment (см. раздел 4.3.4),
Paragraph Hide When (см. раздел 4.3.5),
Upload Extra
HTML (см. раздел 4.3.6),
Paragraph Margins (см. раздел 4.4.1) и
Paragraph Styles (см. раздел
4.4.3).
При трансляции объекта File Upload для документа в режиме редактирования (но не чтения), он
передается в генерируемую HTML страницу тегом <INPUT ...> с атрибутом TYPE равным file. Кроме этого,
в базовом теге <FORM ...> появляется новый атрибут ENCTYPE="multipart/form-data", который необходим
для корректной передачи присоединенного файла на сервер. С точки зрения интерфейса, тег <INPUT
TYPE=file ...> отображается в браузере как текстовое поле и кнопка Browse (просмотреть). Клик по кнопке
вызывает стандартный для ОС диалог выбора файла с локального компьютера. Например,
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
191
Рис. 4.143 Окно стандартного диалога выбора файла
После выбора файла и нажатия на кнопку Open (открыть), выбранный файл вместе с путем будет
перенесен в текстовое поле объекта File Upload. Далее, по факту события Submit формы, этот файл
будет передан на сервер и присоединен к редактируемому документу в поле $FILE. Если необходимо
присоединить к документу несколько файлов, то документ нужно опять открыть на редактирование, и
повторить операцию присоединения и сохранения требуемое число раз.
В Web-приложениях, при открытии на чтение документов, содержащих присоединенные файлы в
поле $FILE, эти файлы отображаются в самом низу формы под горизонтальной чертой (<HR>) в виде
иконок присоединенного файла (fileatt.gif) с именем, обычно, соответствующим исходному имени
присоединенного файла. В случае присоединения к документу одноименных файлов, при втором и
последующих присоединениях, Domino автоматически сгенерирует для них уникальное имя, которое и
будет отображаться в браузере.
При редактировании в браузере документов, содержащих присоединенные файлы в поле $FILE, под
горизонтальной чертой появляется надпись Mark attachments for deletion (пометьте присоединенные
файлы для удаления), а справа от каждой иконки присоединенного файла появляется поле-флаг. Если
поднять такой флаг(и), то при выполнении Submit формы, эти файлы будут удалены из поля $FILE
документа.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
192
Рис. 4.144 Внешний вид в интерфейсе браузера формы с объектом File Upload
Трансляция объекта File Upload в Web не зависит от свойства БД Use JavaScript when generation
pages.
4.28 Объект выбора даты - date picker
Объект выбора даты (Date Picker) предназначен для осуществления графической навигации в
«календарных» видах (т.е., видах со свойством Style равным Calendar, подробнее см. раздел 6.3.1),
представленных во фреймсетах (подробнее см. раздел 12). Объект Date Picker предназначен для работы
только в интерфейсе клиента Notes (но не Web) и представляет собой графический интерфейс,
позволяющий выбрать определенную дату/месяц, которые нужно отобразить в «календарном» виде.
Данный объект применяется в стандартном шаблоне почтовой БД:
Рис. 4.145 Внешний вид объекта Data Picker в интерфейсе клиента Notes
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
193
Для размещения объекта Date Picker на форме необходимо установить курсор в место, где этот
объект должен находиться, и воспользоваться пунктами меню Create -> Embedded Element -> Date
Picker. На форме можно разместить только один объект Date Picker. После «встраивания» в форму
объекта Date Picker, он не представлен в объектно-событийной панели, однако, можно получить доступ и
соответственно изменить его свойства как элемента формы. Для этого надо выбрать (но не выделить)
объект Date Picker, при этом в меню верхнего уровня появится новый пункт Element, содержащий
единственный подпункт Date Picker Properties, выводящий окно свойств объекта Date Picker.
Окно свойств объекта Date Picker состоит из шести закладок. С точки зрения интерфейса, пять из
них идентичны одноименным закладкам, рассмотренным в контексте свойств поля и статичного текста:
Font tab (см. раздел 4.3.3),
Border (см. раздел 4.4.2),
Paragraph Alignment (см. раздел
4.3.4),
Paragraph Hide When (см. раздел 4.3.5) и
Paragraph Margins (см. раздел 4.4.1).
Рассмотрим подробнее первую закладку.
4.28.1 Info tab - общая информация об объекте Date Picker
Закладка
Info tab (общая информация об объекте Date Picker) имеет следующий вид:
Рис. 4.146 Закладка Info tab окна свойств объекта Date Picker
Секция Size (размер) закладки позволяет определить вертикальные и горизонтальные размеры
объекта Date Picker. Поле Width (ширина) задает ширину объекта либо фиксированную, в
соответствующем текстовом поле, либо «подогнанную» под размеры окна (флаг Fit to window).
Аналогично определяется и высота объекта (Height). Смысл флага Proportional (пропорциональные
размеры) ясен из названия.
Секция Colors (цвета) определяет цветовую гамму для заголовка объекта (поле Header background)
и оставшейся его части (поле Control background).
Секция Target в единственном своем поле Target Frame (целевой фрейм) определяет имя фрейма,
на который будет воздействовать объект Date Picker. Если Target Frame поле не заполнено, то объект
Date Picker осуществляет навигацию по всем календарным видам, входящим как во фреймсет, так и в
текущую форму/страницу. В противном случае (поле заполнено) - навигация осуществляется только для
календарных видов указанного фрейма. В качестве значений данного поля допускается использовать
имена псевдофреймов. Например, значение _self «заставляет» Date Picker осуществлять воздействие
только на текущую форму/страницу.
4.29 Объект группового планирования - scheduler
Объект группового планирования (Scheduler) предназначен для создания на форме графического
интерфейса, позволяющего наглядно определять наличие свободного времени у сотрудников из адресной
книги, на основании записей о мероприятиях в почтовых БД пользователей. Кроме этого объект Scheduler
позволяет по активным ссылкам имен пользователей переходить в их личные «календарные» виды (при
наличии в конкретных БД соответствующих прав в ACL). Объект Scheduler может использоваться только в
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
194
интерфейсе клиента Notes (но не браузера). Данный объект применяется в стандартном шаблоне
почтовой БД:
Рис. 4.147 Внешний вид объекта Schedulers интерфейсе клиента Notes
Для размещения объекта Scheduler на форме необходимо установить курсор в место, где этот
объект должен находиться, и воспользоваться пунктами меню Create -> Embedded Element -> Scheduler.
Рассмотрение объекта Scheduler начнем с его параметров, определяемых в объектно-событийной панели
4.29.1 Параметры объекта Scheduler, определяемые в объектно-событийной панели
Объект Scheduler по умолчанию отображает три секции. Первая отвечает за показ
свободного/занятого времени конечных пользователей, вторая - комнат (Rooms), а третья - ресурсов
(Resources). Первая секция в свою очередь может делиться еще на две части, первая будет отображать
свободное/занятое время пользователей, присутствие которых на определенных мероприятиях
необходимо (Required people), а вторая - пользователей, присутствие которых на определенных
мероприятиях не всегда обязательно (Optional people). С другой стороны, Domino не требует жесткого
соответствия типа пользователей/комнат/ресурсов секциям объекта Scheduler. Например, в третьей
секции можно одновременно отображать свободное/занятое время как для ресурсов, так и для конечных
пользователей. Что конкретно будет отображаться в каждой секции объекта Scheduler, определяется в
следующих его объектах из объектно-событийной панели:
•
Required People Items - объект предназначен для задания @-формулы, которая должна
возвращать в рамках текущего документа имя поля или список имен полей, в которых хранятся имена
пользователей. На шаге выполнения именно для этих пользователей будет отображаться наличие
свободного/занятого времени в объекте Scheduler. Отображение будет идти в первой части первой
секции объекта Scheduler. Например, создадим на форме редактируемое поле с именем People,
типом Names, возможностью сохранения нескольких значений и выбором значений из адресной книги.
Теперь добавим на нашу форму объект Scheduler и для Required People Items установим значение
"People". Далее создадим документ по этой форме, выберем несколько пользователей в поле People и
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
195
нажмем клавишу F9. Результат- выбранные пользователи и их графики свободного/занятого времени
отобразятся в первой части первой секции объекта Scheduler;
•
Optional People Items - аналогично предыдущему пункту, но отображение для пользователей из
полей, связанных с этим объектом, идет во второй части первой секции объекта Scheduler;
•
Rooms Items - аналогично предыдущему пункту, но отображение для пользователей из полей,
связанных с этим объектом, идет во второй секции объекта Scheduler;
•
Resources Items - аналогично предыдущему пункту, но отображение для пользователей из полей,
связанных с этим объектом, идет в третьей секции объекта Scheduler;
•
Interval Start Time Items - объект предназначен для задания @-формулы, которая должна
возвращать имя поля текущего документа, в котором хранится начальная дата/время начала собрания
для объекта Scheduler. В значении поля обязательно должны присутствовать обе компоненты как
даты, так и времени. Определение значения для объекта Interval Start Time Items имеет смысл,
только когда в планировщике отображается интервальный индикатор (свойство Show interval
indicator, см. раздел 4.29.2.1). В этом случае значение из поля, на которое ссылается Interval Start
Time Items, определяет начальную границу интервального индикатора;
•
Interval End Time Items - аналогично предыдущему пункту, но определяет конечную границу
интервального индикатора;
•
Grid Start Time Items - объект предназначен для задания @-формулы, которая должна
возвращать имя поля текущего документа, в котором хранится начальная дата/время отображения
сетки для объекта Scheduler. Если для Grid Start Time Items не задано значение, то временная сетка
начинает отображаться с текущего значения даты/времени. Если в соответствующем поле не
определена какая-либо из компонент даты или времени, то она заменяется на текущее значение;
•
Display Hours Per Day Items - объект предназначен для задания @-формулы, которая должна
возвращать имя поля текущего документа, в котором хранится число часов, отображаемых в сетке
времени для объекта Scheduler;
•
Schedule Detail Items - объект предназначен для задания @-формулы, которая должна
возвращать список имен полей из документов календаря, которые будут отображаться в форме,
определяемой в следующем объекте (Detail Display Form);
•
Detail Display Form - объект предназначен для задания @-формулы, которая должна возвращать
имя формы/подформы текущей БД. По этой форме будет выводиться информация из полей,
определенных в объекте Schedule Detail Items. Отображение будет происходить при правом клике по
документу в объекте Scheduler. При этом появляется контекстное меню:
Рис. 4.148 Контекстное меню для события в объекте Scheduler
Дальнейший клик по пункту Details of entry for ... должен вывести информацию о документе в
соответствии с полями из Schedule Detail Items по форме из Detail Display Form. Для корректного вывода
на сервере должны быть настроены параметры сбора информации о свободном времени (документ
Configuration Settings для всех серверов -> закладка Basics -> флаг Extract calendar details и
следующее поле Calendar details to extract).
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
196
Рис. 4.149 Стандартная детализирующая форма из почтового ящика пользователя, выведенная через
пункт меню Details of entry for ...
•
Options, Declarations, Initialize и Terminate представляют собой события и псевдособытия для
экземпляра класса NotesUIScheduler. Последний является отражением объекта Schedule в
соответствии с объектной моделью Domino. Функциональность Options, Declarations, Initialize и
Terminate аналогична одноименным объектам формы (см. раздел 4.2.1);
•
Onintervalchange - обработчик события перемещения и/или изменения границ интервального
индикатора (свойство Show interval indicator, см. раздел 4.29.2.1). Код для этого объекта может быть
написан на языках LotusScript и Formula. В последнем случае из объектно-событийной панели
исчезают объекты Options, Declarations, Initialize и Terminate, относящиеся к Scheduler.
Использование языка Formula значительно сокращает функциональные возможности обработчика
события Onintervalchange.
Помимо определения значений для параметров Scheduler, определяемых в объектно-событийной
панели,
разработчик
может
добавить
на
форму
предопределенное
служебное
поле
$GroupScheduleShowLegend. Это поле при значении " 1 " осуществляет вывод снизу содержимого
«легенды» (т.е., расшифровки смысла используемых цветов). Значение "0" - «скрывает» легенду.
Пример. Для планировщика определены, в качестве значения объектов Interval Start Time Items и
Interval End Time Items, имена полей "IntervalStartTime" и "IntervalEndTime" текущего документа. В этом
случае обновление указанных полей при перемещении и/или изменении границ интервального
индикатора, можно выполнить через обработчик события Onintervalchange со следующим кодом:
Sub
Onintervalchange(Source
As
Notesuischeduler)
Dim uisdr As NotesDateRange
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim scheditem As NotesItem
Source.MeetingIndicator
Set
uidoc =
= True
workspace.CurrentDocument
uidoc.EditMode = True
Set doc = uidoc.Document
Set uisdr = Source.Interval
Set scheditem =
doc.ReplaceItemValue{"IntervalStartTime",
Set scheditem =
doc.ReplaceItemValue("IntervalEndTime",
uisdr.StartDateTime)
uisdr.EndDateTime)
End Sub
4.29.2 Параметры объекта Scheduler, определяемые в окне свойств
После «встраивания» объекта Scheduler в форму, можно получить доступ и соответственно
изменить его свойства, как элемента формы. Для этого надо выбрать (но не выделить) объект Scheduler,
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
197
при этом в меню верхнего уровня появится новый пункт Element, содержащий единственный подпункт
Scheduler Properties, выводящий окно свойств объекта Scheduler.
Окно свойств объекта Scheduler состоит из семи закладок. С точки зрения интерфейса, три из них
идентичны одноименным закладкам, рассмотренным в контексте свойств поля и статичного текста:
Border (см. раздел 4.4.2),
Paragraph Hide When (см. раздел 4.3.5) и
Paragraph Margins (см.
раздел 4.4.1). Рассмотрим подробнее оставшиеся закладки.
4.29.2.1
Закладка
Info tab - общая информация об объекте Scheduler
Info tab (общая информация об объекте Scheduler) имеет следующий вид:
Рис. 4.150 Закладка Info tab окна свойств объекта Scheduler
Первая секция содержит два поля:
•
Name (имя). Поле используется при программном доступе к объекту Scheduler;
• Target Frame (целевой фрейм). Поле определяет, в каком фрейме будут открываться личные
«календарные» виды пользователей и документы из них при обращении через объект Scheduler.
Секция Display options (параметры отображения) содержит три флага:
• Show interval indicator (отображать интервальный индикатор). При поднятии данного флага на
объекте появляется вертикальный «бегунок», который отображает текущее время начала и окончания
встречи. С помощью мыши можно передвигать и менять размер этого «бегунка». При этом «бегунок»
меняет свой цвет в зависимости от наличия у отображаемых пользователей свободного времени;
• Show color legend (отображать легенду). Поднятие флага вызывает отображение «легенды» (т.е.,
расшифровки смысла используемых цветов);
• Show twisties (отображать переключатель). Поднятие флага приводит к выводу переключателей
(символы плюс и минус), которые «раскрывают»/«свертывают» аналогично секциям строки с
информацией о требуемых и дополнительных пользователях, в соответствии с объектами Required
People Items и Optional People Items (см. раздел 4.29.1).
Секция Content options (параметры содержимого) содержит три флага:
• Initialize from item values (инициализация из значений полей). Если флаг поднят, то при
инициализации формы с планировщиком (т.е., при загрузке формы) будет выводиться график
свободного времени для пользователей и ресурсов, определенных через объекты Required People
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
198
Items, Optional People Items, Rooms Items и Resources Items (см. раздел 4.29.1). В противном случае
все разделы (люди/комнаты/ресурсы) будут пусты. Рекомендуется опускать данный флаг для
совместимости с версией R 5;
•
Refresh from item values (обновление из значений полей). Если флаг поднят, то при пересчете
формул полей на форме с планировщиком, происходит обновление информации о пользователях и
ресурсах на основании объектов Required People Items, Optional People Items, Rooms Items и
Resources Items (см. раздел 4.29.1). В противном случае обновление информации о
людях/комнатах/ресурсах должно выполняться программным способом через методы AddParticipant и
RemoveParticipants класса NotesUIScheduler;
•
Allow filtering (разрешить фильтрацию). Поднятие флага вызывает появление в заголовке каждой
секции планировщика кнопки , клик по которой вызывает контекстное меню:
• Аll (все) - при этом выборе в секции отображаются все участники встречи;
• Available (доступные) - при этом выборе в секции отображаются участники встречи, для
которых выбранные интервалы встречи не пересекаются с другими мероприятиями из их
календаря;
• Unavailable (недоступные) - при этом выборе в секции отображаются участники встречи,
для которых выбранные интервалы встречи пересекаются с другими мероприятиями из их
календаря.
Последняя секция закладки содержит три поля, с помощью которых можно определить заголовок для
трех основных секций планировщика:
•
Top title - заголовок верхней секции, т.е., для Required People Items и Optional People Items (см.
раздел 4.29.1);
•
Middle title - заголовок средней секции, т.е., для Rooms Items (см. раздел 4.29.1);
•
Bottom title - заголовок нижней секции, т.е., для Resources Items (см. раздел 4.29.1).
Кнопки
Formula, расположенные напротив каждого из перечисленных полей, позволяют
определить соответствующий заголовок на языке @-формул.
4.29.2.2
Закладка
Font tab - параметры шрифтов объекта Scheduler
Font tab (параметры шрифтов объекта Scheduler) имеет следующий вид:
Рис. 4.151 Закладка Font tab окна свойств объекта Scheduler
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
199
Данная закладка очень похожа на одноименную закладку окна свойств поля (см. раздел 4.3.3). Из
отличий можно отметить наличие в левом верхнем углу «выпадающего» списка со следующим набором
значений:
•
Left header font (шрифт заголовка левой части) - предназначен для определения параметров
шрифтов, используемых в заголовках секций;
•
Left font (шрифт левой части) - предназначен для определения параметров шрифтов,
используемых в левой части планировщика, за исключением заголовков секций;
•
Right header font (шрифт заголовка правой части) - предназначен для определения параметров
шрифтов, используемых в заголовках календарных значений.
При выборе Left header font и Right header font допускается установка только одного варианта
цвета шрифта в поле Normal (нормальный). Для выбора Left font помимо значения Normal можно
установить цвет шрифта для выбранной в данный момент строки (Selected), и строки, через которую
проходит указатель мыши (Moused).
Кнопка Set All to Same (установить все по образцу) позволяет задать одинаковые значения
параметров шрифта по текущему из набора Left header font, Left font и Right header font.
4.29.2.3
Закладка
Colors tab -параметры фона объекта Scheduler
Colors tab (параметры фона объекта Scheduler) имеет следующий вид:
Рис. 4.152 Закладка Colors tab окна свойств объекта Scheduler
Первая секция закладки содержит выпадающий список, который определяет для каких частей
планировщика будут применяться значения фона. Собственно, определение фона идет во второй секции
закладки Background Colors (цвет фона). Список из первой секции предлагает на выбор следующие
значения:
•
Control background (цвет фона для управления) - определяет цвет фона последней строки
планировщика (там, где обычно выводится «легенда»). Сам цвет определяется в поле Normal
(нормальный) секции Background Colors;
•
Left header background (цвет фона заголовков левой части) - определяет цвет фона заголовков
секций;
•
Left background (цвет фона левой части) - предназначен для определения цветов фона,
используемых в левой части планировщика, за исключением заголовков секций. По аналогии со
шрифтами допускается установка трех значений цвета фона: для выбранной в данный момент строки
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
200
(Selected), для строки, через которую проходит указатель мыши (Moused), и для остальных строк
(Normal);
•
Right header background (цвет фона заголовка правой части) - предназначен для определения
цвета фона заголовков календарных значений;
•
Right background (цвет фона правой части) - предназначен для определения цвета фона правой
части, за исключением заголовков календарных значений. Данный цвет фона отображается, только
если в секции не присутствует ни одного участника;
•
Suggestions background (цвет фона для предложений). Данный цвет фона предназначен вывода
информации планировщика в режиме предложений. Другими словами, календарная шкала в этом
случае отображается не по оси X, а по Y. Кроме этого, из рассмотрения исключаются уже
зарезервированные временные интервалы в связи с отмеченными предпочтениями. Настройки
отображения и предпочтения задаются с помощью кнопок Suggested times for ... (предложенное
время) и Check if ... (проверять если), а также объекта типа Date Picker. Для резервирования
выбранного времени используется кнопка Use Selected Time (использовать выбранное время).
Переключиться из обычного режима планировщика в режим предложений можно через LotusScript,
посредством установки в true значения свойства DisplayMeetingSuggestions класса NotesUIScheduler.
Рис. 4.153 Внешний вид объекта Scheduler в режиме предложений
Вернемся на закладку Colors tab. В первой секции помимо поля выпадающего списка присутствует
еще кнопка Set All to Same (установить все по образцу), которая позволяет задать одинаковые значения
цвета фона по текущему из набора Control background, Left header background, Left background, Right
header background, Right background и Suggestions background.
Секция Foreground Colors (цвета фона переднего плана) содержит следующие поля:
Gridlines (линии сетки) - определяет цвет фона сетки планировщика;
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
201
•
Unavailable (недоступное время) - определяет цвет фона для недоступного времени (обычно
нерабочее время: до начала работы, обед и после окончания работы, согласно календарному
профайлу);
•
Already scheduled (уже спланированное время) - определяет цвет фона для времени, уже
занятого другими делами, согласно документам календаря;
•
Available (доступное время) - определяет цвет фона для свободного времени, согласно
документам календаря;
•
No Info (нет информации) - определяет цвет фона для времени, относительно которого нет
информации;
•
Info Restricted (информация ограничена) - определяет цвет фона для времени, относительно
которого информации ограничена.
4.29.2.4
Закладка
Layout tab - параметры размещения объекта Scheduler
Layout tab (размещения объекта Scheduler) имеет следующий вид:
Рис. 4.154 Закладка Layout tab окна свойств объекта Scheduler
В секции Width (ширина) присутствуют две пары полей:
•
Overall (общий размер) - определяет, собственно, ширину планировщика и может вычисляться в
процентах по отношению к главному окну Notes (соответствует значению Fit to window(%) в
следующем поле) или в сантиметрах (значение следующего поля Fixed width);
•
Left (левая часть) - определяет ширину левой части (т.е., где отображаются участники
планирования) планировщика. Поле может определяться в сантиметрах (значение следующего поля
Fixed) и в процентах по отношению ко всему планировщику (значение следующего поля Fit to
scheduler (%)).
Секция Height (высота) определяет вертикальные размеры для всех трех секций планировщика
соответственно в парах полей: Тор (верхняя секция), Middle (средняя) и Bottom (нижняя). Единицы
измерения высоты представлены во втором поле каждой пары. Допустимые значения для этих полей
следующие: Fixed height (lines) (фиксированная высота в строках), Fit to content («подгонка» под размер
содержимого) и None (не отображать секцию).
4.30 Объект Java апплет - Java applet
В Domino Designer на форме можно размещать Java апплеты. Сам апплет при этом должен быть
подготовлен и откомпилирован в стороннем ПО (не Domino/Notes, например, IBM Rational Software
Development Platform). Для размещения объекта Java апплет (Java Applet) на форме необходимо
установить курсор в место, где этот апплет должен находиться, и воспользоваться меню Create -> Java
Applet. В результате этой операции появляется модальное окно:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
202
Рис. 4.155 Модальное окно Create Java Applet
Первая секция окна Create a link or а сору (создать ссылку или копию) определяет, как будет
встраиваться апплет в форму, в виде копии апплета или в виде ссылки. За первую возможность отвечает
радиокнопка Import an applet from the file system or use an applet resource (импортировать апплет из
файловой системы или использовать апплет, хранящийся как ресурс в БД). Ссылка на апплет
формируется по радиокнопке Link to an applet on a web server (ссылка на апплет с Web-сервера). В этом
случае местоположение апплета определяется в полях Base URL (базовый URL) и Base class name
(базовое имя класса) секции Location of the applet (местоположение апплета) окна Create Java Applet.
Например, апплет лежит по абсолютному адресу: http://www.inttrust.ru/applets/rubik.class, тогда для поля
Base URL нужно установить значение http://www.inttrust.ru/applets/, а для Base class name - rubik.class.
Выбор в секции Create a link or a copy значения радиокнопки Import an applet from the file system
or use an applet resource вызывает появление в модальном окне в дополнение к секции Location of the
applet (местоположение апплета) новой секции Applet files (файлы апплета). Для апплетов, которые не
хранятся в БД как ресурсы (подробнее см. раздел 16.4), добавить их на форму можно по кнопке
Browse
(просмотреть) из секции Location of the applet. Клик по кнопке вызовет стандартный диалог выбора
файла апплета из файловой системы рабочей станции разработчика. Выбор конкретного файла апплета в
этом диалоге автоматически заполнит поля текущей секции Base directory (базовая директория) и Base
class name (базовое имя класса). Допускается также и «ручное» заполнение этих полей.
В случае, когда требуемый апплет хранится в БД как ресурс, для его добавления на форму нужно
воспользоваться кнопкой Locate (местоположение) из секции Applet files. Та же кнопка может
использоваться и для «точных» настроек апплета из локальной файловой системы. Нажатие на кнопку
Locate вызывает модальный диалог Locate Java Applets Files (местоположение файлов Java апплета).
Подробно аналогичный диалог будет рассмотрен позднее в контексте Java агентов (см. Рис. 13.7).
После того как файлы апплета определены с помощью модального окна Create Java Applet, в
объектно-событийной панели появляется объект, соответствующий данному Java апплету. Этот объект
содержит три подобъекта:
•
HTML Attributes (HTML атрибуты) - позволяет на языке @-формул определить дополнительные
атрибуты, передаваемые в Web-приложениях в тег <APPLET ...>;
•
Applet Parameters (параметры апплета). Выбор в объектно-событийной панели этого подпункта
изменяет внешний вид панели программного кода Domino Designer. Она (панель) разделяется на две
части, первая называется Parameter name (имена параметров), а вторая - Parameter value (значение
параметров). В нижней части панели Parameter name расположены четыре кнопки:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
203
•
Add (добавить). Вызывает модальное окно для определения имени параметра. После
определения имени в панели Parameter value можно с помощью языка @-формул определить
значение выбранного параметра;
•
Change (изменить).
параметра;
•
Вызывает модальное окно для
модификации имени текущего
Delete (удалить). Удаляет имя и значение текущего параметра;
•
Paste (вставить из буфера обмена). Предназначена для внесения имен и значений
параметров из буфера обмена. Например, из исходного HTML-кода можно предварительно
скопировать в буфер обмена несколько строк типа <PARAM NAME="имя" VALUE="значение">, и по
настоящей кнопке они будут перенесены в виде «имя - значение» в панели Parameter name и
Parameter value;
•
Alternate HTML (альтернативный HTML код) - позволяет на языке @-формул определить
альтернативный HTML-код, передаваемый в Web-приложениях в содержимое тега <APPLET ...>.
Предназначен для отображения браузерами, которые не поддерживают технологию Java апплетов.
Помимо свойств Java апплета, определяемых в объектно-событийной панели, некоторые из них
доступны для изменения/просмотра в окне свойств Java апплета. Для получения доступа к окну свойств
Java апплета нужно выбрать его на бланке формы, или встать в объектно-событийной панели на любой из
его подобъектов. При этом в меню верхнего уровня появится новый пункт Java Applet, состоящий из
следующих подпунктов:
•
Java Applet Properties - выводит окно свойств Java апплета;
•
Java Applet Parameters - предназначен для определения свойств апплета из объектнособытийной панели в интерфейсе клиента Notes. Нужен для апплетов, встраиваемых в Rich Text поля.
В интерфейсе Domino Designer пункт недоступен;
•
Refresh (обновить) - вызывает модальный диалог Locate Java Applets Files (см. выше);
•
Export (экспортировать) - вызывает модальный диалог для определения директории, в которую
необходимо осуществить экспорт файлов апплета. Последние два пункта недоступны для Link to an
applet on a web server апплетов.
Апплеты обычно используются в Web-приложениях, однако, допускается их использование и в
интерфейсе клиента Notes (если это не запрещено в настройках локальной станции). За возможность
работы апплетов в клиенте Notes отвечает пункт меню: View -> Show -> Java Applets Running.
Ограничения использования апплетов в клиенте Notes определяются в настройках локальной станции
(окно User Preferences, доступ к окну через меню File -> Preferences -> User Preferences). Пользователь
может вообще запретить выполнение апплетов на данной рабочей станции (значение Enable Java applets
из поля с множественным выбором Additional Options закладки Basics окна User Preferences). В этом
случае на данной рабочей станции даже в Domino Designer блокируется возможность «встраивания»
апплетов в форму или страницу. Кроме такой радикальной возможности допускается введение
ограничений на некоторые операции, выполняемые апплетами. Это достигается через ECL рабочей
станции (в окне User Security, вызываемом через меню File -> Security -> User Security, на закладке
What Other Do -> Using Applets).
В окне свойств апплета только три закладки имеют прямое отношение к апплету:
Java Applet
Info (общая информация о Java апплете),
Applet Files (составляющие апплет файлы) и
Applet
Extra HTML (дополнительные HTML-параметры апплета). Последняя закладка практически аналогична
одноименной закладке, рассмотренной в контексте свойств поля (см. раздел 4.3.6). Единственное отличие
состоит в том, что у апплета доступно для редактирования поле Name (имя), которое передается в
одноименный атрибут тега <APPLET ...>. Закладка Applet Files содержит единственное одноименное и
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
204
нередактируемое поле, в котором отображены файлы, составляющие проект апплета. Здесь можно
посмотреть название этих файлов и порядок их следования. В принципе, то же самое, да еще с
возможностью редактирования можно увидеть в диалоге Locate Java Applets Files, получаемом через
меню Java Applet -> Refresh. Для Link to an applet on a web server апплетов их составляющие не будут
отображаться на закладке Applet Files.
4.30.1 Java Applet Info - общая информация о Java апплете
Закладка
интерфейса:
Java Applet Info (общая информация о Java апплете) содержит следующие элементы
Рис. 4.156 Закладка Java Applet Info окна свойств Java апплета
Первая секция Base class (базовый класс) содержит единственное поле, определяющее базовый
класс апплета из всех его составляющих. Поле доступно для редактирования. В Web-приложение
значение поля Base class передается атрибутом CODE тега <APPLET ...>.
Вторая секция содержит два поля DocBase и CodeBase. Про поле DocBase в документации сказано
только, что оно носит исключительно информативный характер и не предназначено для редактирования.
Исходя из значения поля видно, что оно (значение) соответствует относительному URL текущего объекта,
в рамках которого будет отображаться апплет (в нашем случае форма). Поле CodeBase предназначено
для хранения пути к составляющим файлам апплета относительно базового класса. В случае, когда
апплет создавался на основании ссылки на некий апплет с Web-ресурса (Link to an applet on a web
server), значение поля CodeBase совпадает со значением поля Base URL окна Create Java Applet (см.
Рис. 4.155), и, кроме этого, доступно для редактирования. В остальных случаях поле недоступно для
редактирования, и его значение равно значению поля DocBase плюс строка: «/$FILE». Иными словами это
относительный путь к файлам, составляющим апплет. В Web-приложениях значение поля CodeBase
передается одноименным атрибутом тега <APPLET ...>.
Третья секция Size (размеры) определяет отображаемые размеры апплета. Под каждую размерность
(Width - ширина и Height - высота) отведено два поля, первое определяет, собственно, размер, а второе
единицы измерения. Для единиц измерения предлагается на выбор одно из двух значений: Percent (%) (в
процентах от соответствующего размера родительского окна) или Pixels (в пикселях). В Web-приложениях
значения полей этой секции передается в одноименные атрибуты тега <APPLET ...>.
Секция Optional (необязательные параметры) содержит следующие элементы интерфейса:
•
текстовое поле Alternate Text (альтернативный текст). В Web-приложениях значение поля
передается в атрибут ALT тега <APPLET ... >;
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
205
• флаг Applet uses Notes CORBA classes (апплет использует Notes CORBA классы). В
документации сказано, что необходимо поднимать этот флаг при использовании апплета в Webприложениях. На самом деле, флаг следует применять в любых приложениях (клиент Notes или
браузер) в случаях, когда исходный код апплета написан с использованием Notes CORBA классов,
поставляемых с Domino. Другими словами, если апплет не обращается к ресурсам Domino/Notes
(например, тот же кубик Рубика), то поднятие флага не требуется;
• флаг Applet uses CORBA SSL security (апплет использует слой SSL при обращении к Notes
CORBA классам). Поле доступно только при выборе предыдущего флага. Поднятый флаг Applet uses
CORBA SSL security «заставляет» при работе с апплетом по протоколу IIОР использовать SSL;
• флаг Applet contains Notes CORBA classes (апплет содержит Notes CORBA классы). В этом
случае архив NCSO.jar в атрибут апплета ACHIVE не передается.
Вообще говоря, технологию апплетов в настоящее время нельзя назвать сильно развивающейся. В
Domino есть еще одно ограничение, API Notes-апплетов поддерживает JDK 1.1.8. Поэтому для создания
своих апплетов, использующих Notes-классы, реализующие эту технологию, нужно установить указанную
JDK.
4.31 Объект - список контактов службы «мгновенного» обмена сообщениями
- instant messaging contact list
Приложения Notes/Domino, начиная с версии 6.5, могут быть интегрированы с Sametime сервером. В
частности, из клиента Notes можно осуществлять «мгновенный» обмен сообщениями с другими
пользователями Sametime, определять текущий статус таких пользователей (активен/отключен и т.д.),
проводить обсуждения с тремя и более участниками.
Один из вариантов интеграции приложения Notes/Domino с Sametime сервером можно выполнить с
помощью встроенного объекта Instant Messaging Contact List (список контактов службы «мгновенного»
обмена сообщениями). Сразу заметим, что этот объект не поддерживается в Web-приложениях.
Для «встраивания» объекта на форму, страницу или Rich Text поле можно воспользоваться меню
Create -> Embedded Element -> Instant Messaging Contact List.
Рис. 4.157 Внешний вид объекта Instant Messaging Contact List в интерфейсе клиента Notes
После «встраивания» объекта в нем отображаются пользователи Sametime с указанием их текущего
статуса. Здесь же можно выбрать одного или нескольких пользователей (совместно с клавишей Shift или
Ctrl), и отправить сообщение или организовать чат с помощью двойного клика мыши.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
206
Рис. 4.158 Окно обмена сообщений с одним пользователям
Рис. 4.159 Окно чата
Для получения доступа к окну свойств объекта Instant Messaging Contact List нужно выбрать его на
бланке формы (без выделения), при этом в меню верхнего уровня появится новый пункт Element,
содержащий единственный подпункт Contact List, выводящий окно свойств объекта Instant Messaging
Contact List.
В окне свойств объекта Instant Messaging Contact List только первые три закладки имеют прямое
отношение к указанному объекту. Закладки Font tab (см. раздел 4.3.3) и
Border (см. раздел 4.4.2), по
элементам интерфейса полностью идентичны одноименным закладкам, рассмотренным в контексте полей
и статичного текста. Закладка
Info tab (общая информация об объекте) выглядит следующим
образом:
Рис. 4.160 Закладка Info tab окна свойств объекта Instant Messaging Contact List
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
207
Секция Size (размеры) позволяет определить размеры объекта по горизонтали и вертикали как в
сантиметрах (поля Width и Height соответственно), так и «подогнанными» под размеры главного окна
Notes (флаги Fit to window).
Секция Colors (цвета) позволяет определить в следующих полях:
•
Selected (выбранный) - цвет фона выбранных(ой) строк(и) в объекте Instant Messaging Contact
List;
•
Selected Text (выбранный текст) - цвет текста выбранных(ой) строк(и);
•
Background (фон) - цвет фона всего объекта.
4.32 OLE-объекты - object
За размещение на форме OLE-объектов отвечает пункт меню Create -> Object. После их выбора
появляется модальное окно:
Рис. 4.161 Модальное окно Create Object
В первой секции размещены три радиокнопки:
• Object (OLE-объект). Выбор этой радиокнопки приводит к отображению в поле Object type (тип
объекта) зарегистрированных на данном компьютере OLE-объектов;
• Control. Выбор этой радиокнопки приводит к отображению в поле Object type зарегистрированных
на данном компьютере OLE custom control объектов. Кроме этого, в нижней части окна появляются две
кнопки: Remove Control from List (удалить OLE custom control из списка, т.е., поля Object type) и Add
Control to list (добавить OLE custom control в список). Последняя кнопка вызывает стандартный
диалог выбора файла для регистрации его в качестве OLE custom control;
• Object from a file (OLE-объект выбирается из файла). В этом случае нижняя часть окна состоит из
поля File (файл) и кнопки Browse (показать), которые предназначены для определения имени
конкретного файла, выступающего в роли OLE объекта. Кнопка Browse вызывает диалог выбора
файла, а в поле File, при желании, значение можно внести вручную.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
208
Для случаев, когда OLE-объект берется из файла и для некоторых объектов типа Object, в правой
части окна появляется новый флаг Display as icon (отображать объект как иконку). При подъеме этого
флага в окне появляется новая кнопка Change Icon (сменить иконку). Клик по кнопке вызывает модальное
окно для изменения иконки по умолчанию для данного типа OLE-объекта.
После создания OLE-объекта и выбора его на бланке формы, в меню верхнего уровня появляется
новый пункт меню, имя которого зависит от типа OLE-объекта (например, Applet или Hypertext). Число
подпунктов этого пункта меню так же зависит от типа OLE-объекта, но первый подпункт Object Properties
(свойства OLE-объекта) всегда присутствует и предназначен для вывода «лотусового» окна свойств этого
объекта. Термин «лотусовый» в применении к окну свойств говорит о том, что это стандартное окно
свойств, аналогичное другим, уже рассмотренным объектам (поля, кнопки и т.д.). Дело в том, что у OLEобъекта может быть свое окно свойств с параметрами, не имеющими прямого отношения к Lotus/Domino.
При рассмотрении OLE-объектов и дальше очень часто будет встречаться фраза: «зависит от типа
OLE-объекта». После создания OLE-объекта он может присутствовать (а может и не присутствовать) в
объектно-событийной панели - зависит от типа OLE-объекта. Число подобъектов OLE-объекта в объектнособытийной панели (если он присутствует) так же зависит от типа OLE-объекта. В окне свойств OLEобъекта непосредственно к OLE-объекту имеет отношение первая закладка
Object Info (общая
информация об OLE-объекте). Внешний вид этой закладки так же зависит от типа OLE объекта.
Рис. 4.162 Один из вариантов закладки Object Info окна свойств OLE объекта
На закладке присутствует секция Name (имя), определяющая имя OLE-объекта, а также, обычно,
секции Size (размер) и Options (параметры).
Активация OLE-объекта в интерфейсе клиента Notes, обычно, осуществляется кликом по этому
объекту. При программном доступе к OLE-объекту можно использовать методы, собственно, объекта (если
они имеются), а так же методы и свойства встроенных классов LotusScript и Java (например, свойство
EmbeddedObjects).
В Web-приложения транслируются не все -объекты - зависит от типа OLE-объекта. Если все же
трансляция осуществляется, то OLE-объект обычно передается своим графическим образом (тег <I MG
SRC ...>), и, соответственно, никакой дополнительной функциональности не несет.
В завершении раздела хотелось бы отметить, что OLE-технология поддерживается только на
Windows-платформах.
4.33 Объект-присоединенный файл - attachment file
На бланке формы, так же как и в Rich Text полях, можно размещать присоединенные файлы. Это
достигается через пункты меню: Create -> Attachment. При этом появляется почти стандартное окно
выбора файла из файловой системы:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
209
Рис. 4.163 Модальное окно Create Attachment(s)
Отличие этого окна от стандартного диалога выбора файла состоит во флаге Compress (сжатие),
который позволяет сохранять присоединенный файл в сжатом (заархивированном) виде.
После выполнения операции присоединения файла на бланке формы/страницы появится иконка
присоединенного файла. На Windows-платформах внешний вид иконки обычно соответствует типу
зарегистрированных файлов.
Для получения доступа к свойствам уже существующего присоединенного файла, нужно выбрать его
на бланке формы (без выделения), при этом в меню верхнего уровня появится новый пункт Attachment,
содержащий следующие подпункты:
•
Attachment Properties - выводит окно свойств присоединенного файла;
•
View (показать) - осуществляется попытка отобразить присоединенный файл средствами клиента
Notes;
•
Open (открыть) - осуществляется попытка открыть присоединенный файл в приложении,
ассоциированном с данным типом файла;
•
Open With (открыть с помощью) - осуществляется попытка открыть присоединенный файл в
приложении, выбранном пользователем;
•
Edit (редактировать) - осуществляется попытка вызова приложения, в котором можно
отредактировать присоединенный файл. После редактирования и сохранения в форме/странице
окажется измененная версия присоединенного файла (т.е., процедура редактирования «по месту»);
•
Edit With (редактировать с помощью) - аналогично предыдущему пункту с отличием в выборе
пользователем приложения, в котором будет редактироваться присоединенный файл;
•
Save (сохранить) - выдается диалоговое окно для определения имени файла-копии и каталога,
куда его нужно поместить;
•
Save and Delete (сохранить и удалить) - после процедуры сохранения копии присоединенного
файла на диске, осуществляется его удаление из текущей формы/страницы. При этом, на месте
присоединенного файла появляется статичный текст с информацией, какой файл и кем был удален;
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
210
•
Delete (удалить) - удаляет присоединенный файл из текущей формы/страницы. При этом, на
месте присоединенного файла появляется статичный текст с информацией, какой файл и кем был
удален;
•
Save All (сохранить все) - выполняет групповую операцию сохранения для всех присоединенных
файлов текущей формы/страницы;
•
Save and Delete Аll (сохранить и удалить все) - выполняет групповую операцию сохранения и
удаления для всех присоединенных файлов текущей формы/страницы;
•
Delete Аll (удалить все) - выполняет групповую операцию удаления для всех присоединенных
файлов текущей формы/страницы.
В окне свойств присоединенного файла, собственно, к этому файлу имеет отношение только первая
закладка
Attachment Info (общая информация о присоединенном файле):
Рис. 4.164 Закладка Attachment Info окна свойств присоединенного файла
В первой секции Attachment Description (описание присоединенного файла) содержит обобщенную
информацию о присоединенном файле. В частности, об имени файла (File), размере файла (Length),
дате/времени модификации (Modified) и параметрах шифрования (Encoding).
Секция Attachment Actions (действия с присоединенным файлом) содержит кнопки: View, Open,
Edit, Save и Delete, которые дублируют одноименные подпункты меню Attachment.
Помимо рассмотренных свойств, для файлов, присоединенных непосредственно к документу, на
программном уровне существует достаточно широкий набор функций, методов и свойств для работы с
ними. Если же файл присоединен непосредственно к бланку формы, то «добраться» до него программным
путем несколько сложней.
Пример. Программа на LotusScript, размещенная в акции формы, «отсоединяет» все
присоединенные непосредственно к бланку формы файлы и складывает их в каталог C:\TMP. Доступ к
бланку формы осуществляется как к документу Notes по NotelD. Далее выполняется цикл по всем
присоединенным файлам из поля $Body, которое и является контейнером для файлов, присоединенных
непосредственно к бланку формы.
Sub Click(Source As Button)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Set db = session.CurrentDatabase
Set doc = db.GetDocumentByID(
"000005EE" )
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
211
'получили доступ к форме как документу Notes по NoteID
Set rtitem =
doc.GetFirstItem(
"$Body" )
'обращаемся к полю $Body
Forall о In rtitem.EmbeddedObjects
If ( o.Type = EMBED_ATTACHMENT ) Then
Call o.ExtractFile( "c:\tmp\" & o.Source )
End If
End Forall
End Sub
4.33.1 Трансляция присоединенных файлов в Web
Файлы, присоединенные непосредственно к бланку формы, отображаются в Web-приложениях так
же, как и в интерфейсе клиента Notes. Т.е., в виде иконки, клик по которой вызывает попытку открыть это
вложение в интерфейсе браузера или его дополнительных (plug-in) модулях. С точки зрения генерируемых
HTML тегов, присоединенный файл транслируется в тег <А HREF ...>, который обрамляет тег иконки <IMG
SRC>.
Если присоединенный файл является графическим изображением, распознаваемым в Webприложениях, то разработчик может самостоятельно сформировать URL для его открытия. В общем
случае URL выглядит следующим образом: .../БД/форма/File/имя_файла?OреnЕlеmеnt. Параметр
форма желательно задавать через ее UNID.
Пример. В БД имеется форма, UNID которой равен 2AF16AF2F02BFB49C3256E2A00730C6E. К
бланку формы присоединен файл logo.gif. В этом случае отображения logo.gif как «картинки» можно
осуществить с помощью объекта «вычисляемый» текст, со следующей формулой:
"[<img
src=\"/"
+
@ReplaceSubstring(@Subset(@DbName;-1);"\\";"/")
"/2AF16AF2F02BFB49C3256E2A00730C6E/$FILE/logo.gif?OpenElement\">]"
+
4.34 Горизонтальная линия - horizontal rule
Объект Horizontal Rule (горизонтальная линия) позволяет разделять на форме различные данные с
помощью горизонтальной прямой. Для создания Horizontal Rule нужно установить курсор на бланке
формы в место, где эта прямая должна находиться, и воспользоваться меню Create -> Horizontal Rule.
Для получения доступа к свойствам существующей горизонтальной линии, нужно выбрать ее на
бланке формы (без выделения), при этом в меню верхнего уровня появится новый пункт Horizontal Rule,
содержащий единственный подпункт Horizontal Rule Properties (свойства горизонтальной линии).
Последний, собственно, и вызывает окно свойств горизонтальной линии.
Окно свойств горизонтальной линии имеет две закладки. Вторая Horizontal Rule Extra HTML
(дополнительные HTML-параметры горизонтальной линии), с точки зрения интерфейса, полностью
идентична одноименной закладке свойств поля (см. раздел 4.3.6). Первая закладка Horizontal Rule
info (общая информация о горизонтальной линии) выглядит следующим образом:
Рис. 4.165 Закладка Horizontal Rule Info окна свойств горизонтальной линии
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
212
Первая секция Size (размер) определяет размеры горизонтальной линии. За ширину (Width) линии
отвечают два поля секции; в первом - задается, собственно, ширина, а второе (поле-список) - назначает
единицы измерения: Percent (%) (процент) или Fixed width (фиксированная ширина). Высоту
горизонтальной линии задает поле Height (высота).
Секция Fill (заполнение) определяет цвет и графические эффекты горизонтальной линии. Поле
Color (цвет) служит для задания цвета линии. Кнопки
и
определяют, соответственно, сплошной цвет
или градиентное его изменение. Во втором случае в секции появляется дополнительное поле То
(изменение к какому цвету). Смысл флага No 3D shading (без трехмерной тени) ясен из названия.
В Web-приложения горизонтальная линия передается тегом <HR ... >. Параметры Width и Color
транслируются в одноименные атрибуты тега <HR ... >, значение Height передается в атрибут SIZE,
поднятый флаг No 3D shading - в атрибут NOSHADE. Градиентный цвет горизонтальной линии в Web не
транслируется. С закладки Horizontal Rule Extra HTML в Web передаются все параметры. Следует также
отметить, что независимо от параметров горизонтальной линии в ее тег <HR ... > передается атрибут
ALIGN=left.
4.35 Объект- «жесткий» перевод страницы - page break
При печати документа Notes число получаемых при этом страниц зависит от содержимого документа
и формы, настроек размеров страниц, определяемых как в клиенте Notes (File -> Page Setup), так и в
настройках принтера операционной системы. Если разработчик желает установить на форме символ
принудительного перевода на следующий лист, то это достигается через пункты меню: Create -> Page
Break. После такой установки символ принудительного перевода отображается на бланке формы
горизонтальной разделяющей линией. При редактировании документов в интерфейсе клиента Notes
символ принудительного перевода на следующий лист можно устанавливать и в Rich Text полях. Это
достигается через те же пункты меню: Create -> Page Break.
Символ «жесткого» перевода страницы не оказывает влияние на Web-приложения.
Место появления «мягких» (т.е., автоматически генерируемых) переводов страниц можно отобразить
как в клиенте Notes, так и в Domino Designer. Это достигается через пункты меню: View -> Show -> Page
Breaks.
4.36 Работа с таблицами каскадных стилей - css
В данном параграфе рассматриваются: процедура встраивания и применения таблиц каскадных
стилей (Cascading Style Sheet) к объектам формы. Собственно объект-таблица каскадных стилей и ее
свойства, как элемента дизайна верхнего уровня, описаны в разделе 16.3. В связи с этим, рекомендуется
перед изучением настоящего параграфа сначала ознакомиться с разделом 16.3.
Для встраивания CSS нужно установить курсор на бланке формы в место, где эта таблица каскадных
стилей должна находиться, и воспользоваться меню Create -> Resource -> Insert Resource. При этом
появляется модальное окно:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
213
Рис. 4.166 Модальное окно Insert Resource
В поле Database (БД) окна Insert Resource можно выбрать БД-источник встраиваемых ресурсов, в
поле Resource type (тип ресурса) соответственно - тип ресурса (в нашем случае Style Sheets), а
конкретную CSS выбрать в поле Available resources (доступные ресурсы). После встраивания CSS на
бланке формы появляется иконка , которая представляет CSS в рамках Domino Designer.
Для получения доступа к свойствам подключенной CSS нужно выбрать ее на бланке формы (без
выделения), при этом в меню верхнего уровня появится новый пункт Style Sheet, содержащий
единственный подпункт Style Sheet Properties (свойства CSS). Последний, собственно, и вызывает окно
свойств CSS.
Окно свойств CSS имеет единственную закладку
которая выглядит следующим образом:
Style Sheet Info (общая информация о CSS),
Рис. 4.167 Закладка Style Sheet Info окна свойств CSS
С помощью кнопки
Browse (просмотреть) или «вручную» можно изменить значение поля Source
(источник), что будет соответствовать подключению к форме/странице другой CSS.
После того как CSS подключена к форме/странице, ее правила будут применяться к объектам
текущей формы/страницы в соответствии с селекторами CSS. В рамках Web-приложений применение
таких CSS полностью соответствует действующей спецификации на CSS. В клиенте Notes для встроенных
CSS имеется ряд ограничений. Так как в клиенте Notes «родные» для Domino объекты (например, поле)
явно не присутствуют в виде HTML-тегов, то не все селекторы CSS напрямую воздействуют на объекты
Domino (подробно это отражено в стандартной документации). Например, для того чтобы CSS можно было
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
214
применить к полю Domino, нужно разместить это поле в ячейке таблицы или слое. В этом случае к полю
будут применены соответствующие правила CSS для ячейки таблицы или слоя. В клиенте Notes работают
правила CSS, задаваемые через атрибут CLASS, которые можно определить на закладках
Extra
HTML или
Table Programming объектов Domino в одноименном поле (опять же учитывая
ограничения применимости). Например, если поле размещено в ячейке таблицы, у которой на закладке
Table Programming (см. раздел 4.18.7) в поле Class секции Cell HTML Tags задано имя класса
подключенной CSS, то правила этого класса будут применяться к полю из ячейки и в клиенте Notes.
Еще два замечания по поводу встроенных на форму/страницу CSS. Во-первых, скрытие абзаца с
CSS на форме/странице в Web-приложениях приводит к отключению «скрытой» CSS. В клиенте Notes в
этом случае CSS не отключается. Во-вторых, в клиенте Notes на применение CSS к текущей
форме/странице не влияет свойство формы Render pass through HTML in Notes (см. раздел 4.1.1).
4.37 Работа с библиотеками JavaScript - JavaScript Library
В данном параграфе рассматриваются: процедура встраивания и применения библиотек JavaScript в
рамках формы/страницы. Собственно объект библиотека JavaScript и ее свойства, как элемента дизайна
верхнего уровня, описаны в разделе 15.1. В связи с этим, рекомендуется перед изучением настоящего
параграфа сначала ознакомиться с разделом 15.1.
Встраивание библиотеки JavaScript на форму/страницу аналогично встраиванию CSS и выполняется
через меню Create -> Resource -> Insert Resource. Далее в поле Resource type модального окна Insert
Resource (см. Рис. 4.166) нужно выбрать значение Javascript Libraries, а в поле Available resources требуемую библиотеку.
После встраивания библиотеки JavaScript на бланке формы появляется иконка
представляет библиотеку JavaScript в рамках Domino Designer.
, которая
Для получения доступа к свойствам подключенной библиотеки JavaScript нужно выбрать ее на
бланке формы (без выделения), при этом в меню верхнего уровня появится новый пункт Script Library,
содержащий единственный подпункт Script Library Properties (свойства библиотеки JavaScript).
Последний, собственно, и вызывает окно свойств библиотеки JavaScript.
Окно свойств библиотеки JavaScript имеет единственную закладку информация о библиотеке JavaScript), которая выглядит следующим образом:
Library Info (общая
Рис. 4.168 Закладка Library Info окна свойств библиотеки JavaScript
С помощью кнопки
Browse (просмотреть) или «вручную» можно изменить значение поля Source
(источник), что будет соответствовать подключению к форме/странице другой библиотеки JavaScript.
После того как к форме/странице подключена библиотека JavaScript, код из нее можно вызывать в
объектах текущей формы/страницы.
Пример. В библиотеке JavaScript, подключенной к форме, определена функция abc, которая затем
вызывается в событии onLoad текущей формы.
//код библиотеки
function abc( par )
{
var my_date = new Date();
alert (par + my_date);
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
215
}
//код события onLoad формы
abc("Текущее время:");
Еще два замечания по поводу встроенных на форму/страницу библиотек JavaScript. Во-первых,
подключенные к форме/странице библиотеки JavaScript корректно работают как в клиенте Notes, так и в
браузере. Во-вторых, скрытие абзаца с библиотекой JavaScript на форме/странице приводит к отключению
такой библиотеки JavaScript в браузере. В клиенте Notes в этом случае библиотека JavaScript не
отключается.
4.38 Работа с файловыми ресурсами - file resource
В данном параграфе рассматриваются: процедура встраивания и применения файловых ресурсов в
рамках формы/страницы. Собственно, объект файловый ресурс и его свойства, как элемента дизайна
верхнего уровня, описаны в разделе 16.2. В связи с этим, рекомендуется перед изучением настоящего
параграфа сначала ознакомиться с разделом 16.2.
Встраивание файловых ресурсов на форму/страницу аналогично встраиванию CSS и выполняется
через меню Create -> Resource -> Insert Resource. Далее в поле Resource type модального окна Insert
Resource (см. Рис. 4.166) нужно выбрать значение HTML Files, а в поле Available resources требуемый
файловый ресурс.
После встраивания файлового ресурса на бланке формы
представляет файловый ресурс в рамках Domino Designer.
появляется иконка
, которая
Для получения доступа к свойствам подключенного файлового ресурса, нужно выбрать его на бланке
формы (без выделения), при этом в меню верхнего уровня появится новый пункт HTML File, содержащий
единственный подпункт HTML Resource Properties (свойства файлового ресурса). Последний,
собственно, и вызывает окно свойств файлового ресурса.
Окно свойств файлового ресурса имеет единственную закладку
ошибке) Style Sheet Info, которая выглядит следующим образом:
, именуемую (скорее всего по
Рис. 4.169 Закладка Style Sheet Info окна свойств файлового ресурса
С помощью кнопки
Browse (просмотреть) или «вручную» можно изменить значение поля Source
(источник), что будет соответствовать подключению к форме/странице другого файлового ресурса.
После того как к форме/странице подключен файловый ресурс, HTML-код из нее встраивается в
текущую форму/страницу. Можно рассматривать эту технологию как некий аналог Server Side Include.
Пример. При встраивании на форму файлового ресурса MyHTML.htm на его месте в клиенте Notes и
браузере будет выведена таблица, соответствующая HTML-коду файла MyHTML.htm:
<table border="3">
<tr>
<td>1</td>
<td>2</td>
</tr>
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
216
</table>
Ряд замечаний по поводу встроенных на форму/страницу файловых ресурсов:
• во-первых, при выборе в поле Resource type модального окна Insert Resource (см. Рис. 4.166)
значения HTML Files, в поле Available resources отображаются не все существующие файловые
ресурсы, а только HTML-файлы (т.е., имеющие расширение *.html и *.htm). Таким образом, нельзя
подключить к форме/странице файловый ресурс другого типа;
• во-вторых, в клиенте Notes на отображение файлового ресурса в рамках текущей формы/страницы
не влияет свойство формы Render pass through HTML in Notes (см. раздел 4.1.1);
• скрытие абзаца с иконкой файлового ресурса на форме/странице в Web-приложениях приводит к
скрытию его кода, а в клиенте Notes в этом случае код файлового ресурса все равно отображается.
4.39 Работа с HTML-кодом
Помимо уже рассмотренных свойств текста: Pass-Thru HTML, стиля HTML и текста, заключенного в
квадратные скобки, в рамках Domino Designer, начиная с версии 6, появились новые возможности для
работы с HTML-кодом.
4.39.1 Преобразование объектов Domino в HTML-код
При обращении к ресурсам Domino через Web, сервер «на лету» транслирует соответствующие
ресурсы к HTML-коду. В рамках Domino Designer можно выполнить это преобразование непосредственно в
рабочей панели. Для этого нужно выделить часть формы/страницы с объектами Domino (например,
таблица с полями в ячейках) и воспользоваться меню Edit -> Convert to HTML. При этом появляется
предупреждающее окно About converting to HTML:
Рис. 4.170 Модальное окно About converting to HTML
В окне присутствует информация о том, что не все объекты корректно конвертируются в HTML
Кроме этого, так как не имеется взаимно однозначного соответствия между объектами Domino и HTMLкодом, то при преобразовании определенная информация (например, формулы полей) может быть
потеряна. Если это не пугает разработчика, то можно нажать кнопку Proceed (продолжить) в модальном
окне About converting to HTML. В результате выделенные Domino объекты будут преобразованы в
статичный HTML-код с установленным свойством Pass-Thru HTML.
Если результат преобразования не устраивает разработчика, то следует воспользоваться меню Edit
-> Undo Delete, которое вернет выделенные Domino объекты к состоянию до преобразования. При этом в
форме останется и сгенерированный HTML-код.
4.39.2 Преобразование HTML-кода в объекты Domino
В Domino Designer существует и обратная операция, которая преобразует статичный HTML-код с
установленным свойством Pass-Thru HTML в объекты Domino. Это выполняется через меню Edit ->
Convert to Notes Format. При этом, появляется предупреждающее о необратимости операции окно.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
217
Определенная информация при таком преобразовании может также теряться. Обратите внимание, что
пункт доступен только в случае, если на форме/странице нет выделенных объектов. Другими словами,
данное преобразование применяется целиком к форме/странице.
4.39.3 Domino Designer как HTML-редактор
Domino Designer, начиная с версии 6, может быть использован и как простейший HTML-редактор. Для
этого при условии, что в рабочей панели присутствует бланк формы/страницы без выделенных объектов,
необходимо воспользоваться меню View -> HTML Pane.
Рис. 4.171 Работа с HTML-кодом в панели HTML pane
При этом рабочая панель делится на две части: в нижней отображается Pass-Thru HTML код
формы/страницы, а в верхней - как этот код будет выглядеть в браузере. Если в нижней панели сделать
какие-либо изменения в HTML-коде, то изменения сразу не произойдут в верхней панели. Для этого нужно
нажать кнопку
Refresh (обновить) или воспользоваться меню View -> Refresh.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
218
5
Проектирование подформ - subform
Мы уже рассматривали общие (Shared) поля, дизайн и функциональность которых определяются в
одном месте, а затем эти поля могут использоваться в любых формах текущей БД. Продолжением этой
мысли на уровне форм являются подформы (Subform). Если в различных формах встречаются
пересекающиеся по информации области, то есть смысл выделить их в отдельные подформы. Например,
в БД у ряда форм встречаются поля и текстовые надписи, имеющие отношение к дате/времени создания
документа и автору документа.
Использование подформ позволяет: во-первых, сократить занимаемое БД дисковое пространство,
во-вторых, упростить модификацию приложения. Последнее связано с тем, что изменяя только
содержимое подформы, автоматически изменяются все формы, содержащие данную подформу в виде
элемента дизайна. Подформу можно также классифицировать как элемент дизайна очень похожий на
форму, но который практически не может выступать в качестве самостоятельного элемента дизайна БД,
исключая диалоги (например, @DialogBox). Для работы подформа должна быть «встроена» в форму.
Допускается как статичное, так и динамичное «встраивание» подформ в форму. В последнем случае, имя
реально встроенной формы будет определяться в момент открытия формы, на основании языка @формул. Читатели, знакомые с Web-технологией SSI (Server Side Include), найдут прямые аналогии с
механизмом подформ Domino/Notes. Также следует отметить, что подформы поддерживаются и очень
активно используются в Web-приложениях.
5.1 Создание и модификация подформ
Для создания новой подформы можно воспользоваться меню: Create -> Design -> Subform. В
результате этой операции в рабочую панель Domino Designer загрузится бланк пустой подформы. После
заполнения подформы элементами дизайна и сохранения её, подформа попадает в папку Shared
Code\Subforms Domino Designer. Когда бланк подформы загружен в рабочую панель, можно с помощью
меню Design -> Subform Properties получить доступ к окну свойств подформы.
Окно свойств подформы состоит из двух закладок.
5.1.1
Закладка
интерфейса:
Subform Info tab - общая информация о подформе
Subform Info tab (общая информация о подформе) содержит следующие элементы
Рис. 5.1 Закладка Subform Info tab окна свойств подформы
В первой секции определяются: имя подформы - поле Name и комментарии - Comment. Последнее
поле не влияет на поведение приложения. Значение этого поля еще отображается в одноименном
столбце папки Shared Code\Subforms. В поле Name, кроме имени, можно ввести еще алиас подформы.
Для этого надо отделить его (алиас) от имени символом вертикальной черты («|»).
Во второй секции закладки присутствуют следующие флаги:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
219
•
Include in Insert Subform dialog (включать в диалог встраивания подформы). Поднятие флага
включает имя подформы в модальный диалог «встраивания» подформы в форму (подробнее будет
рассмотрено в разделе 5.3);
•
Include in New Form dialog (включать в диалог создание новой формы). Если флаг поднят, то при
создании новой формы принудительно вызывается модальный диалог «встраивания» подформы в
форму, и в этом диалоге присутствуют только имена подформ, у которых поднят флаг Include in New
Form dialog;
•
Render pass through HTML in Notes (исполнять код pass through HTML в клиенте Notes). По
действию аналогичен одноименному флагу свойств формы (см. раздел 4.1.1);
•
Do not add field names to field index (не добавлять имена полей к индексу полей). По действию
аналогичен одноименному флагу свойств формы (см. раздел 4.1.1)
Обратите внимание, что у подформы нет свойств, связанных с цветом фона. Подформа обладает
«прозрачным» фоном, и при отображении в рамках формы цвет фона подформы совпадает с цветом
фона формы.
5.1.2
Закладка
Security tab - закладка «безопасность»
Security (безопасность) выглядит следующим образом:
Рис. 5.2 Закладка Security tab окна свойств подформы
Закладка содержит единственный флаг Available to Public Access users (доступ к подформе
пользователям с уровнем доступа «Общедоступный»). Поднятый флаг предоставляет пользователям,
даже с уровнем «Нет доступа», но с поднятым в ACL флаге Read public documents (возможность читать
общедоступные документы) или Write public documents (возможность создавать общедоступные
документы) получать доступ на чтение или создание/редактирование к общедоступным документам,
созданным по форме, содержащей текущую подформу.
5.2 Составляющие элементы подформы
На бланке подформы можно размещать все типы элементов дизайна, допустимых для формы,
включая подформы. В последнем случае, при включении в подформу другой подформы, нужно избегать
рекурсий (даже через промежуточные подформы). Для объектов акций подформы существуют некоторые
отличия от акций формы. Во-первых, в подформу нельзя подключить системные акции (меню Create ->
Action -> Insert System Actions недоступно). Во-вторых, в подформе отсутствует объект Action Bar. Все
эти объекты определяются в основной форме. Просто акции в подформе определять можно. Они будут
появляться в панели акций формы (если они должны отображаться) сразу за акциями, определенными в
самой форме. Если подформ в форме несколько, то порядок следования акций формы определяется по
факту появления подформ сверху вниз.
В объектно-событийной панели подформы присутствует ряд объектов одноименных с формой.
Объект Globals подформы аналогичен одноименному объекту формы (см. раздел 4.2.1), но действует на
уровне подформы. Все подобъекты объекта Subform так же аналогичны одноименным подобъектам
объекта Form формы (см. раздел 4.2.2). Последовательность выполнения одноименных объектов формы
и подформ всегда можно проверить с помощью функций и методов @Prompt, MessageBox и Alert.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
220
5.3 Встраивание подформ в форму
Как уже упоминалось, существует два метода встраивания подформы в форму: статичный и с
определением имени конкретной подформы на языке @-формул. В обоих случаях для встраивания нужно
установить курсор в теле формы на место, где подформа должна находиться, и воспользоваться меню
Create -> Resource -> Insert Subform. При этом появится модальное окно Insert Subform:
Рис. 5.3 Модальное окно Insert Subform
В поле Database (БД) окна Insert Subform можно выбрать БД-источник встраиваемых ресурсов, и
затем - имя подформы выбранной БД (поле-список Insert Subform), или организовать «встраивание» на
основании @-формул (поле-флаг Insert Subform based on formula). Здесь следует обратить внимание на
то, что выбор способа статичного или динамичного встраивания подформы в форму может быть
осуществлен только в окне Insert Subform. Другими словами, способ встраивания подформы в форму не
может быть изменен в объектно-событийной панели.
Выбор динамичного встраивания приводит к появлению в бланке формы прямоугольника с текстом
<Computed Subform>. Задание @-формулы, определяющей имя или алиас конкретной встраиваемой
подформы, осуществляется в объектно-событийной панели.
После встраивания подформы в форму, в объектно-событийной панели последней появляется
объект либо имя_подформы (Subform) - для статично встроенной подформы, либо Computed (Subform)
- для вычисляемой подформы. В первом случае (статичный) объект не содержит никаких подобъектов и
свойств, во втором - присутствует подобъект Default Value, который и используется для определения @формулы. Например, @lf(@lsMember("$$WebClient"; @UserRoles); "WebSubform"; "NotesSubform"). Для
вычисляемых подформ @-формула должна вернуть имя/алиас конкретной подформы текущей БД,
причем, не обязательно чтобы у этой подформы был установлен флаг Include in Insert Subform dialog.
При использовании вычисляемых подформ, разработчик должен сам следить за тем, чтобы в
окончательной форме с подформами не было одноименных полей. Последнее приводит к ошибке на
стадии выполнения.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
221
Рис. 5.4 Сообщение об ошибке. Найдены одноименные поля в форме и вычисляемой подформе
После встраивания подформы в форму у объекта подформа не появляется дополнительного окна
свойств, как, например, у встроенного в форму аутлайна или вида.
Помимо встраивания подформ в форму посредством меню Create -> Insert Subform, существует
еще один (правда, ограниченный) способ - поднять у одной или нескольких подформ флаг Include in New
Form dialog. В этом случае при создании новой формы в рамках БД, содержащей подформы с указанным
флагом, будет выведен диалог Insert Subform, аналогичный представленному на Рис. 5.3. В качестве
допустимых подформ будут указаны все подформы текущей БД с поднятым флагом Include in New Form
dialog. Кроме этого, в окне диалога отсутствует поле-флаг Insert Subform based on formula, поэтому
встраивание будет статичным. Также разработчик не влияет на первоначальное место, куда будет
встроена такая подформа. Иногда все же применение флага Include in New Form dialog бывает
оправдано. Например, подформа с логотипом и реквизитами компании.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
222
6 Проектирование видов - view
Виды (view), наряду с формами, являются образующими элементами дизайна БД. Если форма
предназначена для работы с одним документом, то вид позволяет оперировать с группой документов.
Виды отображают документы в табличной форме. Разработчик может управлять критерием отбора
документов в вид (например, в зависимости от значения определенного поля, по дате/времени создания, и
т.д.), может задавать порядок и условия сортировки и группировки документов, вычислять суммарные
значения по колонкам вида, выполнять групповые операции над документами (например, удаление,
пометка о прочтении/непрочтении) и многое другое (подробнее в текущем разделе). В клиенте Notes,
начиная с версии 6, можно создавать и редактировать документы на уровне вида, т.е., не открывая
соответствующую форму. Виды могут быть общими (Shared, т.е. доступными всем уполномоченным
пользователям БД) и личными (Private, доступные только своему создателю). Каждая БД после своего
создания содержит один вид, разработчик может создать требуемое число видов, но нельзя удалить
последний вид БД.
Вид представляется «внутри» БД своим индексом (индекс вида). Поэтому увеличение числа видов
(особенно с большим числом входящих в них документов) может значительно сказаться как на размере
файла БД, так и на производительности приложения в целом. Также существенно на размер индекса вида
(а, следовательно, и на размер БД) влияет включение в вид документов с полями типа Readers (см.
раздел 4.3.1) и использование в формуле отбора и в формуле колонок вида функций, оперирующих с
компонентами текущей даты/времени.
6.1 Создание нового вида
Создать новый вид можно с помощью пунктов меню Create -> Design -> View. При этом появляется
модальное окно:
Рис. 6.1 Модальное окно создания нового вида
Поле View name (имя вида) задает имя вида. Правила, которым должно подчиняться имя вида,
схожи с аналогичными правилами задания имени формы (см. раздел 4.1.1). View name может содержать
кроме собственно имени еще и алиасы, отделяемые от имени и друг от друга символом вертикальной
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
223
черты ("|"). Имя и алиасы вида чувствительны к регистру. Domino/Notes не проверяет алиасы видов на
уникальность их имен, это оставлено на усмотрение разработчика. Общее число всех символов в поле
View name не должно превышать 64 символа (для русских букв соответственно 32 символа). Допускается
создание многоуровневых имен видов. Для этого необходимо в собственно имени отделять один уровень
от другого символом обратного слеша ("\"). «Многоуроовневость» будет отображаться в клиенте Notes как
«раскрываемая» секция. Такое представление доступно как в стандартном навигаторе БД Folders and
Views (папки и виды), так и в меню перехода к другому виду (View -> Go То).
Рис. 6.2 Многоуровневые имена видов в модальном окне View -> Go То
Для видов, включенных в пункт меню View (реализация данного свойства осуществляется поднятием
флага Show in View menu, подробнее см. раздел 6.3.2), поддерживаются только двухуровневые имена
видов. Если уровней больше, то они отображаются в меню второго уровня через символ обратного слеша.
Заключение имени вида в круглые скобки (например, (MyView) ) приводит к определенному
«скрытию» вида. Под «скрытием» здесь подразумевается то, что имя такого вида исчезает из меню View,
View -> Go То и из стандартного навигатора Folders and Views. Однако, к такому виду можно обратиться
программным путем. Например,
@DbColumn( "" : "NoCache"; ""; "(MyView)"; 1 )
В принципе, основное предназначение таких видов и состоит в обращении к их содержимому
программным способом (например, в формулах полей типа список). «Скрытие» таких видов неполное, из
Web-приложений можно открыть такой вид по его универсальному идентификатору, алиасу и собственно
имени в скобках (например, .../Имя_БД.nsf/(MyView)?OpenVew ). В интерфейсе клиента Notes также
можно открыть такие виды с помощью «магической» комбинации клавиш. Одновременно нажав Ctrl и Shift,
и, не отпуская их, воспользуемся меню View -> Go То, при этом в модальном окне выбора видов для
перехода появятся и скрытые виды. Скрытые с помощью круглых скобок виды отображаются в папке
видов Domino Designer с указанием перед их именем серой стрелки.
Для видов, присутствующих в пункте меню View, можно организовать доступ по «горячей» клавише.
Это осуществляется включением символа подчеркивания ("_") перед символом «горячей» клавиши в
имени вида. Причем, символ подчеркивания может присутствовать как в первой, так и во второй
компоненте имени. Например, если имя вида «Ком_пании\по о_бороту», то для открытия этого вида
необходимо последовательно нажать следующие комбинации клавиш: сначала Alt - V (для вызова пункта
меню View), затем П (для открытия меню первого уровня «Компании») и, наконец, Б (собственно для
открытия вида «Компании\по обороту»). Открытый на данный момент вид помечается в меню View
символом «галочка».
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
224
Рис. 6.3 Внешний вид двухуровневого меню для имен видов
Вернемся к окну создания нового вида (см. Рис. 6.1). Поле View type (тип вида) определяет тип
создаваемого вида. Поле очень важное, так как после создания вида изменить его тип нельзя. Для View
type допустимыми являются следующие значения:
•
Shared (общий). Данный тип вида наиболее часто встречается в приложениях. Доступ к
информации таких видов имеют обычно пользователи с уровнем доступа «Читатель» и выше
(подробнее см. раздел 18.5.1). Создавать общие виды может пользователь с уровнем доступа
«Дизайнер» и выше, или «Редактор» с установленным в ACL флагом Create shared folders/views
(создание общих папок/видов подробнее см. раздел 18.5.1);
•
Shared, contains documents not in any folders (общий вид, содержащий документы, не
присутствующие ни в одной папке (Folder), подробнее см. раздел 7). Смысл понятен из названия;
•
Shared, contains deleted documents (общий вид, содержащий документы с «мягкой» отметкой об
удалении). Если у БД установлено свойство Allow soft deletions (см. раздел 2.3.7), то разработчик в
таких видах может запрограммировать действия по восстановлению документов с «мягкой» отметкой
об удалении. Следует обратить внимание на то, что после создания видов с типами Shared, contains
deleted documents и Shared, contains documents not in any folders у разработчика нет простого
способа определить, к какому типу относится конкретный вид. Для этого можно анализировать
значение поля $FIags вида через окно свойств элемента дизайна, или сделать экспериментально,
создав папку, и поместив туда документ из текущего вида. Если документ из вида исчезнет - значит
это вид Shared, contains documents not in any folders. Аналогично для «мягких» отметок об
удалении, поднимаем у БД флаг Allow soft deletions, «мягко» удаляем документ, если он попал в наш
вид - значит это вид Shared, contains deleted documents. Отличить просто общий вид от Shared,
contains ... можно по наличию формулы отбора документов (View Selection подробнее см. раздел
6.6.2). У просто Shared видов она есть, а у Shared, contains ... отсутствует;
•
Shared, private on first use (общий, но становящийся личным при первом использовании). Данный
тип вида можно рассматривать как определенный шаблон. Разработчик создает такой вид, а при
первом обращении пользователя к этому виду, по шаблону этого вида будет автоматически создан
личный вид для указанного пользователя. После этого связь созданного личного вида со своим
источником-шаблоном теряется. Теперь если разработчик изменит дизайн Shared, private on first use
вида, то эти изменения автоматически не перенесутся в личный вид, созданный по этому шаблону.
Для решения этой проблемы можно, например, удалить старый личный вид и опять обратиться к
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
225
Shared, private on first use виду. Где конкретно будет сохраняться личный вид зависит от флага в ACL
Create private folders/views (создание личных папок/видов подробнее см. раздел 18.5.1);
•
Shared, desktop private on first use (общий, но становящийся личным при первом использовании,
вид сохраняется в файле desktop6.ndk). Аналогичен предыдущему типу, но создаваемый личный вид
сохраняется в файле desktop6.ndk, а не в самой БД;
•
Private (личный). Вид сохраняется либо в самой БД, либо в файле desktop6.ndk. Где конкретно
будет сохраняться личный вид зависит от флага в ACL Create private folders/views (создание личных
папок/видов подробнее см. раздел 18.5.1). Личные виды не поддерживаются в Web-приложениях.
Личные виды отображаются в папке видов Domino Designer с указанием перед их именем иконки
ключа.
Опять вернемся к модальному окну создания нового вида (см. Рис. 6.1). Следующее поле-список
Select a location for the new view (выбор местоположения для нового вида) определяет на каком уровне
иерархии будет находиться создаваемый вид, по отношению к уже имеющимся. С точки зрения
синтаксиса, размещение нового вида внутри уровня/подуровня из существующих, ведет к появлению в
имени всех уровней выбранного вида плюс имя нового вида. Уровни отделяются друг от друга символом
обратного слеша ("\").
Кнопка Copy from (копировать из) позволяет создавать новые виды не «с нуля», а на основе уже
существующих в текущей БД видов. По нажатии на кнопку выдается модальное окно, аналогичное окну
выбора вида (View -> Go То см. Рис. 6.2). В поле-списке Copy style from (копировать стиль из)
присутствуют все доступные виды и папки текущей БД, самая первая строка списка есть - Blank (пустой), она предназначена для создания видов «с нуля». После выбора шаблона для создаваемого вида
и нажатия в модальном окне кнопки Ok, выбранное значение источника копирования будет отображаться
под полем-списком Select a location for the new view в виде строки Copy style from: имя вида/папки. По
кнопке Copy from выполняется только однократное наследование стиля видов, то есть, изменения в виде,
служившем основой для создаваемого, не будут автоматически переноситься в последний. Если это
необходимо, то можно установить прямое наследование дизайна вида как целиком через шаблон БД, так
и только для данного вида (см. разделы 2.3.4 и 3.1).
Последняя секция окна создания нового вида определяет условия отбора документов в вид.
Критерий отбора можно определять с помощью:
•
«простых» действий - для этого необходимо выбрать радиокнопку Simple Search (простой поиск)
• языка @-формул - для этого необходимо выбрать радиокнопку By Formula (отбор документов по @формуле);
• языка SQL - для этого необходимо выбрать радиокнопку By SQL Query (отбор документов по SQL).
Эта радиокнопка доступна только в БД, размещенных на сервере с установленным DB2 Access server.
Радиокнопка предназначена для создания DB2 query views (подробнее см. раздел 7.2). В рамках
настоящего раздела далее будут рассматриваться только виды, с критерием отбора, определяемым
на основании @-формул и простых действий.
Собственно значение критерия отбора определяется в поле Selection conditions (условия отбора).
При выборе радиокнопки By Formula справа от поля Selection conditions появляются две кнопки Fields &
Functions (поля и @-функции) и Formula Window (окно формулы). Первая кнопка (Fields & Functions)
предназначена для вывода справочного окна, содержащего поля текущей БД и список всех @-функций, в
окне можно выбрать нужную информацию и перенести ее в поле Selection conditions по кнопке Paste
(вставить). Вторая кнопка (Formula Window) выводит содержимое поля Selection conditions в отдельном
окне. Приведем исключительно ради примера несколько формул отбора.
Пример 1. Формула отбирает все документы текущей БД.
SELECT @Аll
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
226
|
|
Пример 2. Формула отбирает все документы, созданные по форме Company.
SELECT Form = "Company"
Пример 3. Формула отбирает все документы, созданные по форме Company, а также все ответные
документы, созданные как ответ (но не ответ на ответ) на документы по форме Company.
SELECT Form = "Company" | @AllChildren
Пример 4. Формула отбирает все документы, созданные до 26 апреля 2000 года.
SELECT @Created < [26.04.2000]
Следует обратить внимание, что использование в формуле отбора @-функций, связанных с текущим
временем (например, отобрать все документы, созданные в течение последних трех часов), может
существенно снизить производительность приложения из-за периодического обновления индекса вида.
При определении критерия отбора с помощью простых действий (радиокнопка Simple Search)
справа от поля Selection conditions появляется кнопка Add Conditions (добавить условие). Данная
кнопка позволяет на уровне «простых» действий добавить в поле Selection conditions новое условие
отбора документов. Первоначально поле Selection conditions пусто - это соответствует отбору в вид всех
документов. Добавление каждого нового условия по кнопке Add Conditions объединяет на основании
логического И (AND) ранее определенные условия с текущим. Внешний вид поля Selection conditions с
критериями отбора на основе «простых» действий похож на панель программного кода для акций с
«простыми» действиями (см. раздел 4.8.6).
Нажатие кнопки Add Conditions вызывает появление модального окна:
Рис. 6.4 Модальное окно Add Condition
Первое поле Condition (условие) определяет тип добавляемого условия. Вторая секция окна
контекстно зависит от поля Condition. Для того, чтобы лучше понять какие же документы отбираются по
условиям простых действий, можно после определения, собственно, условия переключиться с простых
действий на язык @-формул. При этом, введенная формула отбора преобразуется к формату @-формул.
В рамках создания нового вида, этого можно добиться выбором радиокнопки By Formula (на этот момент
значение простого действия должно быть уже определено). При этом в поле Selection conditions
появится транслированное в @-формулы значение критерия отбора. Например, в формуле отбора было
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
227
выбрано
(date created is on 09.07.2002), после переключения в @-формулы значение
транслируется в «SELECT (@Created = [09.07.2002])». Подобного результата можно добиться и у
редактируемого вида, в панели программного кода, переключая значение поле Run с Simple Search на
Formula (см. подробней раздел 6.6.2). Кроме этого, ряд вариантов, в рамках критерия отбора на языке
простых действий, не сохраняется (даже если это по смыслу допустимо) или возвращает неадекватный
результат (эти случаи будут отмечены дополнительно). Скорее всего, данные ошибки связаны с тем, что
окно Add conditions изначально было предназначено для контекста агентов. Учитывая вышесказанное, и
тот факт, что любой критерий, определенный с помощью простых действий, можно безболезненно задать
на языке @-формул, автор рекомендует использовать только последние.
Вернемся в окно Add Conditions. Допустимыми для поля Condition являются следующие значения:
•
By author (по автору документа). Вторая секция окна при этом выборе содержит поля: Search for
documents whose Author (отбирать документы определенного автора), текстовое поле под значение
для отбора и кнопка
, вызывающая диалоговое окно выбора имен из доступных адресных книг. Поле
Search for documents whose Author может принимать одно из двух значений: is any of (является
одним из) или is not any of (не является ни одним из). Другими словами, при значении is any of в
текущий вид будут отбираться документы, авторы которых присутствуют в текстовом поле,
расположенном под полем Search for documents whose Author, а при значении is not any of
соответственно только те документы, авторы которых не содержатся в том же поле. Аналог на языке
@-формул: SELECT (@Contains(@Name([Abbreviate]; @Author); "имя")) или со знаком отрицания «!»
перед @Contains для is not any of;
•
By date (по дате). Вторая секция окна при настоящем выборе содержит поле Search for
documents whose (отбирать документы, у которых), еще одно поле-список и одно или два текстовых
поля под значения для отбора. Для первого поля-списка допустимы значения либо date created (дата
создания), либо date modified (дата модификации). Для второго поля-списка допустимых значений
существенно больше:
• is one (является). При этом выборе в следующее текстовое поле вносится точная дата
создания или модификации документов, которые должны присутствовать в виде. Аналог на языке
@-формул: SELECT (@Created = [дата]), или @Modified для date modified. Последнее не вполне
корректно, т.к. ©Modified адекватно работает только в формулах колонок видов;
• is after (следует за). Текстовое поле в этом случае определяет граничную дату
создания/модификации, после которой документы будут попадать в текущий вид. Например, если в
текстовом поле указано значение 12.02.2001, то в вид попадут только документы, дата
создания/модификации которых больше чем 12.02.2001. Аналог на языке @-формул: SELECT
(@Created > [дата]);
• is before (находится перед). Аналогично is after с точностью до наоборот. Аналог на языке
@-формул: SELECT (@Created < [дата]);
• is not on (не является). Аналогично is one с точностью до наоборот. Аналог на языке @формул: SELECT ((@Created < [дата] | @Created > [дата]));
• is in the last (в прошлом за определенное число дней). Отбирает документы,
созданные/модифицированные в течение определенного числа дней, считая от текущего. Число
дней задается в текстовом поле. Например, если в текстовом поле указано значение 2 (дня) и
текущий день - 09.03.2002, то в вид попадут документы созданные/модифицированные с
07.03.2002 включительно. Аналог на языке @-формул: SELECT (@Created >= [дата - N дней]).
Обратите внимание, что в формулу текущая дата подставляется в виде константы, поэтому после
своего определения такая формула отбора не будет связана с текущей датой;
• is in the next (в будущем за определенное число дней). Аналогично is in the last с
точностью до наоборот. Для дат создания/модификации документа данное значение не имеет
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
228
смысла. Соответственно при сохранении выдается ошибка. Обратите ВНИМАНИЕ, что ошибка
выдается и при использовании в критерии отбора значений полей документа типа дата/время, хотя
в этом случае смысл присутствует. В контексте критерия отбора документов для агента (подробнее
см. раздел 13.1) значение is in the next поддерживается;
• is older than (старше чем). Отбирает документы, созданные/модифицированные на
указанное число дней раньше, считая от текущего. Число дней задается в текстовом поле.
Например, если в текстовом поле указано значение 2 (дня) и текущий день 09.03.2002, то в вид
попадут документы созданные/модифицированные по 06.03.2002 включительно. Аналог на языке
@-формул; SELECT (@Created < [дата - N дней]). Для данного выбора также справедливо
замечание о прекращении связи формулы отбора с текущей датой после сохранения;
• is after the next (следует вперед за определенное число дней от текущей даты). Отбирает
документы, созданные/модифицированные на указанное число дней позже, считая от текущего.
Обратите ВНИМАНИЕ, что при использование в критерии отбора значений полей документа типа
дата/время выбор is after the next определяется некорректно, хотя в этом случае смысл
присутствует. При этом аналог на языке @-формул выглядит следующим образом: SELECT (поле >
[текущая_дата]). Видно, что в формуле отсутствует второй параметр - N дней. В контексте
критерия отбора агента значение is after the next работает в соответствии с @-формулой:
SELECT (поле > [текущая_дата + N дней]);
• is between (находится между). Отбирает документы, созданные/модифицированные в
заданном интервале дат. Граничные значения включаются в интервал. Аналог на языке ©-формул:
SELECT ((@Created >= [левая_граница] & @Created <= [правая_граница]));
• is not between (не находится между). Отбирает документы, дата создания/модификации
которых не попадает в заданный интервал дат. Аналог на языке @-формул: SELECT ((@Created <
[левая_граница] | @Created > [правая_граница]));
•
By field (по полю). Отбор идет по значению поля. Интерфейс второй секции окна зависит от типа
поля (т.е., текстовое, числовое и т.д.). Для всех типов полей во второй секции присутствует поле
Search for documents whose (отбирать определенные документы), которое содержит список всех
доступных на данный момент полей в БД. При выборе имени поля, чей тип есть текст, второе полесписок из окна Add Condition предлагает на выбор два значения contains (содержит) или does not
contain (не содержит), аналогично By author. Другими словами, в вид будут отбираться документы,
значения определенного поля которых содержит/не содержит заданную подстроку. Для полей типа
дата/время интерфейс определения критерия отбора, и сам отбор документов аналогичен
рассмотренному в By date. В качестве отличий можно отметить, что теперь в операциях сравнения
участвует не дата создания/модификации документа, а конкретное поле дата/время, и, кроме этого,
использование значений: is in the last, is in the next, is older than, is after the next приводит к ошибке
в критерии отбора. Для числовых полей допустимы следующие значения во втором поле-списке:
• is equal to (равно). Отбирает документы, у которых значение числового поля документа
равно заданному значению из текстового поля окна Add Condition. Аналог на языке @-формул:
SELECT (поле = значение);
• is greater than (больше чем). Отбирает документы, у которых значение числового поля
документа строго больше, чем заданное значение. Аналог на языке @-формул: SELECT (поле >
значение);
• is less than (меньше чем). Отбирает документы, у которых значение числового поля
документа строго меньше, чем заданное значение. Аналог на языке @-формул: SELECT (поле <
значение);
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
229
• is not equal to (не равно). Отбирает документы, у которых значение числового поля
документа не равно заданному значению. Аналог на языке @-формул: SELECT ((поле < значение |
поле > значение));
• is between (находится в интервале). Отбирает документы, у которых значение числового
поля документа лежит в заданном интервале. Граничные значения включаются в интервал. Аналог
на языке @-формул: SELECT ((поле >= левая_граница & поле <= правая_граница));
• is not between (не находится в интервале). Отбирает документы, у которых значение
числового поля документа не попадает в заданный интервал. Граничные значения не включаются в
отобранные значения. Аналог на языке @-формул: SELECT ((поле < левая_граница | поле >
правая_граница));
•
By form (по формам). Позволяет отобрать документы, созданные по указанным формам. При
выборе By form в окне Add Condition появляется поле Search for documents which use form (отбор
документов, использующих формы), в котором можно выбрать одну или более из доступных для
данной БД форм. Аналог на языке @-формул: SELECT ((Form = имя_формы1) | . . . | (Form =
имя_формыN));
•
Fill out example form (по заполненным вариантам форм). При этом выборе в окне Add Condition
появляется поле Form (формы), в котором можно выбрать одну из доступных для данной БД форм. В
поле, расположенном ниже Form, отображается бланк выбранной формы, соответствующий режиму
редактирования. В редактируемых полях бланка формы можно определить значения поиска (включая
множественные значения в соответствии с синтаксисом разделителей данного поля). При
отображении бланка формы используется «облегченный» режим вывода (например, для полей
дата/время, с установленным свойством Calendar/Time control, внешний вид поля отображается без
кнопки «календарика»). Аналог на языке @-формул: SELECT (@Contains(поле1; список_значений1)) &
. . . & (@Contains(полеN; список_значенийN)). В случае заполнения нетекстовых полей в формах могут
быть ошибки логики, т.к. для них нужно использовать функцию отличную от @Contains;
•
In Folder (в папке). При этом выборе в окне Add Condition появляется поле Search for documents
in folder (искать документы в папке), в котором отображены все доступные для данной БД виды и
папки. Данный вариант не применим к отбору документов в виде (используется для критерия отбора
агентов). Аналог на языке @-формул: SELECT @All;
•
Multiple words (множественные слова). При этом выборе в окне Add Condition появляется поле
Search for documents containing (отбор документов, содержащих) и восемь текстовых полей. Поле
Search for documents containing может принимать одно из двух значений: any of the terms below
(любой из терминов ниже) или all of the terms below (все из терминов ниже), и образует логическую
связку между искомыми словами соответственно как логическое ИЛИ и логическое И. Данный вариант
не применим к отбору документов в виде (используется для критерия отбора агентов). Аналог на языке
@-формул: SELECT @Аll.
Опять вернемся к окну создания нового вида (см. Рис. 6.1). В самом низу окна расположены три
кнопки: Ok, Save and Customize (сохранение и настройка) и Cancel (отменить). Нажатие Ok вызывает
создание вида (при отсутствии ошибок в критерии отбора), диалог на этом прекращается, а в папке видов
Domino Designer появляется только что созданный вид. Для Save and Customize сразу после сохранения
осуществляется загрузка создаваемого вида в рабочую панель Domino Designer.
После загрузки вида из папки видов в рабочую панель Domino Designer, сразу загружается окно
свойств первого столбца вида. Вид всегда создается с одним столбцом, но его можно удалить, в отличие
от удаления последнего вида в БД. Рассмотрим доступные разработчику операции, которые воздействуют
на вид целиком.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
230
6.2 Операции с видом
К таким операциям можно отнести операции, связанные с добавлением и удалением столбцов и
акций вида.
6.2.1
Операции со столбцами
Для добавления в вид нового столбца нужно сначала выделить определенный столбец вида (это
можно сделать, осуществив клик мыши по заголовку столбца) и затем воспользоваться пунктами меню
Create -> Insert New Column или Create -> Append New Column. Первая команда вставляет новый
столбец перед текущим, а вторая добавляет новый столбец в самый конец вида.
В Domino Designer R 7 появился новый тип столбцов - совместно используемый (shared column).
Для них также доступны операции вставки перед текущим столбцом (Create -> Insert New Shared Column)
и добавление в конец вида (Create -> Append New Shared Column). Кроме этого можно преобразовать
обычный столбец к совместно используемому через меню Create -> Copy As Shared Column. Более
подробно совместно используемые столбцы будут рассмотрены в разделе 6.5.
Для удаления столбца(ов) нужно сначала их выделить, а затем нажать клавишу Delete. При этом
появляется модальное окно Notes с просьбой подтвердить выполнение данной операции:
Рис. 6.5 Модальное окно с просьбой подтвердить операцию удаления выбранных столбцов вида
6.2.2
Операции с акциями вида
С точки зрения интерфейса, объекты - простая акция (Action см. раздел 4.8), общая акция (Shared
Action см. раздел 4.8.7), панель акции (Action Bar см. раздел 4.9) и системные акции вида (см. раздел
4.8.5) практически идентичны одноименным объектам формы. Существует лишь ряд отличий:
• в Domino Designer R 7 у акции вида на закладке Action Info (см. раздел 4.8.1) в секции Display
появился новый флаг Include in right mouse button menu (включать в контекстное меню, вызываемое
правой кнопкой мыши). Смысл флага понятен из названия - теперь разработчик может дополнять
контекстное меню вида своими действиями;
• у акции вида на закладке Action Hide When (см. раздел 4.8.2) отсутствует секция Hide paragraph
from.
• контекст программного кода акции вида отличается от акций формы. Есть @-функции допустимые
для контекста акций формы, но недопустимые в акциях видов (например, @IsDocBeingEdited).
Создание новых акций вида выполняется с помощью меню: Create -> Action (для обычных акций) и
Create -> Insert Shared Action (для совместно используемых акций).
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
231
Рис. 6.6 Отображение акций в контекстном меню
6.3 Свойства вида
Перейдем к рассмотрению свойств, имеющих отношение к виду в целом. Для получения доступа к
окну свойств вида (если он загружен в рабочую панель Domino Designer) можно воспользоваться пунктом
меню Design -> View Properties. При этом появляется окно свойств вида с шестью закладками.
6.3.1
Закладка
View Info - общая информация о виде
View Info (информация о виде) выглядит следующим образом:
Рис. 6.7 Закладка View Info окна свойств вида
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
232
В первой секции окна определяются: имя вида (Name), его алиас (Alias) и комментарии (Comment),
расшифровывающие предназначение данного вида. Имя вида может быть многоуровневое (компоненты
разделяются символом обратный слеш). Алиасов может быть несколько, они разделяются символом
вертикальной черты. В эти два поля передаются значения из поля View name окна создания нового вида
(см. Рис. 6.1). Общие правила задания имени и алиаса вида уже были рассмотрены в разделе 6.1. Поле
Comment не влияет на поведение приложения и, в основном, предназначено для отображения в папке
видов Domino Designer.
Вторая секция определяет стиль (Style) вида. Допустимыми значениями для единственного поля
типа список являются: Standard Outline (стандартный) и Calendar (календарный). Стиль Standard Outline
представляет в интерфейсе клиента Notes обычное отображение документов БД в табличной форме.
Рис. 6.8 Стандартный стиль вида в интерфейсе клиента Notes
Календарный стиль вида предназначен для ведения различных расписаний, планирования встреч и
т.д. При выборе значения Calendar для поля Style Domino/Notes будет группировать и отображать
документы в календарном формате. Такие виды широко используется в почтовой БД клиента Notes.
Подробнее они будут рассмотрены в разделе 6.11.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
233
Рис. 6.9 Календарный стиль вида в интерфейсе клиента Notes
6.3.2
Закладка
Options tab - параметры вида
Options tab (параметры) выглядит следующим образом:
Рис. 6.10 Закладка Options tab окна свойств вида
В верхней части окна расположен ряд флагов:
• Default when database is first opened (вид, используемый по умолчанию при первом открытии
БД). Когда определенный пользователь в первый раз открывает БД, данный вид будет открыт первым
(при соответствующих настройках Launch tab окна свойств БД, см. раздел 2.3.5). В БД может быть
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
234
только один вид с установленным свойством Default when database is first opened. Такой вид
отображается в папке видов Domino Designer помеченным слева иконкой звездочка;
•
Default design for new folders and views (вид, используемый по умолчанию в качестве шаблона
при создании новых папок и видов). Если у вида поднят настоящий флаг, то при создании новых
видов/папок, у последних по умолчанию будет проставляться данный вид, как источник для
копирования дизайна (Copy style from см. раздел 6.1). В БД может быть только один вид с
установленным свойством Default design for new folders and views;
•
Collapse all when database is first opened («свертывать» все категории вида при первом открытии
БД). Если в виде есть категоризированные «раскрывающиеся» колонки (подробнее см. раздел 6.4.2),
то при первоначальном открытии текущей БД все категории будут «свернуты»;
•
Show response documents in a hierarchy (отображать ответные документы в иерархической
последовательности). При поднятии данного флага и при наличии в БД документов типа «ответ» и/или
«ответ на ответ», последние отображаются рядом с «родительским» для них документом. Внешне
ответные документы располагаются в виде под «родительским» документом с отступом вправо. Если
флаг опустить, то «ответные» документы при отображении теряют связь со своими «родителями» и
выводятся в соответствии с критерием отбора вида и условиями сортировки/группировки данных,
установленными в столбцах вида;
•
Show in View menu (отображать вид в меню View). При поднятии данного флага имя вида
отображается в меню View клиента Notes. Данный пункт меню может использоваться для быстрого
переключения между различными видами;
•
Allow customizations (разрешить настройку). В Notes/Domino, начиная с версии 6, по умолчанию
пользователи могут менять некоторые параметры отображения вида, не прибегая к Domino Designer.
Например, прямо в режиме отображения вида с помощью мыши можно изменить порядок следования
столбцов. Более детальные настройки возможны в клиенте Notes через меню View -> Customize This
View. При этом появляется модальное окно:
Рис. 6.11 Модальное окно Customize View
В окне Customize View можно:
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
235
• отобразить все столбцы текущего вида в таблице Columns to Display (столбцы для
отображения) через флаг Show all (отобразить все). Первоначально в диалоге отображаются
только столбцы, у которых установлено значение заголовка (поле Title с закладки Column Info окна
свойств столбца, см. раздел 6.4.1). Поднятие флага Show all приводит к отображению в таблице
Columns to Display и столбцов с пустыми заголовками;
• изменить порядок следования столбцов в виде для клиента Notes. Для этого нужно
выбрать соответствующий столбец в таблице Columns to Display и воспользоваться кнопками
Move Up (переместить вверх) и Move Down (переметить вниз);
• скрыть выбранный в таблице Columns to Display столбец через флаг Vizible (видимость),
расположенный в первой колонке указанной таблицы;
• изменить размер выбранного столбца через поле Width (ширина), расположенное под
таблицей Columns to Display;
• изменить сортировку выбранного столбца через поле Sort (сортировка), расположенное
под таблицей Columns to Display. Данное поле доступно только для столбцов, у которых включен
механизм пересортировок содержимого путем клика по заголовку столбца (флаг Click on column
header to sort с закладки Sorting tab окна свойств столбца, см. раздел 6.4.2);
• изменить параметры вида: Row Spacing (интервал между строк), Lines per row (линий для
строки) - или другими словами высота строк вида в строках текста и Shrink rows to content
(«подогнать» высоту строк под их содержимое). Все указанные параметры первоначально
устанавливаются в свойствах вида на закладке Style tab (стиль) в секции Rows (строки, см. раздел
6.3.3);
• установить параметры отображения вида в соответствии с установленными в Domino
Designer через кнопку Defaults (по умолчанию).
После изменения параметров отображения вида как напрямую через клиента Notes, так и через окно
Customize View, выполненные изменения будут действовать для данного вида в рамках текущей рабочей
станции и после закрытия вида.
Вернемся опять на закладку Options tab окна свойств вида. Если флаг Allow customizations
опущен, то пользователям запрещается изменять параметры отображения вида, как напрямую через
клиента Notes, так и через окно Customize View. Последнее окно при этом вызывается, но все его
элементы интерфейса, за исключением поля Sort, недоступны.
На закладке остались нерассмотренными два флага и два поля типа список. Рассмотрим их:
•
флаг Evaluate actions for every document change (вычислять формулы акций при каждом
изменении документа). Флаг имеет отношение к акциям вида и предусматривает два аспекта
применения. Во-первых, при поднятии флага смена текущего документа вида вызывает
перевычисление формул скрытия акций вида. Если на какой-то строке вида формула скрытия вернет
значение истина, то на этой строке акция вида будет скрыта. Здесь следует отметить одну неприятную
особенность. Если в панели акций в момент скрытия будет присутствовать только одна акция, то
скроется вся панель акций. Переход на следующую строку вида, на которой формула скрытия вернет
ложь - не приведет к отображению панели акций. Для восстановления панели акций в этом случае
необходимо либо переключиться в другой вид и затем вернуться обратно, либо перестроить индекс
вида (Shift-F9), просто обновление вида по F9 в этом случае не помогает. Во-вторых, для акций вида
типа флаг (см. раздел 4.8.1) формула, определяющая состояние акции-флага (поднят/опущен), будет
вычисляться при каждой смене текущего документа в виде. Например, в акции вида типа флаг для
поля Value определена формула MySign="1", и флаг Evaluate actions for every document change
поднят, тогда при выборе в виде документа, у которого значение поля MySign будет равно единице акция вида типа флаг отобразится с поднятым флагом;
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
236
•
флаг Create new documents at view level (создавать новые документы на уровне вида). Поднятый
флаг разрешает пользователям создавать новые документы на уровне вида. Более подробно этот
механизм будет рассмотрен в разделе 6.9;
•
поле-список On Open (действия при открытии вида), которое определяет, на какую строчку вида
при его открытии будет установлен световой маркер вида. Допустимыми для поля являются
следующие значения:
• Go to last opened document (перейти на документ, который был открыт в прошлый раз);
• Go to top row (перейти на самую верхнюю строку вида);
• Go to bottom row (перейти на самую нижнюю строку вида);
•
поле-список On Refresh (действия при обновлении вида) определяет, как будет обновляться
содержимое вида у текущего пользователя при изменении индекса вида. Индекс вида есть внутреннее
представление списка документов, входящих в вид. При добавлении в вид новых документов или
изменении существующих, индекс вида должен обновиться для правильного отображения
информации вида. Пользователь может принудительно обновить индекс вида по клавише F9. Для
серверных БД за обновление индекса вида отвечают серверные задачи Update и Updall. Для поля On
Refresh допустимыми являются следующие значения:
• Display indicator (вывести специальный индикатор). Данное значение при изменении
индекса вида выводит в левом верхнем углу вида кнопку
, клик по которой и осуществляет
обновление содержимого вида;
• Refresh display (обновить содержимое экрана). Такая установка вызывает автоматическое
обновление содержимого вида при изменении индекса вида;
• Refresh display from top row (обновить содержимое экрана, начиная с верхней строки).
Аналогично Refresh display, но обновление вида идет с верхней строки вниз. Применяется для
видов, в которых изменения обычно происходят в верхних строках вида (например, вид
отсортирован в обратном хронологическом порядке);
• Refresh display from bottom row (обновить содержимое экрана, начиная с нижней строки).
Аналогично Refresh display, но обновление вида идет с нижней строки вверх. Применяется для
видов, в которых изменения обычно происходят в нижних строках вида (например, вид
отсортирован в прямом хронологическом порядке).
6.3.3
Закладка
Style tab - стиль вида
Style tab (стиль вида) содержит следующие элементы интерфейса:
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
237
Рис. 6.12 Закладка Style tab окна свойств вида
Секция Body (тело) определяет цвета для фона вида и содержит следующие элементы интерфейса:
•
поле Rows (строки), которое определяет цвет фона строк как сплошной цвет;
•
поле Alternate rows (альтернативные строки) - определяет цвет фона четных строк как сплошной
цвет;
•
поле Image (графическое изображение) - позволяет задать цвет фона всего вида на основании
графических ресурсов. Значение данного поля можно определить с помощью кнопок:
Browse
images (выбрать графическое изображение), которая выдает диалог выбора доступных графических
ресурсов и @ Formula (формула), позволяющая задать фон вида на основании языка @-формул;
•
поле Repeat (повтор) определяет механизм повторов графического изображения из предыдущего
поля в рамках вида. Допустимые значения поля соответствуют аналогичным значениям одноименного
поля свойств формы с закладки Form Background (см. раздел 4.1.4).
Секция Grid (сетка) позволяет определить параметры отображения сетки вида, которая будет
разделять строки и столбцы вида. Поле Style (стиль) определяет внешний вид сетки и предлагает на
выбор следующие значения:
•
None (отсутствует) - сетка отсутствует;
•
Solid (сплошная) - сетка состоит из сплошных линий;
•
Dashed (пунктир) - сетка состоит из пунктирных линий;
•
Dots (многоточие) - сетка состоит из пунктирных линий меньшей, чем в предыдущем пункте длины;
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
238
•
Dashed and Dots (точка тире) - линии сетки состоят из точек и тире.
Поле Color (цвет) из секции Grid определяет цвет линий сетки.
Секция Header (заголовки) определяет параметры отображения заголовков вида. В секции
присутствуют следующие элементы интерфейса:
•
поле Style (стиль) определяет внешний вид заголовков вида и может принимать одно из
следующих значений:
• None (отсутствует) - заголовки отсутствуют;
• Flat (плоские заголовки) - в этом случае в строке заголовков последние отображаются без
линий, разделяющих столбцы вида;
• Simple (простые заголовки) - аналогично предыдущему пункту,
разделители столбцов;
но отображаются
• Beveled («скошенные» заголовки) - в этом случае внешний вид заголовков столбцов
соответствует отображению на сером фоне с явной прорисовкой границ столбцов;
•
поле Color (цвет) позволяет задать цвет фона строки заголовков для значений Flat и Simple из
предыдущего поля;
•
поле Height XXX (lines) (высота в строках) позволяет определить высоту строки заголовков в
числе строк. Поле может применяться в случае, когда текст заголовка столбца не помещается в
отведенные границы. В этом случае будет организован перенос текста заголовка на следующую
строку. Перенос осуществляется только по словам.
Секция Rows (строки) позволяет определить параметры отображения строк и содержит следующие
элементы интерфейса:
•
поле Height XXX (lines) (высота в строках) аналогично одноименному полю из предыдущей секции
и задает высоту строк вида в единицах измерения равных числу строк. Используется для переноса
слов, если содержимое ячеек вида не помещается в отведенные границы;
•
поле Spacing (межстрочный интервал). Влияет только на интервал между строками с данными
вида, но не внутри одной строки данных (в случае, когда значение Height XXX (lines) отлично от 1).
Допустимые значения для поля: 1 (одинарный интервал),
, и 2 (двойной интервал);
•
флаг Shrink rows to content («подгонять» размер строк данных под реальное содержимое).
Поднятие флага не отображает строки вида с переносами, если их значение пусто. Флаг доступен
только, если в поле Height XXX (lines) данной секции выбрано значение отличное от единицы;
•
флаг Don't show empty categories (не отображать пустые категории) влияет на отображение
категории, не содержащих документов. Такие категории появляются в виде, когда документы содержат
поля типа Readers (см. раздел 4.3.1), и конкретный пользователь, в соответствии с этими полями, не
имеет доступа ко всем документам какой-либо категории. При опущенном флаге Don't show empty
categories категории, состоящие только из недоступных для конкретного пользователя документов, в
виде присутствуют (при «раскрытии» таких категории видно, что документов там нет). Поднятие флага
скрывает пустые категории;
•
флаг Colorize view icons (сбалансировать цвета иконок). Поднятый флаг может влиять на
предопределенные Notes-иконки, отображаемые в столбцах вида (флаг Display values as icons
свойств столбца, см. раздел 6.4.1). В этом случае, если в таких иконках есть цвет, соответствующий
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
239
системному серому, то он будет заменяться при отображении на цвет строки заголовка вида. Флаг
имеет смысл, только если в секции Header для поля Style выбраны значения Flat или Simple;
•
поле Unread (непрочтенные) определяет цвет текста для непрочтенных документов. Для
отображения непрочтенных документов в виде должны быть сделаны соответствующие настройки в
свойствах БД (секция Unread Mark Options с закладки Advanced tab, см. раздел 2.3.7) и в свойствах
самого вида (поле Unread marks с закладки Advanced tab, см. раздел 6.3.5);
•
флаг Bold (полужирный) задает полужирное начертание шрифта для непрочтенных в виде
документов;
•
флаг Transparent (прозрачный). В документации сказано, что данный флаг нужен для
совместимости с Domino версий R 5.x. В частности, если у вида поднят флаг Bold и Transparent, то в
клиентах Notes, начиная с версии 6, отметки о непрочтении отображаются полужирным шрифтом
черного цвета, независимо от значения поля Unread. В клиентах Notes версий R 5.x при тех же
параметрах отметки о непрочтении выдаются обычным шрифтом и цветом, определенным в поле
Unread. Такое поведение в R 5.x не зависит от флага Transparent;
•
поле Column total text (текст столбцов, вычисляющих суммарное значение) задает цвет текста
для суммарных значений указанных столбцов вида. Данное поле воздействует на столбцы, у которых в
поле Totals на закладке Sorting tab (см. раздел 6.4.2) установлено значение отличное от None.
Секция Other (дополнительно) содержит три флага:
•
Show selection margin (выводить колонку для выбора документов). Поднятие флага приводит в
интерфейсе клиента Notes к выводу в виде специальной самой первой колонки вида. В ней могут
находиться отметки о выборе документа пользователем, удалении или о непрочтении документа, а
также о конфликте репликаций или сохранения документа.
Рис. 6.13 Столбец для специальных пометок (selection margin) вида в интерфейсе клиента Notes
•
Hide selection margin border (скрывать границу столбца специальных пометок). Смысл флага
ясен из названия;
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
240
•
Extend last column to window width (расширить последний столбец вида до размеров окна). Если
при отображении вида за последним столбцом остается свободное место до правого края окна, то
поднятие флага в этом случае расширяет размер последнего столбца до границы окна.
Секция Margin (границы) по своим элементам интерфейса практически идентична третьей секции
закладки Paragraph Border окна свойств статичного текста (см. раздел 4.4.2). Параметры секции Margin
применяются ко всему виду целиком. Значения полей Left, Top, Right Bottom определяют соответственно
толщину левой, верхней, правой и нижней границ от, собственно, вида до рамок окна. Значение поля
Below header (ниже заголовка) определяет толщину границы от заголовка вида до его содержимого. Поле
Color (цвет) определяет цвет всех определенных в этой секции границ.
6.3.4
Закладка
Launch tab - действия при «запуске» вида
Launch (действия вида при запуске) выглядит следующим образом:
Рис. 6.14 Закладка Launch tab окна свойств вида
Закладка содержит единственную секцию Auto Frame (Web Only) (автоматическая загрузка во
фреймсете - только для Web). Как видно из названия секции, ее свойства применимы только для Webприложений. В секции присутствуют два поля типа список: Frameset (фреймсет) и Frame (фрейм). Поле
Frameset содержит список всех доступных в текущей БД фреймсетов. При выборе в Frameset любого
значения, отличного от пустого, становится доступным поле Frame, которое будет содержать список
фреймов определенного фреймсета. Когда оба параметра определены (Frameset и Frame), то при
открытии вида в Web откроется указанный фреймсет, и вид будет выведен во фрейме, определенном в
поле Frame.
6.3.5
Закладка
интерфейса:
Advanced tab - дополнительные свойства вида
Advanced tab (дополнительные свойства вида) представляет следующие элементы
Рис. 6.15 Закладка Advanced tab окна свойств вида
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
241
Первая секция Index (индекс вида) содержит следующие элементы интерфейса:
•
поле Refresh index (обновление индекса), которое определяет, как и когда будет обновляться
индекс вида (об индексе вида уже упоминалось в контексте поля On Refresh закладки Options tab
окна свойств вида см. раздел 6.3.2). Для Refresh index допустимы следующие значения:
• Auto, after first use (автоматически после первого использования). Индекс вида
обновляется автоматически, процесс обновления стартует после того, как первый пользователь
обратится к данному виду. Поэтому первое открытие вида может занять определенное время;
• Automatic (автоматическое обновление). Аналогично предыдущему значению (Auto, after
first use), но индекс вида поддерживается в актуальном состоянии независимо от обращения к
виду пользователей;
• Manual («ручное» обновление). Обновление индекса вида оставлено на усмотрение
пользователей. Для локальных БД обновление индекса вида действительно происходит только по
указанию пользователя (например, по клавише F9). Для серверных БД за обновление индекса
даже при установке Manual отвечают серверные задачи Update и Updall;
• Auto, at most every XXX hours (автоматически через каждые XXX часов). В промежутках
между автоматическими обновлениями индекса вида, пользователи могут выполнить обновление
«вручную»;
•
поле Discard index (уничтожение индекса) влияет на процедуру удаления индекса вида.
Собственно, за удаление индексов видов серверных БД отвечает серверная задача Updall. Однако,
разработчик БД так же может оказывать определенное влияние на процедуру удаления
неиспользуемых (или редко используемых) индексов видов. Удаление редко используемых индексов
видов может существенно уменьшить размер файлов, хранящих БД. Определенные значения поля
Discard index используются для организации очереди на удаление индексов видов серверной задачей
Updall (поэтому удаление индекса может произойти не сразу, а в момент работы Updall). Допустимыми
для Discard index являются следующие значения:
• If inactive for 45 days (удалять индекс при не использовании в течение 45 дней);
• After each use (после каждого использования). Данный выбор вызывает удаление индекса
вида по факту выхода пользователя из текущей БД;
• If inactive for XXX days (удалять индекс при неиспользовании в течение XXX дней). Данная
опция применима только к серверным БД;
•
флаг Restrict initial index build to designer or manager (разрешить создание начального индекса
Дизайнеру или Менеджеру БД). Поднятие данного флага приводит к тому, что если у текущего вида
отсутствует индекс, то для его создания необходим ACL доступ к БД Дизайнера или Менеджера. При
попытке обращения к виду, у которого отсутствует индекс и поднят флаг Restrict initial index ...,
пользователей с уровнем доступа Редактор и ниже выдается предупреждающее сообщение: «You are
not authorized to perform that operation» (Вы не уполномочены выполнять указанную операцию).
Следующая секция Unread marks (отметки о непрочтении) содержит единственное поле, которое
влияет на то, как будут отображаться непрочтенные документы для конкретных пользователей. Следует
не забывать о том, что если у БД установлено свойство Don't maintain unread marks (см. раздел 2.3.7), то
независимо от значения Unread marks отметки о непрочтении у БД отображаться не будут. Рассмотрим
допустимые значения поля Unread marks:
•
None (никаких). Отметки о непрочтении в текущем виде не поддерживаются;
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
242
•
Unread Documents Only (отметки о непрочтении только для документов). Отметки о непрочтении
отображаются только у документов, но не у категорий. То есть если непрочтенный документ находится
в «свернутой» категории, то напротив ее значок о непрочтении отсутствует. Если это необходимо по
смыслу для приложения, то можно воспользоваться следующей опцией;
•
Standard (compute in hierarchy) (стандартные отметки, вычисляются в соответствии с иерархией).
Отметки о непрочтении отображаются не только для непрочтенных документов, но и для «свернутых»
категорий, содержащих непрочтенные документы.
Следующая секция ODBC Access (доступ через ODBC) содержит единственный флаг Generate
unique keys in index (генерировать уникальные ключи в индексе вида). Флаг влияет на доступ к
информации индекса вида из сторонних приложений с использованием интерфейса ODBC (Open Database
Connectivity). Для такого использования первая колонка вида должна иметь сортировку. Действие флага
распространяется и на интерфейс клиента Notes и браузера. Поведение флага, по мнению автора, не
всегда адекватно. На мой взгляд, лучше использовать первую категоризованную колонку без флага
Generate unique keys in index, если необходимо получить доступ к уникальным значениям в ODBC.
Предпоследняя секция закладки называется Web Access (для доступа через Web) и содержит
следующие элементы интерфейса:
•
флаг Treat view contents as HTML (обрабатывать содержимое вида как HTML). При поднятии
данного флага Domino передает всё содержимое вида в браузер как HTML-код, т.е., Domino не
вставляет свой HTML-код. В данном случае, если необходимо отображать содержимое вида в
табличной форме, то разработчик должен сам позаботиться о соответствующих тегах <TABLE>, <TR>,
<TD> и т.д. В полном объеме это можно реализовать только для встроенных видов (Embedded View
см. раздел 4.21). Так же следует отметить, что при наличии в виде "раскрываемых" категорий, в Web
будут переданы значения только самых верхних категорий (т.е., аналогично действию параметра
&CollapseView);
•
флаг Use applet in the browser (использовать апплет при отображении вида в Web). Поднятие
данного флага заставляет текущий вид отображаться в Web с использованием стандартного Notesапплета вида. Апплет предлагает больше функциональности, чем стандартный HTML. Апплет
позволяет работать со столбцом для специальных пометок вида (допускается просто пометка и
пометка на удаление), изменять размеры столбцов, «раскрывать» и «свертывать» категории и
осуществлять «прокрутку» содержимого вида без перезагрузки всей HTML страницы, а также
увеличивается
набор
@функций,
используемых для программирования функциональных
возможностей вида в Web;
•
флаг Allow selection of documents (разрешить выделение документов). Данное свойство
работает только при поднятом у БД флаге Use JavaScript when generation pages (см. раздел 2.3.1).
Поднятие флага Allow selection of documents вызывает в Web-приложениях появление в виде
дополнительного самого левого видимого столбца напротив документов (но не категорий). В этом
столбце выводятся поля типа флаг (<INPUT TYPE=checkbox ...>). К сожалению, флаг не очень хорошо
документирован, в основной документации на Domino/Notes упоминается о том, что флаг может быть
использован в групповых операциях (например, перемещения группы документов в папку). Поэтому
весь последующий текст данного подпункта основан исключительно на личном опыте автора. При
поднятом
флаге
в
акциях
видов
допустимо
использовать
следующие
команды:
@Command([MoveToTrash]) - устанавливает напротив помеченных документов иконку удаления
документа; @Command([EmptyTrash]) - реально удаляет помеченные на удаление документы в
соответствии с ACL; @Command([EditSelectAII]) - устанавливает флаги для всех видимых на данный
момент документов; @Command([EditDeselectAII]) - снимает пометку о выделении для всех видимых
документов. С точки зрения генерируемого HTML-кода, поднятие флага Allow selection of documents
ведет к появлению в коде страницы трех JavaScript функций: _SelectMarkForDelete, _SelectDelete и
_SelectAIIDocs. Для всех полей-флагов в их HTML тег передается общий атрибут NAME="$$SelectDoc",
а в атрибут VALUE передается в виде текстовой строки универсальный идентификатор (UNID)
текущего документа. Для невстроенных видов (т.е., не embedded view) основной тег вида <TABLE>
обрамляется тегом <FORM ... > с атрибутом NAME="_SelectFormName". Для встроенных видов
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
243
дополнительный тег <FORM ... > не появляется, а генерируемые JavaScript функции ссылаются на
поля-флаги по имеющемуся имени тега <FORM ... > (по умолчанию символ подчеркивания плюс имя
формы/страницы). Хотя изначально механизм отметки документов по флагу Allow selection of
documents, скорее всего, был предназначен для пометки и последующего удаления документов (это
видно по названиям JavaScript функций), никто не мешает использовать его в своих целях.
Пример. В одном из столбцов вида отображается значение числового поля My_num. У вида
установлено свойство Allow selection of documents. Требуется написать JavaScript функцию,
вычисляющую суммарное значение поля My_num по выделенным документам. Для того чтобы передать
собственный JavaScript код в HTML-страницу, встроим вид в страницу. Установим у объекта встроенный
вид (embedded view) страницы My_Page значение свойства Web Access Display равным Using View's
display property. Изменим формулу колонки вида, в которой отображалось значение поля My_num на:
@Text(My_num) + "[<INPUT TYPE=hidden name=\"" + @Text(@DocumentUniquelD)
+ @Text(My_num) + " \ " > ] "
+ "\" value=\""
Необходимость данной формулы вызывается отсутствием в стандартном JavaScript 1.3 коллекции
all, с помощью которой можно «добраться» до любого тега страницы (в частности <TR > и <TD>). В
объекте JS Header разместим код JavaScript функции My_sum, которая собственно и вычисляет
суммарное значение поля My_num по выделенным строкам:
function
My_sum()
{
var form = document.forms[0];
var my_flg = false;
var my_UNID = "";
var my_cont = 0;
for (var i = 0; i < form.elements.length; i++)
{
if
(form.elements[i].type ==
"checkbox")
{
if
(form.elements[i].name
==
"$$SelectDoc")
{
if
(form.elements[i].checked)
{
my_flg = true;
my_UNID
=
form.elements[i].value;
}
else
{
my_flg = false;
my_UNID = "";
}
}
}
if
(my_flg == true && form.elements[i].type == "hidden")
{
if
(form.elements[i].name == my_UNID)
{
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
244
my_cont = my_cont + parseInt(form.elements[i].value);
my_flg = false;
my_UNID = "";
}
}
}
alert("Суммарное значение по выделенным строкам = " + String(my_cont) ) ;
}
Далее создадим акцию страницы My_sum, и в программной панели на событие onClick разместим
код My_sum(); . Теперь, после выделения на HTML-странице требуемых документов, клик по кнопке акции
My_sum будет выводить окно с вычисленным суммарным значением по полю My_num.
В заключение про флаги Treat view contents as HTML, Use applet in the browser и Allow selection
of documents хотелось бы отметить, что работают они как радиокнопки, т.е., поднятие любого из них
ведет к недоступности для выбора остальных.
Помимо рассмотренных трех флагов в секции Web Access присутствуют еще три поля типа
выпадающий список. Они определяют цвета: активной ссылки (Active link), непосещенных ссылок
(Unvisited link) и посещенных ссылок (Visited link). С точки зрения генерируемого HTML-кода, эти поля
определяют значение соответственно атрибутов ALINK, LINK и VLINK тега BODY. Обратите внимание, что
в Web-приложения данные атрибуты передаются только в случае, если хотя бы один из параметров имеет
значение отличное от значения, установленного по умолчанию. Для встроенных видов данные параметры
игнорируются, а атрибуты ALINK, LINK и VLINK определяются значениями аналогичных параметров
формы или страницы (т.е., того объекта, куда встроен вид).
Последняя секция закладки называется Logging (регистрация в журнале). Секция содержит
единственный флаг Include updates in transaction log (вносить изменения вида в журнал транзакций).
Поднятый флаг позволяет восстанавливать индекс вида при сбоях из журнала транзакций. Для корректной
работы флага необходимо чтобы в свойствах текущей БД был опущен флаг Disable transaction logging с
закладки Advanced tab (см. раздел 2.3.7).
6.3.6
Закладка
Security tab - закладка «безопасность»
Security (безопасность) выглядит следующим образом:
Рис. 6.16 Закладка Security tab окна свойств вида
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
245
По поводу данной закладки следует сразу сделать замечание, что параметры, присутствующие на
ней, ограничивают доступ только к виду целиком, но не к документам из вида. Пользователь с правами
Читателя (если это разрешено ACL) может создать личный (Private) вид, с критерием отбора SELECT
@Аll, и соответственно получить доступ ко всем документам, которые не скрыты от него полями типа
Readers. Поэтому закладку Security нельзя рассматривать как дополнительный уровень безопасности
приложения.
Вернемся к, собственно, закладке. В первой секции Who may use this view (кто может использовать
данный вид) по умолчанию установлен флаг All readers and above (все пользователи с уровнем доступа в
ACL читатель и выше). При снятии флага становятся доступными поле со списком всех пользователей и
ролей из ACL БД и кнопка
. В поле со списком можно проставить «галочку» напротив требуемого
пользователя или роли, а по кнопке
можно добавить новых пользователей из адресной книги.
Во второй секции Public Access (общедоступный доступ) присутствует флаг Available to Public
Access users (разрешить доступ пользователям с уровнем доступа Общедоступный). Поднятый флаг
позволяет пользователям, даже с уровнем «Нет доступа», но с поднятым флагом Read public documents
(возможность читать общедоступные документы) обращаться к данному виду. Флаг Allow Public Access
users обладает более низким приоритетом по отношению к секции Who may use this view. Говоря
другими словами, если опущен флаг All readers and above, то пользователи, которые не «видят» вид на
основании значений списочного поля секции, не будут его «видеть» даже при поднятом флаге Allow
Public Access users и наличии соответствующего доступа.
6.4 Столбцы вида - column
Столбцы или колонки (column) вида определяют, что и как будет отображаться в виде. Для
нормального вывода информации в виде должен быть хотя бы один столбец.
Для получения доступа к окну свойств колонки вида необходимо выделить его заголовок в рабочей
панели Domino Designer и затем воспользоваться пунктами меню Design -> Column Properties.
Рассмотрим подробнее свойства столбца вида.
6.4.1
Закладка
Column Info - общая информация о столбце вида
Column Info (общая информация о столбце вида) выглядит следующим образом:
Рис. 6.17 Закладка Column Info окна свойств колонки вида
Поле Title (заголовок) определяет заголовок столбца вида. Он отображается в интерфейсе клиента
Notes в строке заголовков вида (при условии их отображения в виде). В Web-приложениях заголовок
колонки транслируется в тег <ТН ...> основной таблицы вида. При установке 1 в качестве значения поля
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
246
Height XXX (lines) для заголовков вида (см. раздел 6.3.3) во все теги <ТН ...> передается атрибут
NOWRAP. Кроме этого, заголовок столбца присутствует в объектно-событийной панели, как имя
соответствующего столбца. Заголовок столбца не является обязательным параметром, в случае его
отсутствия в объектно-событийной панели столбец озаглавлен как Untitled (безымянный). Максимальная
длина строки заголовка - 80 символов (не зависит от кодировки латинская/русская).
Поле Width (ширина) определяет ширину столбца в знакоместах. При отсутствии переносов в
столбцах и их заголовках (Height XXX (lines) для строк вида и заголовков, см. раздел 6.3.3),
неумещающаяся информация будет «усекаться».
Список Multi-value separator (разделитель значений из списка) определяет, как будут отображаться
в колонке вида элементы списка. Допустимые значения для поля: None (отсутствует) - в этом случае
элементы списка разделяются запятыми, Space (пробел), Comma (запятая), Semicolon (точка с запятой) и
New Line (перевод строки). Последнее значение целесообразно использовать совместно со свойством
строк вида Height XXX (lines) (см. раздел 6.3.3), установленным в значение отличное от единицы.
Флаг Resizable (регулируемый размер) позволяет при его поднятии в интерфейсе клиента Notes
изменять пользователям размер столбца с помощью мыши или через диалог Customize View. При
первоначальной загрузке вида размер столбца соответствует полю Width.
Флаг Show responses only (показывать только ответные документы). Поле предназначено для
создания в виде иерархии ответных документов. Другими словами колонка предназначена для
отображения значений документов, созданных по форме Response или Response to Response (см.
раздел 4.1.1). Для успешного отображения иерархии ответных документов у вида должно быть
установлено свойство Show response documents in a hierarchy (см. раздел 6.3.2), а также ответные
документы должны удовлетворять критериям отбора вида. Для вида рекомендуется устанавливать
свойство Show responses only только у одного столбца, правее должен присутствовать столбец, который
будет выступать в виде как категория (т.е., «свертываться/раскрываться» как секция формы).
Domino/Notes поддерживает до 32-х уровней иерархии для ответных документов. Для столбцов с
установленным флагом Show responses only рекомендуется задавать ширину, равную единице (поле
Width с рассматриваемой закладки) и пустое значение поля заголовок (Title).
Рис. 6.18 Отображение вида с иерархией ответных документов в клиенте Notes
Флаг Display values as icons (отображать значения в виде «иконок») разрешает выводить в колонке
вида иконки либо из набора предопределенного набора иконок Notes (см. Рис. 6.19), либо из графических
ресурсов текущей БД. В рамках одного столбца можно выводить до 10 иконок. Формула такого столбца
должна возвращать либо целочисленное значение (список) из диапазона от 0 до 183, для
предопределенных иконок Notes, либо имя (список имен) графического ресурса в виде текстовой строки
(списка). Нельзя в одном столбце одновременно выводить предопределенные иконки Notes и иконки из
графических ресурсов. Для иконок из графических ресурсов текущей БД рекомендуется размер 0,2 дюйма
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
247
по ширине и 0,18 дюймов по высоте. Кроме этого, такие иконки должны иметь графические форматы типа
GIF, BMP или JPEG. При отображении в столбце списка иконок, они не переносятся на следующую строку,
даже если для свойств строк вида установлено значение поля Height XXX (lines) больше единицы (см.
раздел 6.3.3).
Рис. 6.19 Предопределенные «иконки» Notes, предназначенные для размещения в столбцах видов
Пример. Для отображения в столбце иконки, сигнализирующей
присоединенных файлов, можно использовать следующую формулу столбца:
о
наличии
у документа
@If(@Attachments; 5:182; 0)
Флаг Editable column (столбец доступный для редактирования) разрешает редактировать по месту
содержимое указанного столбца. Подробно данный механизм будет рассмотрен в разделе 6.9.
Флаг Use value as color (использовать значение в качестве цвета) позволяет определять для
различных строк вида цвет фона/текста. В Domino версий R 5.x разработчики имели возможность
задавать цвет только для четных/нечетных (альтернативных) строк вида и непрочтенных документов.
Нельзя было задать цвет для строк, удовлетворяющих определенным условиям. В Domino Designer,
начиная с версии 6, разработчики могут изменять цвет строк вида в зависимости от полей или свойств
документов. Подробно данный механизм будет рассмотрен в разделе 6.7.
Флаг User definable (определяемый пользователем) позволяет определить формулу столбца через
профильный документ. При поднятии флага появляется поле Profile Document (профильный документ)
для задания имени профильной формы, в которой будет храниться формула текущего столбца. Подробно
данный механизм будет рассмотрен в разделе 6.8.
Флаг Do not display title in column header (не отображать заголовок столбца в строке заголовков
вида). Смысл флага ясен из названия. Флаг поддерживается в клиенте Notes и браузере.
Флаг Show twistie when row is expandable (показывать переключатель для «раскрываемых» строк).
При поднятии данного флага в клиенте Notes у строк, отображающих категории или родительские
документы, слева появляется иконка (по умолчанию треугольника), клик по которой заставляет
«свертываться/раскрываться» текущую строку. Если флаг опущен, то «свернуть/раскрыть» строку можно:
по клавише Enter; двойным кликом мыши или программным путем. В Web-приложениях иконка
переключателя присутствует независимо от флага Show twistie when row is expandable.
Поле Twistie Image (графическое изображение переключателя) и кнопки
Browse images
(просмотреть доступные графические ресурсы),
Formula (формула) позволяют изменить иконку по
умолчанию для раскрывающихся строк вида на иконку из графических ресурсов. Рекомендуется, чтобы
такие иконки состояли из двух частей (поле Images across содержит значение 2, см. раздел 16.1.1) и
имели формат GIF размером 33x16 пикселей. В этом случае для «свернутой» строки вида будет
отображаться первая часть иконки, а для «раскрытой» - вторая часть.
6.4.2
Закладка
образом:
Sorting tab - информация о сортировке данных столбца
Sorting tab (информация о сортировке данных столбца) выглядит следующим
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
248
Рис. 6.20 Закладка Sorting tab окна свойств колонки вида
В поле Sort (сортировка) представлены три радиокнопки: None (отсутствует), Ascending (сортировка
по возрастанию) и Descending (сортировка по убыванию), которые определяют порядок сортировки
данных в колонке. Поле Туре (тип) определяет условия группировки данных, значение Standard
(стандартный) задает обычные условия сортировки, a Categorized (категоризированный) - группирует
одинаковые значения столбца в строку категорию, которую можно «свернуть» или «раскрыть».
Возможности сортировок и категоризации информации из колонки вида будут более детально
рассмотрены позднее в разделе, посвященном формулам колонок вида (см. раздел 6.4.6).
Далее на закладке присутствуют пять флагов:
•
Case sensitive sorting (сортировка с учетом регистра). Поднятие флага ведет к различиям в
сортировке и группировке между прописными и заглавными буквами;
•
Accent sensitive sorting (сортировка в режиме «чувствительном» к диакритическим знакам).
Диакритический знак - знак, который в ряде языков ставится над буквой, ниже буквы или «пересекает»
букву для того, чтобы обозначить ее особое звучание;
•
Show multiple values as separate entries (отображать множественные значения на отдельных
строках вида). Поле доступно только при «обычной» сортировке (не Categorized). В последнем случае,
категории всегда отображаются на разных строчках. Если в столбце не выбрана сортировка (Sort
равно None), то выбор Show multiple values as separate entries приводит к отображению только
первого значения в списке. С этим флагом связаны ряд недокументированных возможностей его
применения. Рассмотрим одну из них - отображение связанных списков в виде;
Пример. В форме Fruit присутствуют два поля: Name и Cost, оба с возможностью принимать
множественные значения (поднят флаг Allow multiple values). Создадим по форме Fruit два документа:
• у первого документа значение поля Name - "Апельсин": "Яблоко": "Мандарин", и поля Cost
- 1 2 : 15:25;
• у второго документа значение поля Name - "Груша" : "Арбуз", и поля Cost - 17 : 26.
Построим вид, отбирающий документы, созданные по форме Fruit. Определим следующие колонки
вида:
• первая колонка с формулой - Name, для радиокнопок Sort выбрано значение Ascending и
поднят флаг Show multiple values as separate entries;
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
249
• вторая колонка с формулой - Cost, для радиокнопок Sort выбрано значение None и поднят
флаг Show multiple values as separate entries.
При тестировании этого вида в первой колонке будут выведены на отдельных строках наименования
всех фруктов, отсортированные по возрастанию, а во второй колонке соответствующие им цены (т.е.,
первое значение в форме поля Name соответствует первому значения поля Cost, N - N).
Рис. 6.21 Отображение связанных списков с помощью флага Show multiple values as separate entries
Вернемся опять на закладку Sorting tab окна свойств столбца вида, и рассмотрим оставшиеся
элементы интерфейса.
•
Categorized is flat version 5 or greater (использовать «плоскую» категоризацию в версиях 5 и
выше). Данный флаг группирует документы по категориям, однако выводит их не как
«раскрывающуюся» строку, а отображает значение категории в данном столбце на каждой строчке
вида;
•
Click on header column to sort (клик мыши по заголовку столбца используется для сортировки).
Поднятие данного флага позволяет задействовать заголовок столбца в процедуре дополнительной
сортировки данных вида или осуществить быстрый переход к другому виду. С другой стороны,
поднятие флага вызывает на закладке появление дополнительных полей. Первое поле список со
значениями: Ascending (сортировка по возрастанию), Descending (сортировка по убыванию), Both
(обе сортировки) и Change to View (перейти в другой вид). Для первых трех случаев, в правом углу
заголовка столбца присутствуют символы треугольников:
(для Ascending),
(для Descending) и
(для Both). Данные «треугольники» несут целый ряд функциональных нагрузок. Во-первых,
«треугольники» наглядно демонстрируют допустимый дополнительный порядок сортировки столбца.
Во-вторых, после клика по заголовку столбца активная сортировка отображается голубым цветом
«треугольника». В Web-приложениях включение дополнительного порядка сортировки столбца
вызывает появление в теге заголовка столбца <ТН ...> тега активной ссылки <А HREF ...>,
обрамляющего тег иконки с «треугольниками». В атрибут HREF тега <А HREF ...> передается текущий
относительный URL открытия текущего вида, в котором появляется дополнительный параметр, либо
ResortAscending=N, если клик должен вызывать дополнительную сортировку по возрастанию, либо
ResortDescending=N - в противном случае. Число N представляет номер текущего столбца в
видимом спектре, нумерация начинается с нуля. Следует также отметить, что из текущего URL вида в
атрибут HREF, активной ссылки заголовка столбца, передаются только параметры Count=n и
RestrictToCategory=категория (разумеется, если они присутствуют в текущем URL), остальные
параметры (включая Start=n) отбрасываются. Это приводит к тому, что переключение сортировки
столбца всегда вызывает отображение вида с первой его строки.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
250
Пример. Варианты генерируемых активных ссылок для переключения сортировок столбца.
<А HREF="/PRICETST.nsf/abc?OpenView&Count=10&ResortDescending=0">
<А HREF="/b.nsf/v?Open&RestrictToCategory=ab&ResortAscending=2">
Выбор для поля Click on header column to sort значений Ascending, Descending и Both вызывает
появление на странице закладки дополнительного флага Secondary sort column (вторичный столбец для
сортировки). Поднятие флага еще расширяет интерфейс закладки, на которой возникает два новых поля,
одно - со списком всех доступных для данного вида столбцов без текущего (столбцы задаются именем из
поля Title закладки Column Info, см. раздел 6.4.1, и поэтому могут присутствовать значения Untitled) и
второе поле - с типом сортировки: Ascending (сортировка по возрастанию) и Descending (сортировка по
убыванию). С точки зрения функциональности, данные поля позволяют определить вторую сортировочную
колонку и порядок сортировки, которые будут включаться при клике по заголовку текущего столбца. Для
вторичной сортировки (Secondary sort column) следует задавать столбец, лежащий правее текущего
столбца.
По поводу переключения сортировок вида с использованием клика по заголовку(ам) столбцов
следует сделать несколько замечаний. Во-первых, переключения сортировки столбца ведет, условно
говоря, к переключению на совершенно новый индекс вида, поэтому все другие сортировки, принятые в
других столбцах данного вида игнорируются. Категории, лежащие как справа, так и слева от текущего
столбца «пропадают», а просто сортировки без категоризации (если они не указаны в Secondary sort
column) - игнорируются. Во-вторых, применение переключения сортировки столбца с использованием
клика по заголовку столбца ведет к существенному увеличению размера индекса вида (примерно кратно
числу возможных переключений сортировок). Поэтому использовать данную возможность дизайна следует
достаточно осторожно.
Выбор значения Change to View для поля Click on header column to sort приводит к появлению в
заголовке столбца иконки «стрелки» . В Web-приложениях именно клик по этой иконке вызывает переход
к другому виду (в клиенте Notes для переключения достаточно просто кликнуть по заголовку столбца). Имя
вида, на который следует переключиться, задается в появляющемся при данном значении поле View
(вид), содержащем имена всех допустимых для данной БД видов. Для Web-приложений значение Change
to View вызывает генерацию в теге заголовка столбца <ТН ....> тега активной ссылки <А HREF ...>,
обрамляющего тег иконки со «стрелкой». В атрибут HREF тега <А HREF ...> передается относительный
URL открытия нового вида.
Вернемся опять к текущей закладке окна свойств колонки вида. На ней осталось нерассмотренным
поле Totals (сумма), позволяющее организовать вычисление определенных суммарных значений по
колонке, содержащей числовые значения.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
251
Рис. 6.22 Внешний вид колонки с подсчетом суммарного значения
Допустимыми для Totals являются следующие значения:
•
None (отсутствует). Суммарные значения по колонке не вычисляются;
•
Total (сумма). Вычисляется суммарное значение по всем главным документам (т.е., не Response
или Response to Response, см. раздел 4.1.1) вида. Общее суммарное значение отображается после
итоговой черты на новой строке вида. Для каждой подкатегории вычисляется и выводится суммарное
значение по ней;
•
Average per document (среднее по документам). Вычисляется суммарное значение по всем
главным документам, затем вычисленное значение делится на число главных документов. Для каждой
подкатегории вычисляется и выводится промежуточное значение. Итоговое значение по всему виду
есть сумма по всем главным документам, поделенная на общее число главных документов. Для
данного выбора формула столбца вида должна возвращать значение отличное от константы,
например, значение числового поля документа;
•
Average per sub-category (среднее по подкатегориям). Для любой категории, содержащей
подкатегории, вычисляется общая сумма по главным документам категории и делится на число
подкатегорий верхнего уровня текущей категории. Для категории, не содержащей подкатегорий,
считается сумма по главным документам и делится на общее число документов. Итоговое значение по
всему виду есть сумма по всем главным документам;
•
Percent of parent category (процент от «родительской» категории). Для любой категории,
являющейся подкатегорией, вычисляется общая сумма по главным документам категории и
определяется процентное соотношение вычисленного значения по отношению к сумме
«родительской» категории. Итоговое значение по всему виду есть 100%;
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
252
•
Percent of all documents (процент от всех документов). Для любой категории вычисляется общая
сумма по главным документам категории и определяется процентное соотношение вычисленного
значения по отношению к сумме по всему виду. Итоговое значение по всему виду есть 100%.
При выборе в поле Totals любого значения отличного от None становится доступным флаг Hide
detail rows («скрывать» детализацию для строк). Поднятие флага подавляет вывод значения столбца для
строк, являющихся документами, но не категориями или подкатегориями. Для последних суммарные
значения выводятся.
Общие замечание по поводу вычисления суммарных значений по столбцу. Во-первых, подсчет
ведется по всем документам, включая те, что скрыты от текущего пользователя полями типа Readers (см.
раздел 4.3.1.7), в этом случае значения сумм будут некорректны. Во-вторых, перевычисления суммарных
значений по столбцу происходят при каждом изменении индекса вида, это может существенно снизить
производительность приложения. Кроме этого, существуют случаи, когда суммарные значения
вычисляются не совсем корректно, это связано с ошибками округления. И последнее - вычисление
суммарных значений происходит после выполнения операций сортировок и категоризации, поэтому
нельзя выполнить сортировку или категоризацию по столбцу со значением в поле Totals отличным от
None.
6.4.3
Font tab - параметры шрифта содержимого столбца и Title tab - параметры шрифта
заголовка столбца
Интерфейс закладок
Font tab (параметры шрифта содержимого столбца) и
Title tab
(параметры шрифта заголовка столбца) практически полностью совпадают с уже рассмотренной в
контексте полей закладкой Font tab (см. раздел 4.3.3).
Рис. 6.23 Закладки Font tab и Title tab окна свойств колонки вида
В нижней части закладки появилось поле Justification (выравнивание) и кнопка Apply to All
(применить ко всем). Поле Justification определяет параметры выравнивания информации по отношению
к границам столбца и предлагает на выбор одно из трех значений радиокнопок Left (по левому краю),
Center (по центру) и Right (по правому краю). Кнопка Apply to All распространяет все значения текущей
закладки на оставшиеся в виде столбцы.
В Web-приложениях параметры шрифта передаются тегом <FONT> в содержимое тегов <ТН> - для
заголовка и <TD> - для значений столбцов. Параметры выравнивания из поля Justification (кроме Left)
передаются одноименным значением в атрибут ALIGN соответственно тегов <ТН> или <TD>.
6.4.4
Advanced Format tab - дополнительные параметры форматирования
Интерфейс закладки
Advanced Format tab (дополнительные параметры форматирования)
контекстно зависит от значения поля из секции Style (стиль). Эти значения следующие:
•
General (общие параметры форматирования). В этом случае, закладка не содержит никаких других
элементов интерфейса;
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
253
•
Number (параметры форматирования чисел) - отвечает за форматирование числовых значений. В
этом случае, закладка по элементам интерфейса практически полностью идентична закладке Control
tab окна свойств числового поля (см. раздел 4.3.1.3);
•
Date/Time (параметры форматирования значений типа дата/время) - отвечает за форматирование
значений типа дата/время. В этом случае, закладка по элементам интерфейса практически полностью
идентична закладке Control tab окна свойств поля типа дата/время (см. раздел 4.3.1.2);
•
Names (параметры форматирования имен Notes) - отвечает за форматирование значений типа
имена Notes. В этом случае, закладка выглядит следующим образом:
Рис. 6.24 Закладка Advanced Format tab при значении Names для поля Style
Секция Names (имена Notes) в первую очередь предназначена для отображения текущего статуса
пользователя на основании службы обмена «мгновенными» сообщениями (Lotus Instant Messaging).
Секция содержит следующие элементы интерфейса:
•
флаг Column contains a name (столбец содержит Notes-имя). Поднятие флага указывает на то,
что формула текущей колонки будет содержать Notes-имена в сокращенном иерархическом формате;
•
флаг Show online status (отобразить текущий статус пользователей). Поднятие флага приводит к
выводу в текущей колонке иконок, соответствующих текущему статусу пользователя на основании
службы Lotus Instant Messaging. Для корректной работы данного флага необходимо, чтобы в колонке
отображалось единственное (а не многозначное) значение;
•
поле Programmatic name of column that contains online name. None if current column.
(программное имя столбца, содержащего Notes-имя, использующееся для определения текущего
статуса пользователя. Не используется для текущего столбца). Если Notes-имена отображаются в
столбце отличном от текущего, то в указанное поле нужно ввести значение поля Name с закладки
Advanced tab (см. раздел 6.4.5) окна свойств столбца, в котором определяются Notes-имена
пользователей.
• список Vertical orientation (местоположение по вертикали) со значениями Тор (вверху), Middle
(посредине) и Bottom (внизу). Значение поля используется, когда колонка, отображающая onlineстатус пользователей, занимает при выводе больше одной строки. В этом случае значение Тор
выводит иконку online-статуса на первой строке, Bottom - на последней, a Middle - посредине.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
254
Пример 1. В виде отображаются документы, содержащие поле MyName, в котором хранятся
единичные (т.е., флаг Allow multiple values в свойствах поля опущен) значения типа Names. Для
отображения текущего статуса пользователей из поля MyName установим свойства столбца Column
contains a name и Show online status и зададим для него формулу:
@Name([ABBREVIATE]; MyName)
Пример 2. Видоизменим пример 1 так, чтобы в столбце отображающем текущий статус пользователя
выводилось помимо статуса только имя пользователя (а не иерархическое имя). Формула столбца в этом
случае будет - @Left(@Name([CN]; MyName);""). Если теперь при установках из примера 1 загрузить вид в
клиенте Notes, то текущий статус пользователей корректно отображаться не будет, т.к., формула столбца
не содержит иерархических компонент имени. Для решения проблемы создадим еще один скрытый
столбец с формулой @Name([ABBREVIATE]; MyName), и установим для него программное имя NewName.
Далее в столбце, который должен отображать текущий статус пользователей опустим флаг Column
contains a name, а в поле Programmatic name of column that contains online name. None if current
column, введем значение NewName. Как результат - в клиенте Notes будет опять отображаться текущий
статус пользователей в виде.
Рис. 6.25 Отображение в клиенте Notes online-cmamyca в колонке вида, для поля Vertical orientation
выбрано значение Middle
6.4.5
Закладка
образом:
Advanced tab - дополнительные свойства столбца вида
Advanced tab (дополнительные свойства столбца вида) выглядит следующим
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
255
Рис. 6.26 Закладка Advanced tab окна свойств колонки вида
Поле Name (имя) из секции Programmatic Use (программное использование) предназначено для
программного доступа к значениям, отображаемым в столбцах. Это поле может использоваться в
механизмах:
редактирования/создания документов
в
виде
по
месту (см.
раздел
6.9),
определения/переопределения формулы колонки вида конечными пользователями (см. раздел 6.8),
отображения текущего статуса пользователей (см. раздел 6.4.4) и т.д. Если формула столбца (подробнее
см. раздел 6.4.6) определяется именем поля из документов, то значение Name совпадает с именем этого
поля. В остальных случаях имя столбца выглядит как $N, где N - целочисленное значение. Разработчик
может самостоятельно менять значение этого поля. Для столбцов, чьи формулы определяются на
основании простых функций (Simple Function), можно сослаться на их значение по программному имени в
формуле столбца, лежащего правее текущего. В таком контексте нельзя использовать в текущем столбце
формулы: # in View (eg 2.1.2), # of Responses (1 Level), # of Responses (All Level) и Collapse/Expand (+/)
Пример. В виде присутствует столбец, отображающий дату создания документов (формула столбца
Creation Date). В свойствах столбца значение поля Name с закладки Advanced tab равно $1. Для задания
столбца Dead_Line, лежащего правее $1, и значение которого должно быть дата_создания + 7 дней,
можно использовать следующую формулу:
@Adjust( $1; 0; 0; 7; 0; 0; 0 )
Существует еще одна причина, когда следует обращаться к полю Name с закладки Advanced tab.
При переносе через буфер обмена Windows столбца из одного вида в другой может оказаться так, что
номера $N для столбцов будут совпадать. В этом случае, необходимо отредактировать данные номера
так, чтобы в пределах одного вида они были уникальны.
Вернемся к закладке Advanced tab. Оставшиеся поля из секции Programmatic Use имеют
отношение к механизмам «скрытия» столбцов:
•
флаг Hide column (скрыть столбец). Поднятый флаг безусловно скрывает столбец как в
интерфейсе клиента Notes, так и браузера. Однако, такой столбец присутствует в индексе вида (если
он не константа) и может использоваться как для сортировки данных вида, так и для доступа к
информации из этого столбца программным путем (например, через @DbColumn);
•
флаг Hide column if formula is true (скрывать столбец, если формула возвращает значение
«истина») используется для скрытия текущего столбца вида на основании @-формулы. Такая
формула вводится в многострочное поле, расположенное под рассматриваемым флагом. Кнопка
Formula Window (окно формулы) позволяет вывести указанную формулу в отдельном окне. Формула
скрытия столбца вычисляется однократно в момент открытия вида. Контекст таких формул плохо
документирован. Из соображений логики, формула должна возвращать одинаковые значения на всех
документах вида, следовательно, в таких формулах нельзя использовать значения полей документа. В
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
256
качестве примера можно привести формулы скрытия столбца на основании механизма ролей.
Например, @lsNotMember("[admin]"; @UserRoles);
•
флаг Hide in Notes R5 or before (скрывать столбец в клиенте Notes версий R 5 или более ранних).
Флаг становится доступным, только если поднят флаг Hide column if formula is true. В этом контексте
поднятие Hide in Notes R5 or before позволяет безусловно скрыть столбец в клиенте Notes указанных
версий.
Секция For Web Access (при доступе через Web) содержит единственный флаг Show values in this
column as links (отображать значение в данном столбце как ссылку). При отображении вида в Web с
использованием HTML-кода (не апплет Use applet in the browser, см. раздел 6.3.5) Domino по умолчанию
генерирует ссылку <А HREF ...> на каждый документ вида, для его возможного последующего открытия.
Ссылка генерируется для первой некатегоризованной текстовой (не столбец с иконками - свойство Display
values as icons см. раздел 6.4.1) колонки, считая слева направо. Поднятый флаг Show values in this
column as links позволяет определить для активной ссылки на документ любую другую колонку вида
(опять же некатегоризорованную, и не отображающую иконки). Можно поднять данный флаг для
нескольких колонок - это приведет к формированию в пределах одной строки вида нескольких активных
ссылок на один и тот же документ. Если после поднятия флага Show values in this column as links у
любой из колонок вида, потом опустить этот флаг у всех видимых колонок, то это приведет к тому, что в
генерируемом HTML-коде вида будут вообще отсутствовать активные ссылки на документы.
6.4.6
Формула столбца вида
Если свойства столбца из его окна свойств определяют как будет выводиться информация в
столбце, то формула столбца определяет, что будет, собственно, выводиться. Для задания формулы
столбца необходимо сначала перейти в объектно-событийной панели на конкретный объект Column Value
(значение столбца). При этом в панели программного кода можно определить характеристики выводимого
значения. В верхней части программной панели расположено поле Display (отображение), которое с
помощью трех радиокнопок определяет способ задания значения колонки вида. Интерфейс радиокнопок
предлагает для выбора следующие значения:
•
Simple Function (простые функции). Определение значения столбца идет на основании
предопределенного набора функции. Все они имеют аналоги в языке @-формул. Ниже в таблице
приведен список этих функций с расшифровкой выполняемых ими действий:
Название
Перевод
Расшифровка действия
Аналог на языке @формул
# in View (eg
2.1.2)
Номер в виде
(например, 2.1.2)
Отображает иерархический уровень текущего
документа. Номер 2.1.2 говорит, что документ
на верхнем уровне иерархии лежит во второй
категории, на втором уровне иерархии в
первой категории, а сам принадлежит к
третьему уровню иерархии и в рамках его
лежит вторым, считая сверху вниз.
@DocNumber
#
of
Responses (1
Level)
Число ответных
документов
на
первом
уровне
иерархии
Определяет
число
документов
или
подкатегорий, лежащих на один уровень ниже
текущей категории. Колонка с этой формулой
должна находится левее колонки с категорией,
для которой определяется число ответных
документов.
@DocChildren
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
257
#
of
Responses
(All Level)
Число ответных
документов
на
всех
уровнях
иерархии
Определяет
число
документов
или
подкатегорий, лежащих на всех уровнях ниже
текущей категории. Колонка с этой формулой
должна
находиться
левее
колонки
с
категорией, для которой определяется число
ответных документов.
@DocDescendants
Attachment
Lengths
Размер в байтах
присоединенных
файлов
Возвращаемое значение есть число, или
числовой
список,
если
присоединенных
файлов несколько.
@AttachmentLengths
Attachment
Names
Имена
присоединенных
файлов
Возвращаемое значение есть текст, или
текстовый список, если присоединенных
файлов несколько.
@AttachmentNames
Attachments
Количество
присоединенных
файлов
Возвращаемое
значение
соответствующее
числу
файлов.
@Attachments
Author(s)
(Distinguishe
d Name)
Автор(ы) (полное
иерархическое
имя)
Возвращает
имя
автора
иерархическом формате
документа
в
@Author
Author(s)
(Simple
Name)
Автор(ы)
(сокращенное
имя)
Возвращает
имя
автора
сокращенном формате
документа
в
@Name([CN];
@Author)
Collapse/Exp
and (+/-)
Уровень
«свернут/развер
нут»
Возвращает строку "+", если уровень в виде
разворачиваемый, и "-" - если нет. Столбец
должен
иметь
категоризацию
(свойство
Categorized),
либо
лежать
левее
категоризующей колонки.
@IsExpandable
Creation Date
Дата создания
Возвращает дату и время создания документа
@Created
Last Modified
Дата последней
модификации
Возвращает дату и
сохранения документа
@Modified
Last Read or
Edited
Дата последнего
чтения
или
редактирования
документа
Возвращает дату и время последнего чтения
или редактирования документа
@Accessed
Size (bytes)
Размер в байтах
Возвращает размер документа в байтах
@DocLength
есть
число,
присоединенных
время
последнего
•
Field (поля). Определение значения столбца идет на основании полей, присутствующих в текущей
БД. В панели программного кода перечислен список этих полей. Следует помнить, что в колонках
видов нельзя отображать значение Rich Text полей. Имена таких полей обычно отсутствуют в панели
программного кода. Это происходит в случае, когда у всех документов текущей БД поле с таким
именем имеет тип Rich Text. Далее, если текущая колонка категоризованная (Categorized, см. раздел
6.4.2), и в значении поля присутствует символ обратного слеша («\»), то в колонке возникают
дополнительные уровни иерархии, число которых зависит от количества обратных слешей в значении
поля. Например, значение поля «Европа\Россия\Москва» в категоризованной колонке вида будет
отображено тремя уровнями иерархии, соответственно «Европа», «Россия» и «Москва». При этом
следует не забывать, что Domino поддерживает до 32 уровней иерархии;
•
Formula (@-формула). Определение значения столбца идет на основании языка @-формул. Это
наиболее гибкий способ определения значения колонки вида. В контексте формулы колонки видов
допускается использовать ссылки на значения полей, а также ряд @-функции, которые
поддерживаются в этом контексте (подробнее см. документацию). Аналогично предыдущему пункту в
категоризованных колонках допускается использовать символ обратного слеша («\»). В этом случае
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
258
стоит не забывать, что согласно синтаксису @-формул, символ слеша должен быть удвоен. Например,
формула столбца может выглядеть так: Country + "\\" + Region + "\\" + Town.
6.5 Совместно используемые столбцы вида - shared column
Как уже упоминалось, в Domino Designer R 7 появился новый совместно используемый тип
элементов дизайна - столбец вида (shared column). Однократно определенный и хранящийся в одном
месте, он может использоваться в разных видах текущей БД, включая DB2 Query view. Изменения в
свойствах столбца и его формуле может автоматически распространяются на все виды его содержащие.
6.5.1
Создание совместно используемого столбца
Создать совместно используемый столбец можно двумя способами: «с нуля» и на основании
существующего обычного (т.е. несовместно используемого) столбца вида.
Для создания совместно используемого столбца «с нуля» можно воспользоваться меню Create ->
Design -> Shared Column. При этом в рабочую панель Domino Designer загрузится аналог вида с
единственным столбцом, который и является совместно используемым столбцом.
Для создания совместно используемого столбца на основании существующего столбца вида
необходимо выбрать такой столбец (клик по его заголовку) и воспользоваться меню Create -> Copy As
Shared Column. При этом выводится диалог определения имени такого столбца:
Рис. 6.27 Диалог определения имени shared column
В единственное поле диалога необходимо ввести имя совместно используемого столбца и кликнуть
по ОК. После выполнения операции в папке Shared Code\Columns появится новый столбец, созданный
на основании обычного столбца. Обратите внимание, что операция Create -> Copy As Shared Column не
заменяет тип соответствующего столбца, выступающий в роли источника копирования, на совместно
используемый. Если это необходимо, то нужно сначала удалить в виде этот столбец, а затем добавить
или вставить его из ресурсов типа совместно используемые столбцы.
Сразу при создании «с нуля» совместно используемого столбца открывается его окно свойств как
совместно используемого объекта. Обратите внимание, что у shared column два окна свойств: одно как
просто окно свойств столбца (шрифты, сортировки и т.д.), а второе как объекта для последующего
использования. Если вспомнить еще про свойства как элемента дизайна, то таких окон получается три.
Для получения доступа к окну свойств совместно используемого столбца, как просто столбца, при
условии что он загружен в рабочую панель Domino Designer, можно воспользоваться меню Design ->
Column Properties. Появляющееся окно свойств не отличается от аналогичного окна свойств обычного,
несовместно используемого столбца.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
259
Специальной команды для вывода окна свойств shared column как объекта нет. Можно сначала
воспользоваться меню Design -> Column Properties, и далее кликом по раскрывающемуся заголовку окна
свойств следует спуститься до свойств Shared Column:
Рис, 6.28 Раскрывающийся заголовок окна свойств shared column
Данное окно состоит из единственной закладки Shared Column Info, рассмотрим ее подробнее.
6.5.2
Shared Column Info - общая информация о совместно используемом столбце
Первая закладка
Shared Column Info (общая информация о совместно используемом столбце)
выглядит следующим образом:
Рис. 6.29 Закладка Shared Column Info окна свойств совместно используемого столбца
В единственной секции окна определяются: имя столбца (Name), его алиас (Alias) и комментарии
(Comment). Имя столбца - обязательный параметр, предназначение поля алиас автору неизвестно. Поле
Comment не влияет на поведение приложения и, в основном, предназначено для отображения в папке
совместно используемых столбцов Domino Designer.
Формула совместно
программной панели.
используемого столбца определяется
как и для обычного столбца
в
При сохранении совместно используемого столбца выдается предупреждающее сообщение: «Upon
saving, all views and folders that use this shared column will be updated. Do you want to save your changes?»
(При сохранении все виды и папки, использующие этот совместно используемый столбец будут
обновлены. Желаете ли вы сохранить ваши изменения?)
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
260
Рис. 6.30 Предупреждающее окно перед сохранением совместно используемого столбца
При клике по Yes ищутся виды и папки, в которые входит данный совместно используемый столбец,
и происходит обновление этих видов/папок. Если перед выполнением операции какая-либо из таких
видов/папок будет открыта в Domino Designer, то будет выдано предупреждающее сообщение: «A view or
folder 'XXXX' using this shared column 'YYYY' is being edited. Please exit the view or folder before continuing this
operation.» (Вид или папка 'ХХХХ', использующая совместно используемый столбец 'YYYY', редактируется.
Пожалуйста выйдите из режима редактирования вида или папки перед продолжением этой операции).
Следует воспользоваться данной рекомендацией - выйти из режима редактирования указанного
вида/папки и повторить операцию сохранения совместно используемого столбца.
Рис. 6.31 Предупреждающее окно о необходимости выйти из режима редактирования в виде/папке
6.5.3
Операции с совместно используемым столбцом
После того как совместно используемый столбец сохранен - можно проверить в какие виды/папки он
входит. Для этих целей в папке Domino Designer Shared Code\Columns предусмотрена акция Who is used
this Shared Column (кто использует данный совместно используемый столбец). Клик по акции выдает
либо окно:
Рис. 6.32 Окно со списком видов/папок, куда входит выбранный совместно используемый столбец
либо предупреждающее окно с текстом: «This Shared Column is not used by any view or folder»
(данный совместно используемый столбец не используется ни в одном виде/папке).
Для использования совместно используемого столбца в рамках вида/папки можно воспользоваться
меню: Create -> Insert New Shared Column (операции вставки перед текущим столбцом) и Create ->
Append New Shared Column (добавление в конец вида). Активация любой из этих операций вызывает
диалог:
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
261
Рис. 6.33 Диалог добавления/вставки совместно используемого столбца
В поле Insert shared column(s) необходимо выбрать один столбец для добавления/вставки в
текущий вид/папку. Диалог Insert Shared Column допускает выбор в одноименном поле нескольких
столбцов, однако в этом случае в R 7.0 добавляться будет только один столбец.
Поднятый флаг Use Formula Only (использование только формулы) позволяет изменять параметры
отображения совместно используемого столбца в рамках вида/папки, куда он добавляется. Если флаг
опущен, то все свойства такого столбца в виде/папке становятся недоступными для редактирования, за
исключением поля Name из секции Programmatic Use с закладки Advanced tab (см. раздел 6.4.5).
Возможность редактирования этого поля оставлена для исключения дублирования таких имен в рамках
одного вида. При создании совместно используемого столбца, у которого его формула базируется не на
значение поля БД, поля Name из секции Programmatic Use получает значение $0. При добавлении такого
столбца в вид/папку эта формула переопределяется на основании уже имеющихся значений аналогичных
столбцов, однако для исключения возможных совпадений поля Name из секции Programmatic Use
оставлено с возможностью редактирования. Сама формула совместно используемого столбца
(независимо от флага Use Formula Only) в рамках содержащего его вида недоступна для редактирования.
Если выбран режим Use Formula Only, то изменение и последующее сохранение столбца в папке Shared
Code\Columns не вызовет изменений формата в виде, который содержит этот столбец.
Удаление совместно используемого столбца (Edit -> Delete) из папки Shared Code\Columns
вызывает преобразование в содержащих его видах/папках соответствующих столбцов к обычному типу
(т.е., не shared column). Если при выполнении операции будет в Domino Designer открыт на
редактирование вид/папка, содержащий удаляемый столбцы, то будет выдано предупреждающее
сообщение (см. Рис. 6.31).
Для редактирования в рамках вида/папки совместно используемого столбца может осуществляться
через меню Design -> Edit Shared Column. Если данный столбец уже открыт на редактирование в другом
окне Domino Designer, то будет выдано предупреждающее сообщение: «You are already editig this View in
another window.» (Вы уже редактируете данный вид в другом окне).
6.6 Объекты и свойства вида, определяемые в объектно-событийной
панели
После создания вида в объектно-событийной панели Domino Designer присутствует целый ряд
объектов, имеющих отношение как к виду целиком, так и к его составляющим. Объект столбец мы уже
рассмотрели в разделе 6.4.6. Отличия акций вида как предопределенных, так и созданных разработчиком,
от акций формы, так же уже рассматривались в разделе 6.1.
Нерассмотренными в объектно-событийной панели остались два объекта верхнего уровня,
озаглавленные как имя_вида (Globals) и имя_вида (View). Назовем их соответственно Globals и View.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
262
6.6.1
Объект Globals
Объект Globals очень похож на одноименный объект формы (см. раздел 4.2.1), Первоначально
Globals содержит четыре подобъекта: Options (параметры), Declarations (описания), Initialize
(инициализация) и Terminate (завершение).
Объект Options предназначен для глобальных неисполняемых операторов типа Option (например,
Option Declare, DefType, Use и UseLSX). Объект Declarations предназначен для объявления глобальных
переменных, типов данных, классов, внешних функций, а также для определения констант и подключения
файлов директивой компилятора %INCLUDE. Объекты Initialize и Terminate предназначены для
определения подпрограмм, которые будут выполняться для Initialize в момент загрузки вида, а для
Terminate - в момент закрытия вида. Наглядно проверить последовательность возникновения событий
можно, внеся в соответствующие LotusScript объекты функцию, выводящую диалоговое окно (например,
Messagebox "имя объекта"). В объект Globals можно добавить и свои новые объекты, например свою
функцию. Один из способов сделать это - ввести код функции на следующей за End Sub строке в Initialize
или Terminate.
6.6.2 Объект View
Объект View содержит значительно больше составляющих, чем Globals. Первоначально они
условно разделены на две группы, первые могут содержать код только на @-формулах (или простых
действиях), вторые - изначально на LotusScript (большинство из них можно перевести в код на @формулы).
В первой группе находятся следующие объекты:
•
View Selection (формула отбора вида). Общие правила определения критерия отбора были уже
рассмотрены в разделе 6.1. С точки зрения интерфейса, в верхней части панели программного кода
Domino Designer расположено поле Run (выполнять), определяющее способ задания критерия отбора.
Значение Formula соответствует определению критерия отбора с помощью языка @-формул (это
также соответствует поднятому флагу By formula в окне создания нового вида см. Рис. 6.1), a Simple
Search (простой поиск) - с помощью простых действий (кнопка Add Conditions [добавить условие],
присутствующая в нижней части панели программного кода и в окне создания нового вида);
•
Form Formula (формула формы). Позволяет определить форму, по которой будут открываться
документы в данном виде. Значение свойства можно задавать только на языке @-формул. При
определении такой формулы для всех документов, исключая документы, с сохраненной в них форме,
будут открываться по форме, определенной в Form Formula. При этом даже создание документов
будет производиться по формуле из Form Formula. Например, Form Formula имеет вид
@lf(@lsMember("$$WebClient"; @UserRoles); "WebForm"; "NotesForm"), кроме этого, в виде
присутствует акция с формулой @Command([Compose];"Proba"). Клик по акции формы откроет в
интерфейсе клиента Notes форму с именем NotesForm, а не Proba;
•
HelpRequest (событие выдачи подсказки по нажатию на клавишу F1). Событие доступно только в
интерфейсе клиента Notes. Например, можно открывать страницу с именем "Help", тогда код будет
следующим @Command([OpenPage]; "Help");
•
Target Frame (single click) (целевой фрейм для действия по одинарному клику) и Target Frame
(double click) (целевой фрейм для действия по двойному клику). Определяют фреймы, в которых
будет открываться документ при одинарном и двойном клике по строке вида, содержащей документ.
Значения объектов, главным образом, используются в случае, когда вид отображается в рамках
некоторого фрейма объекта фреймсет. Однако, даже при безфреймовой структуре отображения вида,
данные объекты могут оказывать влияние на приложение. Например, задание для объекта Target
Frame (double click) значения "_blank" приводит к открытию документа в новом окне в интерфейсе
клиента Notes. Рассмотрение свойств вида, транслируемых в Web-приложения, будет рассмотрено
позднее в разделе 6.10;
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
263
Вторая группа объектов имеет изначально отношение к LotusScript. Объекты Options, Declarations,
Initialize и Terminate очень похожи на одноименные объекты из раздела Form формы (см. раздел 4.2.2).
Все они работают на уровне объектов вида, но не модуля.
Options предназначен для задания
глобальных неисполняемых операторов, a Declarations - для объявления глобальных переменных, типов
данных, классов, внешних функций, для определения констант и подключения файлов директивой
компилятора %INCLUDE. Initialize и Terminate предназначены для определения подпрограмм, которые
будут выполняться для Initialize в момент загрузки вида, а для Terminate - в момент выхода из вида.
Оставшиеся объекты из этой группы представляют собой обработчики событий для интерфейса
клиента Notes (но не Web). С другой стороны, это события (Event) встроенного класса NotesUIView.
Разработчик имеет возможность выбирать язык программирования для обработки данных событий между
LotusScript и @-формулами (за исключением события Inviewedit, которое допускает только язык
LotusScript):
•
Queryopen (обработчик события, возникающего перед загрузкой вида);
•
Postopen (обработчик события, возникающего после загрузки вида, но перед передачей виду
фокуса);
•
Regiondoubleclick (обработчик события, возникающего после двойного клика в области вида).
Событие поддерживается ТОЛЬКО для календарных видов;
•
Queryopendocument (обработчик события, возникающего перед открытием документа в виде).
Второй параметр Continue при значении False блокирует процедуру открытия документа;
•
Queryrecalc (обработчик события, возникающего перед принудительным обновлением
содержимого вида). Второй параметр Continue при значении False блокирует процедуру обновления
содержимого вида;
•
Queryaddtofolder (обработчик события, возникающего перед добавлением документа(ов) в папку в
интерфейсе вида). Третий параметр Continue при значении False блокирует процедуру добавления
документа(ов) в папку. Второй параметр Target (только для чтения) содержит имя папки, в которую
будет осуществляться добавление документа(ов);
•
Querypaste (обработчик события, возникающего перед добавлением документа(ов) в текущий вид
из буфера обмена). Второй параметр Continue при значении False блокирует процедуру добавлением
документа(ов) из буфера обмена;
•
Postpaste (обработчик события, возникающего после добавления документа/ов в текущий вид из
буфера обмена);
•
Querydragdrop (обработчик события, возникающего перед операцией drag&drop). Событие
поддерживается ТОЛЬКО для календарных видов. Второй параметр Continue при значении False
блокирует процедуру drag&drop;
•
Postdragdrop (обработчик события, возникающего
поддерживается ТОЛЬКО для календарных видов;
•
после
операции
drag&drop).
Событие
Queryclose (обработчик события, возникающего перед закрытием вида);
•
Queryentryresize (обработчик события, возникающего перед операцией изменения временных
границ документов календарного вида). Событие должно поддерживаться ТОЛЬКО для календарных
видов. Из личного опыта, в календарных видах, начиная с версии R 6.5 до 7.0 включительно,
корректно работает только событие Postentryresize. Проверить это можно, внеся в события
календарного вида Queryentryresize и Postentryresize операторы MessageBox. Затем в календарном
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
264
виде создать любой документ, переключиться в формат отображения календаря на один день, и с
помощью мыши изменить границы документа. При этом окно, соответствующее Postentryresize, будет
выведено, а для Queryentryresize - нет;
•
Postentryresize (обработчик события, возникающего после операцией изменения временных
границ документов календарного вида). Событие поддерживается ТОЛЬКО для календарных видов.
Для реального изменения временных рамок документа в данном событии необходимо самостоятельно
изменять соответствующие поля документа на основании свойств CalendarDateTime и
CalendarDateTimeEnd класса NotesUIView, которые определяют измененное время начала и окончания
события. Пример будет приведен в конце этого раздела;
•
Inviewedit (обработчик события, возникающего при редактировании и вводе новых документов в
виде по месту). Более подробно данный механизм будет рассмотрен в разделе 6.9.
Пример 1. При вставке в вид документов из буфера обмена, эти документы еще принудительно
копируются в папку CopyFromWB.
Sub
Postpaste(Source As
Dim col As
Notesuiview)
NotesDocumentCollection
Set col = Source.Documents
Call col.PutAllInFolder(
"CopyFromWB"
)
End Sub
Пример 2. В календарном виде отображаются документы созданные по форме Main, в которой дата
начала события определяется в поле StartDate, время события - в поле StartTime, а время окончания
события в поле EndTime. В этом случае для изменения временных границ документа можно
воспользоваться следующим кодом в рамках события Postentryresize:
Sub
Postentryresize(Source
As
Notesuiview)
Dim view As NotesView
Dim db As NotesDatabase
Set view = Source.View
Set db = view.Parent
Set
doc
'получаем
=
db.GetDocumentBylD(Source.CaretNoteID)
текущий
документ
doc.StartDate
Month(Source.CalendarDateTime),
=
Datenumber(Year(Source.CalendarDateTime)
Day(Source.CalendarDateTime))
doc.StartTime
Minute(Source.CalendarDateTime),
0)
doc.EndTime
=
=
Minute(Source.CalendarDateTimeEnd),
Call doc.Save(True,
,_
Timenumber(Hour(Source.CalendarDateTime)
,_
Timenumber(Hour(Source.CalendarDateTimeEnd)
,_
0)
False)
End Sub
6.7 Программное задание цвета строкам вида
В Domino Designer, начиная с версии 6, разработчик может определить для строк вида цвет фона и
текста в зависимости от полей или свойств документа. За эту возможность отвечает флаг Use value as
color с закладки Column Info (см. раздел 6.4.1) окна свойств столбца. Значения типа цвет могут
задаваться как в виде числового или текстового списка. В первом случае (числовой список) цветовое
значение состоит из трех компонент, соответственно RGB. Например, чистый желтый цвет соответствует
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
265
значению 255:255:0. В текстовом варианте это же значение будет - "FFFF00". Формула столбца,
задающего цвет строкам вида должна возвращать единичное цветовое значение или список, состоящий из
двух значений. Если возвращается одно значение, то оно определяет цвет текста строк, два - первое
фона, второе - текста. В рамках одной формулы нельзя смешивать текстовые и числовые значения типа
цвет. Цвет строки, определенный в столбце с поднятым флагом Use value as color, распространяется от
текущего столбца вправо до следующего столбца с поднятым флагом Use value as color. Для возврата
цветовой гаммы строк к исходному состоянию применяется цветовой столбец с формулой -1:-1:-1.
Столбцы, задающие цвет, можно скрывать от конечного пользователя с помощью флага Hide column с
закладки Advanced tab (см. раздел 6.4.5) окна свойств столбца.
В Web-приложениях цветовая гамма строк вида в Web транслируется ограниченно. В частности, не
поддерживаются цвета, заданные в виде текстовой строки. Однако если цвет строк задается числовым
списком, то такой механизм в Web поддерживается.
Пример 1. В виде отображаются документы, в которых присутствует поле Status с допустимыми
значениями: "выполнено", "требует срочного выполнения", "отменено". Столбец, определяющий цветовую
гамму строк вида, имеет поднятый флаг Use value as color и формулу:
yellow := "FFFF00";
red := "FF0000";
grey := "C0C0C0";
green := "00FF00";
black := "000000";
white := "FFFFFF";
@If (
Status = "требует срочного выполнения"; red : yellow;
Status = "отменено"; grey : black;
Status = "выполнено"; green;
white : black)
Пример 2. Модифицированный пример 1, где те же самые цветовые значения задаются числовыми
списками:
yellow := 255: 255: 0;
red := 255: 0 : 0;
grey := 192 : 192 : 192;
green := 0: 255: 0;
black := 0 : 0 : 0 ;
white := 255: 255: 255;
@If (
Status = "требует срочного выполнения"; red : yellow;
Status = "отменено"; grey : black;
Status = "выполнено"; green;
white : black)
6.8 Изменение формулы колонки вида конечными пользователями
В Domino Designer, начиная с версии 6, разработчик может предусмотреть возможность
определения/изменения цветовой гаммы строк вида конечными пользователями на основании формулы,
сохраняемой в профильном документе. В версии 7 аналогичная возможность появилась для столбцов
любых типов (не обязательно с флагом Use value as color). Для этого у столбца вида с поднятым флагом
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
266
User definable необходимо в поле Profile Document внести имя существующей формы текущей БД. Все
перечисленные элементы интерфейса определяются на закладке Column Info (см. раздел 6.4.1) окна
свойств столбца.
Далее в форме, заданной в поле Profile Document, нужно определить поле, которое будет
содержать формулу столбца как текстовую константу. И, наконец, имя этого поля нужно внести в качестве
программного имени столбца (поле Name с закладки Advanced tab, см. раздел 6.4.5).
Поле профильного документа, содержащее формулу столбца, обычно делают вычисляемым на
основании других полей профильной формы.
В качестве значения формулы таких столбцов в виде (т.е., то что вносится в программную панель)
можно, например, использовать формулу - @Username. Сама формула при этом не вычисляется. Не
допускается использовать в качестве такой формулы текстовые константы и функции типа @DocNumber.
В рамках одного вида все столбцы, формулы которых могут изменяться конечными пользователями,
должны ссылаться на один и тот же профильный документ. В противном случае при сохранении вида
выдается предупреждающее сообщение: «The profile document name must be the same for all user definable
columns in a view» (имя профильного документа должно быть одно и тоже для всех определяемых
пользователем столбцов вида).
Пример 1. В виде отображаются документы, у которых присутствует числовое поле Cost. В этой же
БД сохранены в виде графических ресурсов (см. раздел 16.1) файлы от actn001.gif до actn005.gif.
Требуется создать в виде столбец, определяющий цвет строки вида, и столбцы, отображающие иконки в
зависимости от значения поля Cost. Необходимо предусмотреть возможность конечным пользователям
изменять иконки и цветовую гамму вида. Для решения задачи создадим профильную форму с именем
Prof, содержащую поля:
•
Fon - тип Color, редактируемое;
•
Text-тип Color, редактируемое;
• Iсоn1 - тип Number, редактируемое, с поднятым флагом Allow multiple values и со значением по
умолчанию - 10 : 20;
• Iсоn2 - тип Text, редактируемое, с поднятым флагом Allow multiple values и со значением по
умолчанию - "actn001.gif": "actn002.gif;
•
ForCol1
- т и п Text, вычисляемое по формуле:
"@If(Cost < 10;" + @Implode(@Text(icon1); ":") +
•
";0)"
ForCol2 - тип Text, вычисляемое по формуле:
{@If(Cost < 20;") + @Implode(icon2; {":"}) +{";"")}
•
ForCol3 - тип Text, вычисляемое по формуле:
{@If(Cost < 30; "} + fon + {" :"} + text + {"; "00000000" : "00FFFFFF")}
Далее создадим в виде три столбца, у которых поднимем флаг User definable и внесем в поле
Profile Document значение Prof, а в качестве формулы столбца определим - @UserName. Далее в
свойствах:
• первого столбца поднимем флаг Use value as color, а в поле Name с закладки Advanced tab внесем
значение ForCol3;
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
267
• второго столбца поднимем флаг Display values as icons, а в поле Name с закладки Advanced tab
внесем значение ForCol1;
• второго столбца поднимем флаг Display values as icons, а в поле Name с закладки Advanced tab
внесем значение ForCol2.
Для доступа к профильной форме можно предусмотреть акцию вида с формулой:
@Command([EditProfile]; "Prof")
Откроем вид в клиенте Notes. Вызовем профильную форму, выберем для поля Fon значение синего
цвета, a Text - желтого. Значения полей Iсоn1 и Iсоn2 оставим без изменений. Сохраним профильную
форму. Далее перестроим индекс вида по клавишам Shift+F9. Результат - в столбце с программным
именем ForCol3 строки, значение поля Cost которых будет меньше 30, отобразятся желтым текстом на
синем фоне. В столбце с программным именем ForCol1 строки, значение поля Cost которых будет меньше
10, отобразятся в виде предопределенных иконок с номерами 10 и 20. В столбце с программным именем
ForCol2 строки, значение поля Cost которых будет меньше 10, отобразятся в виде иконок, сохраненных в
виде ресурсов, с именами "actn001.gif и "actn002.gif".
Опять вызовем профильную форму. Изменим в ней значение поля Fon на зеленый цвет, a Text красный. Для поля Iсоn1 введем значение: 40 : 50, а для Iсоn1 - "actn003.gif : "actn004.gif". Сохраним
профильную форму и перестроим индекс вида. Результат - в виде изменилась и цветовая гамма и
отображаемые иконки.
Обратите внимание, что изменения, выполненные и сохраненные в профильной форме, не сразу
находят свое отражение в индексе таких видов. Для принятия изменений нужно либо перейти в другой вид
и затем вернуться обратно, либо перестроить индекс вида по клавишам Shift+F9. Для выполнения этой
операции согласно документации требуются права Менеджера, однако из личного опыта, достаточно прав
Редактора с поднятым флагом Create shared folders/views.
Еще одно замечание по поводу указанного механизма, полученное из личного опыта. Если в
реальной формуле столбца, определяемой в поле профильного документа, используются компоненты
текущей даты/времени, то такие виды не помечаются сервером, как требующие частого обновления, и
автоматического обновления индекса таких видов происходить не будет.
Рассмотрим далее пример, в котором пользователю предоставлена возможность переопределять
формулу столбца, отображающего простой текст, а не иконки и цвет.
Пример 2. В виде отображаются документы, у которых присутствует числовое поле Cost. Требуется
создать в виде столбец, текст которого будет зависеть от значения поля Cost. Необходимо предусмотреть
возможность конечным пользователям изменять значение, отображаемое в столбце. Для решения задачи
создадим профильную форму с именем Prof1, содержащую поля:
• Limit1 - тип Number, редактируемое, значение по умолчанию - 20;
•
Limit2 - т и п Number, редактируемое, значение по умолчанию - 50 ;
•
Text1-тип Text, редактируемое, значение по умолчанию - "Низкая цена";
•
Text2- тип Text, редактируемое, значение по умолчанию - "Средняя цена";
•
Text3- тип Text, редактируемое, значение по умолчанию - "Высокая цена";
•
MyFormula - тип Text, вычисляемое по формуле:
(@If(Cost < } + @Text(Limitl) +{;"}
Text2 + {";"} + Text3 + {")}
+ Textl + {" ; Cost < } + @Text(Limit2) +{;"}
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
+
268
Далее создадим в виде первый столбец, у которого поднимем флаг User definable и внесем в поле
Profile Document значение Prof1, а в качестве формулы столбца определим - @UserName. Далее в
свойствах столбца в поле Name с закладки Advanced tab внесем значение MyFormula.
В клиенте Notes создадим профильный документ по форме Prof1 и перестроим индекс вида.
Результат - в первом столбце вида выводятся значения по формуле из поля MyFormula профильного
документа. Изменим значения полей профильного документа и перестроим индекс вида. Результат - в
первом столбце вида выводится информация по обновленной формуле из поля MyFormula профильного
документа.
6.9 Редактирование и ввод документов в виде по месту
За возможность редактирования по месту значений, отображаемых в столбцах вида, отвечает флаг
Editable column с закладки Column Info (см. раздел 6.4.1) окна свойств столбца. Если данный флаг
поднят, то клик в области значений данного столбца приводит к появлению поля для редактирования
текущего значения столбца по месту:
Рис. 6.34 Внешний вид процедуры редактирования по месту в виде
Поднятие флага Editable column является необходимым, но недостаточным условием для
реализации механизма редактирования по месту в виде. Вторым и достаточным условием для этого
является определение обработчика события Inviewedit (см. раздел 6.6.2). Рассмотрим его подробнее.
Заголовок процедуры обработчика события выглядит следующим образом:
Sub Inviewedit(Source As Notesuiview, Requesttype As Integer,
Columnvalue As Variant, Continue As Variant)
Colprogname As Variant,
Рассмотрим параметры процедуры:
•
Source - представляет текущий вид как экземпляр класса Notesuiview. Параметр доступен только
для чтения;
•
Requesttype - тип запроса. Параметр только для чтения, тип Integer Событие Inviewedit в рамках
редактирования/ввода документов в виде по месту может возникать до четырех раз. Параметр
Requesttype определяет какой вариант события обрабатывается в настоящее время и может
принимать одно из следующих значений:
• 1 соответствует запросу на редактирование, т.е., возникает в момент клика по
редактируемому столбцу как в режиме редактирования, так и ввода нового документа. В версии R
6.0 это значение было зарезервировано и не использовалось;
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
269
• 2 - запрос на проверку введенных данных. Возникает в момент ухода с редактируемой
ячейки;
• 3 - запрос на сохранение. Возникает после запроса на проверку введенных значений;
• 4 - запрос на ввод новых значений;
•
Colprogname - ссылка на массив, содержащий программные имена редактируемых столбцов
(значение из поля Name с закладки Advanced tab окна свойств столбца, см. раздел 6.4.5). Параметр
только для чтения, тип Variant. Для запросов с типом (Requesttype) равным 1 или 2 массив
Colprogname содержит единственный элемент, который соответствует программному имени текущего
редактируемого столбца. Для запросов с типом 3 и 4 массив Colprogname содержит программные
имена всех редактируемых столбцов вида. В обоих случаях индексация массива начинается с 0;
•
Columnvalue - ссылка на массив, содержащий значения редактируемых столбцов вида. Тип
параметра Variant. Для запросов с типом (Requesttype) равным 1 или 2 массив Columnvalue содержит
единственный элемент, который соответствует значению текущего редактируемого столбца. Для
запросов с типом 3 и 4 массив Columnvalue содержит значения всех редактируемых столбцов вида. В
обоих случаях индексация массива начинается с 0;
•
Continue - флаг разрешающий/запрещающий продолжение выполнения обработчика Inviewedit.
Параметр доступен для чтения и записи, тип параметра - Variant, а допустимые значения
соответственно True и False.
В рамках обработчика события Inviewedit разработчик должен самостоятельно найти требуемый
(или создать новый) документ, в случае необходимости преобразовать введенные текстовые значения из
массива Columnvalue к ожидаемому в документе типу данных (например, число или дата/время), и затем
сохранить измененный документ. При необходимости еще можно осуществлять проверку введенных
значений и запрет на дальнейшее выполнение операций.
Для поиска документа, в котором происходит редактирование, обычно используют свойство
CaretNotelD класса Notesuiview, которое возвращает notelD, текущей записи в виде, или 0 - при вводе
нового документа в запросе на возможность редактирования (Requesttype=1).
Пример. В виде отображаются три столбца с программными именами: MyText (текстовые значения),
MyDate (значения типа дата/время) и MyNumber (числовое значение), в которых выводятся значения из
соответствующих полей документа. У всех полей поднят флаг Editable column. По условиям задачи
требуется запретить ввод в столбец MyText пустых строк, в MyDate - дат ранее 18.02.2004 и в MyNumber чисел меньших нуля. Кроме этого, требуется запретить редактирование по месту в текущем виде
пользователю с именем "User15". В этом случае код обработчика события Inviewedit может быть
следующим:
Sub Inviewedit(Source As Notesuiview, Requesttype As Integer,
Columnvalue As Variant, Continue As Variant)
Colprogname As Variant,
Dim session As New NotesSession
Dim user As String
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim caret As String
Dim i As Integer
caret = Source.CaretNoteID 'noteID текущего документа
Set db = Source.View.Parent
If (caret <> "0") Then
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
270
Set doc = db.GetDocumentByID(caret)
'получили текущий документ в виде
End If
Select Case Requesttype
Case 1:
'запрос на редактирование/ввод
user = session.CommonUserName
If (user = "Userl5") Then
Messagebox "Вам запрещено редактирование по месту в этом виде"
Continue = False
End If
Case 2:
'запрос на проверку введенных данных
Select Case Colprogname(0)
Case "MyText":
'столбец MyText
If Fulltrim(Columnvalue(0)) = "" Then
Messagebox "Значение в столбце MyText не может быть пустым"
Continue = False
End If
Case "MyDate":
'столбец MyDate
If Not Isdate(Columnvalue(0)) Then
Messagebox "Значение в столбце MyDate нельзя преобразовать к типу
дата"
Continue = False
Else
If Datevalue(Columnvalue(0)) < Datevalue("18.02.2004") Then
Messagebox "Значение в столбце MyDate меньше 18.02.2004"
Continue = False
End If
End If
Case "MyNumber" :
'столбец MyNumber
If Not Isnumeric(Columnvalue(0)) Then
Messagebox
"Значение
в
столбце
MyNumber
нельзя
преобразовать к
типу число
Continue = False
Else
If Val(Columnvalue(0)) < 0 Then
Messagebox "Значение в столбце MyNumber меньше 0"
Continue = False
End If
End If
End Select
Case 3:
'запрос на сохранение
For i = Lbound(Colprogname) To Ubound(Colprogname)
Select Case Colprogname(i)
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
271
Case "MyText":
Call
'столбец MyText
doc.ReplaceItemValue(Colprogname(i),
Case "MyDate":
Columnvalue(i))
'столбец MyDate
Call
doc.ReplaceItemValue(Colprogname(i),
Datevalue(Columnvalue(i)))
Case "MyNumber" :
Call
'столбец MyNumber
doc.ReplaceItemValue(Colprogname(i),
Val(Columnvalue(i)))
End Select
Next
Call doc.Save( True, False, True )
End Select
'сохраняем измененный документ
End Sub
6.9.1
Ввод новых документов по месту
Для возможности ввода в виде новых документов по месту, необходимо, в дополнение к
редактируемым столбцам поднять флаг Create new documents at view level с закладки Options tab (см.
раздел 6.3.2) окна свойств вида. Кроме этого, нужно в обработчике события Inviewedit реализовать свой
алгоритм для значения параметра Requesttype равного 4. При этом, перед сохранением нового документа
следует не забывать добавлять в него поля, которые не отображаются в редактируемых столбцах вида.
Например, поле Form.
Поднятие флага Create new documents at view level приводит к появлению в виде дополнительной
самой нижней строки с текстом: «Ctrl-Click here to add a new document» (выполните здесь Ctrl-Click для
добавления нового документа). Соответственно, Ctrl-Click в этой строке позволяет ввести значения для
редактируемых столбцов. Следует правда отметить, что строка Ctrl-Click here to add a new document не
появляется, если в виде не присутствует ни одного документа. Еще один факт вызывает удивление. После
редактирования или ввода нового документа по месту, документ становится непрочитанным даже для
пользователя, который только что редактировал/создавал документ. Это происходит в случае, если
текущий пользователь отличается от последнего редактора текущего вида, хотя поле $UpdatedBy, в этом
случае, содержит в качестве значения имя текущего пользователя.
Пример. Модифицируем пример из предыдущего параграфа так, чтобы в виде можно было вводить
новые документы по месту. Для этого поднимем флаг Create new documents at view level в окне свойств
вида, и модифицируем обработчик события Inviewedit таким образом:
Sub Inviewedit(Source As Notesuiview, Requesttype As
Columnvalue As Variant, Continue As Variant)
Integer,
Colprogname As Variant,
Dim session As New NotesSession
Dim user As String
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim caret As String
Dim i As Integer
caret = Source.CaretNoteID 'noteID текущего документа
Set db = Source.View.Parent
If (caret <> "0") Then
Set doc = db.GetDocumentByID(caret) 'получили текущий документ в виде
End If
Select Case Requesttype
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
272
Case
1:
'запрос на редактирование/ввод
user = session.CommonUserName
If (user = "Userl5") Then
Messagebox "Вам запрещено редактирование по месту в этом виде"
Continue = False
End If
Case 2:
'запрос на проверку введенных данных
Select Case Colprogname(0)
Case "MyText":
'столбец MyText
If Fulltrim(Columnvalue(0)) = "" Then
Messagebox "Значение в столбце MyText не может быть пустым"
Continue = False
End If
Case "MyDate":
'столбец MyDate
If Not Isdate(Columnvalue(0)) Then
Messagebox "Значение в столбце MyDate нельзя преобразовать к типу
дата'
Continue = False
Else
If Datevalue(Columnvalue(0)) < Datevalue("18.02.2004") Then
Mesagebox "Значение в столбце MyDate меньше 18.02.2004"
continue = False
End If
End If
Case "MyNumber" :
'столбец MyNumber
If Not Isnumeric(Columnvalue(0)) Then
Messagebox
"Значение
в
столбце
MyNumber
нельзя
преобразовать
типу число'
Continue = False
Else
If Val(Columnvalue(0)) < 0 Then
Messagebox "Значение в столбце MyNumber меньше О"
Continue = False
End If
End If
End Select
Case 3:
'запрос на сохранение
For i = Lbound(Colprogname) To Ubound(Colprogname)
Select Case Colprogname(i)
Case "MyText":
'столбец MyText
Call doc.ReplaceItemValue(Colprogname(i), Columnvalue(i))
Case "MyDate":
'столбец MyDate
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
к
273
Call
doc.ReplaceItemValue(Colprogname(i),
Datevalue(Columnvalue(i)))
Case "MyNumber" :
Call
'столбец MyNumber
doc.ReplaceItemValue(Colprogname(i),
Val(Columnvalue(i)))
End Select
Next
Call doc.Save( True, False, True )
Case 4:
'сохраняем измененный документ
'запрос на ввод нового документа
Set doc = New NotesDocument(db)
For i = Lbound(Colprogname) To Ubound(Colprogname)
Select Case Colprogname(i)
Case "MyText":
Call
'столбец MyText
doc.ReplaceItemValue(Colprogname(i),
Case "MyDate":
Columnvalue(i))
'столбец MyDate
Call
doc.ReplaceItemValue(Colprogname(i),
Datevalue(Columnvalue(i)))
Case "MyNumber" :
Call
'столбец MyNumber
doc.ReplaceItemValue(Colprogname(i),
Val(Columnvalue(i)))
End Select
Next
doc.Form = "g1"
Call doc.Save( True, False, True )
'сохраняем измененный документ
End Select
End Sub
6.10 Трансляция видов в Web
В настоящем параграфе мы рассмотрим как транслируются в Web обычные невстроенные виды (т.е.,
не Embedded View). Трансляция в Web встроенных видов рассматривалась в разделе 4.21.5.
Главными параметрами вида при его трансляции в Web являются три флага из секции For Web
Access с закладки Advanced tab окна свойств вида (см. раздел 6.3.5). Это флаги: Treat view contents as
HTML, Use applet in the browser и Allow selection of documents. Если не один из флагов не поднят, то
трансляция вида в Web осуществляется стандартным HTML-кодом. При этом, вверху и внизу основной
таблицы с информацией из вида добавляются кнопки стандартной навигации: Previous (на экран назад),
Next (на экран вперед), Expand («раскрыть» все категории), Collapse («свернуть» все категории) и Search
(стандартный поиск по виду). Акции вида, если они имеются, транслируются в Web аналогично акциям
формы (см. раздел 4.9.6).
Сам вид транслируется в Web тегом <TABLE>. Если в виде имеются «раскрывающиеся» категории,
то напротив них появляется иконка переключателя (по умолчанию треугольника) независимо от свойства
Show twistie when row is expandable соответствующего столбца.
6.11 Особые свойства и настройки для календарных видов
Календарный вид предназначен для группировки и отображения входящих в него документов в
календарном формате. Первым, но недостаточным условием для придания виду календарного стиля
является установка в свойствах вида на закладке View Info для поля Style значения Calendar (см. раздел
6.3.1). Далее формула первого столбца вида должна возвращать значение типа дата/время с
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
274
обязательным присутствием компоненты даты. Кроме этого, первый столбец должен иметь сортировку по
возрастанию (значение Ascending для поля Sort с закладки Sorting tab см. раздел 6.4.2). Еще одно
обязательное требование к первому столбцу - установка на закладке Advanced Format tab для поля Style
значения Date/Time и флагов Display Data и Display Time (см. раздел 6.4.4). Последнее необходимое
условие отображения документов в виде по календарному формату - в виде должен присутствовать как
минимум еще один столбец. Возвращаемся к первому столбцу, если его формула возвращает список
значений типа дата/время, то для отображения всех значений нужно в свойствах столбца на закладке
Sorting tab поднять флаг Show multiple values as separate entries (см. раздел 6.4.2). В противном случае
в виде будут отображаться только первые значения из списка. В документации рекомендуется «скрывать»
первый столбец для календарных видов, однако это не является необходимым условием. Желательно
лишь, чтобы в виде присутствовал хотя бы один «нескрытый» столбец.
Если в календарном виде необходимо «красиво» отображать документы с временными интервалами
(дата/время начала и окончания интервала), то первый столбец вида должен соответствовать начальной
точке интервала и содержать компоненты даты и времени, а второй - продолжительность интервала в
минутах. Под словом «красиво» здесь понимается возможное отображение занятого времени, конфликты
по времени и т.д. Например, в документе присутствуют поля StartDate (дата некоего события, присутствует
только компонента даты), StartTime (время начала события, только временная компонента) и EndTime
(время окончания события, также только временная компонента). В этом случае, формула первой колонки
вида может быть - @Date(@Year(StartDate); @Month(StartDate); @Day(StartDate); @Hour(StartTime);
@Minute(StartTime); 0), а второй колонки - @lf(@lsError( (EndTime - StartTime)/60); 0; (EndTime StartTime)/60 ). Для понимания как функционирует календарный вид, автор рекомендует, помимо данной
книги, рассмотреть вид ($Calendar) из стандартной почтовой БД, а также обратиться к форуму компании
Iris. Например, http://www-128.ibm.com/developerworks/lotus/library/ls-Creatinq_a_Calendar_view/. Последний
документ хотя и относится к Domino/Notes версии R 4.5, однако, базис календарного вида даже для R 7.x
существенных изменений не претерпел.
После того как в свойствах вида для него определен календарный стиль, изменяются окна свойств
как вида, так и столбцов. Рассмотрим эти изменения подробней и начнем с окна свойств вида.
6.11.1 Окно свойств календарного вида
На первой
View Info и последней
Security закладках окна свойств календарного вида не
наблюдается отличий от одноименных закладок стандартного вида (см. разделы 6.3.1 и 6.3.6).
На закладке
Options tab окна свойств календарного вида становятся недоступными для
редактирования следующие поля: Collapse all when database is first opened, Show response documents
in a hierarchy и On Open (см. раздел 6.3.2).
На закладке
Advanced tab окна свойств календарного вида становится недоступным для
редактирования флаг Use applet in the browser (использовать апплет при отображении вида в Web).
Стоит также отметить, что хотя флаги Treat view contents as HTML и Allow selection of documents
доступны для календарных видов, их поднятие никакой дополнительной функциональности не несет.
Календарный вид в Web-приложениях всегда отображается только стандартным HTML (см. раздел 6.3.5).
У календарного вида вместо отсутствующей закладки
Launch (см. раздел 6.3.4) появляются
две новые закладки
Font tab (параметры шрифтов) и
Date and Time Format (формат даты и
времени). Первая (Font tab) - практически идентична одноименной закладке, рассмотренной в контексте
свойств поля (см. раздел 4.3.3). Исключение составляет только дополнительное поле-список,
находящееся в самом верху закладки. Значения этого поля позволяют определить разные параметры
шрифтов для: слота времени (Time Slots/Grouping), строки заголовков (Header), отображения дат для
всех режимов форматирования и дней для формата на один/два день (Day and Date), отображения дней
месяца и года для формата на неделю (Week - Day and Month).
Рассмотрим подробнее оставшиеся закладки окна свойств календарного вида.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
275
6.11.1.1
Style tab - параметры стиля календарного вида
Закладка
Style tab окна свойств календарного вида существенно отличается от одноименной
закладки стандартного вида (см. раздел 6.3.3). Закладка содержит следующие элементы интерфейса:
Рис. 6.35 Закладка Style tab окна свойств календарного вида
Секция Body (тело вида) календарного вида отличается от одноименной секции стандартного вида
тем, что в первой нельзя задать цвет альтернативных строк вида. Еще сюда перекочевало поле Grid
(сетка) из одноименной секции стандартного вида. Поле Grid задает только цвет сетки, стиль сетки у
календарного вида также недоступен для изменения.
Секция Header (заголовки) отвечает за заголовки календарного вида. Для календарных видов под
заголовками понимаются не значения, определяемые в полях Title с закладки Column Info (см. раздел
6.4.1) окна свойств столбцов вида, а значения из предопределенного набора, представленного в поле
Display (отображение) текущей секции. Эти значения отображаются при соответствующих условиях в
левой верхней части календарного вида и позволяют выводить календарный вид в различных форматах
(на один день, неделю, месяц и т.д.). В поле Display допускается выбирать несколько значений из
следующих:
•
Day tab (закладка на день) - осуществляет форматирование на один или два дня. В клиенте Notes
при клике на стрелке, отображаемой в рамках закладки, появляется контекстное меню со значениями
One Day (один день) и Two Day (два дня). Выбор любого из значений устанавливает соответствующий
режим форматирования календарного вида. Клик просто по закладке (не по стрелке) включает
последний используемый режим форматирования для данной закладки;
•
Week tab (закладка на неделю) - осуществляет форматирование в рамках недели(ей).
Контекстное меню, появляющееся при клике на стрелке закладки состоит из следующих значений: One
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
276
Week (одна неделя), One Work Week (одна рабочая неделя, т.е., без выходных), Two Week (две
недели) и Two Work Week (две рабочие недели);
•
Month tab (закладка на месяц) - осуществляет форматирование в рамках месяца. Контекстное
меню, появляющееся при клике на стрелке закладки состоит из следующих значений: One Month
(один месяц), One Month Week (один рабочий месяц);
•
Meetings tab (закладка на совещания) - осуществляет переход в предопределенные виды БД
(если они в ней имеются). В зависимости от их наличия на закладке может присутствовать контекстное
меню из следующих подпунктов:
• On My Calendar (мой календарь) - выполняет
($MeetingsOnMyCalendar) и алиасом MeetingsOnMyCalendar;
переход
в
вид
с
именем
• All By Date (все по дате) - выполняет переход в вид с именем ($MeetingsAIIByDate2) и
алиасом MeetingsAIIByDate2;
• Meeting Threads («нити» обсуждений) - выполняет переход в вид с именем ($Meetings) и
алиасом Meetings;
•
Trash tab (закладка на мусорную корзину) - даже в БД, созданных по почтовому шаблону R 7, клик
по закладке не вызывает никаких действий;
•
Current month (текущий месяц) - осуществляет вывод в правой части строки заголовков значения
текущего месяца и года, клик по которым приводит к отображению стандартного объекта выбора даты;
•
Goto today (перейти к сегодняшнему дню) - осуществляет вывод в правой части строки заголовков
иконки , клик по которой выполняет переход в календарном виде к текущему дню;
•
Format options (параметры форматирования) - осуществляет отображение в правой части строки
заголовков строки Formatting (форматирование), клик по которой выводит меню из двух пунктов:
• Summarize (суммировать) - осуществляет категоризацию строк календарного вида по дате
начала событий;
• Show Time Slots (отобразить тайм-слот) - выводит в самой левой колонке календарного
вида временные интервалы. Другими словами, это специальный столбец, в котором через
определенные интервалы выводятся временные значения. Этот столбец обычно выводится для
незаполненных строк в календарном виде и позволяет наглядно определить свободное/занятое
время. Тайм-слот отображается только для форматов неделя и месяц, но не день. Также тайм-слот
не отображается, если опущен флаг Time slot display available to users на закладке Date and
Time Format (см. раздел 6.11.1.2) окна свойств календарного вида.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
277
Рис. 6.36 Отображение тайм-слота в клиенте Notes
Переключение форматов отображения календаря можно выполнять и через меню клиента Notes
(например, View -> Change Format -> Two Days). Причем, эти пункты меню доступны, даже если не
выбраны соответствующие значения в строке заголовков.
Возвращаемся опять к секции Header. Поле Background (фон) определяет цвет фона строки
заголовков. Поле Style (стиль) отвечает за стиль отображения заголовков и предлагает на выбор
следующие значения:
•
None (никакой) - строка заголовков при этом значении не отображается;
•
Plain (простые) - заголовки отображаются обычным текстом, разделенные вертикальными
линиями;
•
Tabs (закладки) - заголовки отображаются в виде закладок.
В секции Date Area (область дат) присутствуют следующие элементы интерфейса:
•
поле Background (фон) определяет цвет фона строк, отображающих даты для форматов на
неделю и месяц;
•
поле Today (сегодня) определяет цвет фона для строки с текущей датой;
•
ToDo Area (область задач) определяет цвет фона «подложки» для записей типа задача в формате
отображения календаря на одну или две даты. Сама строка с задачей отображается цветом
смешанным из поля ToDo Area и Background из секции Entry. Данный цвет в чистом виде можно
увидеть в формате отображения календаря на две даты, если у одной из них введена запись задачи, а
у другой нет. Т.к., все интерфейсы и названия «пришли» в календарный вид из стандартной почтовой
БД, то в разрабатываемом «с нуля» календарном виде под «задачей» понимается запись, у которой в
первой колонке отображается только компонента даты без времени;
•
флаг Large numbers (большие числа). При поднятом флаге в формате отображения календаря на
одну или две даты сами даты отображаются значительно большим шрифтом.
Секция Daily (ежедневно) позволяет для режима форматирования на один/два дня определить цвета
для рабочего (поле Work hours) и нерабочего (поле Other) времени. Где определяются границы начала и
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
278
окончания рабочего времени - будет рассмотрено в контексте секции Time slot display available to users с
закладки Date and Time Format (см. раздел 6.11.1.2) окна свойств календарного вида.
Секция Monthly (ежемесячно) позволяет для режима форматирования на месяц определить цвет
фона содержимого (поле Not current) и текста (Text) для заголовков дат не из текущих месяцев;
В секции Entry (содержимое) присутствуют следующие элементы интерфейса:
•
поле Background (фон) определяет фон строк, отображающих документы в календарном виде;
•
поле Unread (непрочтенные) определяет цвет текста для непрочтенных документов;
•
поля Height (lines) (высота в строках), Spacing (межстрочный интервал) и флаги Shrink rows to
content («подгонять» размер строк данных под реальное содержимое), Uread transparent
(«прозрачный» шрифт для непрочтенных документов) по своей функциональности идентичны
одноименным полям и флагам из секции Rows с закладки Style tab (см. раздел 6.3.3) окна свойств
стандартного вида;
•
флаг Show conflict marks (отображать пометки о конфликтах). Поле имеет отношение к
«конфликтам» пересечения временных интервалов в разных документах, а не к конфликтам
сохранения и репликаций. Последние вообще не отображаются в календарных видах, т.к. они не
поддерживают иерархию документов. Если флаг поднят, то слева от «конфликтных» документов
отображается полоска толщиной в несколько пикселей (из опытов, в два пикселя - поэтому не всегда
бросается в глаза). Цвет полоски соответствует значению из поля Today. Отображение полоски не
зависит от присутствия в виде слота времени.
Секция Other (иное) содержит два флага:
•
Show selection margin (отображать столбец специальных пометок). В контексте календарных
видов в столбце специальных пометок можно только выбирать документы. Соответственно в нем не
отображаются пометки об удалении, непрочтении и конфликтах репликаций/сохранения. Документ,
помеченный к удалению, отображается в календарном виде перечеркнутым шрифтом. Все это связано
с ограничениями по размеру для отображения документов в календарном виде;
•
Extend last column to window width (расширить последний столбец вида до размеров окна). На
календарные виды данный флаг видимых действий не оказывает.
Секция Margin (границы) полностью идентична одноименной секции с закладки Style tab (см. раздел
6.3.3) окна свойств стандартного вида.
6.11.1.2
Закладка
Date and Time Format - формат даты и времени
Date and Time Format (формат даты и времени) имеет следующий вид:
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
279
Рис. 6.37 Закладка Date and Time Format окна свойств календарного вида
Первая секция Calendar formats available to users (допустимые для пользователей форматы
отображения календарного вида) содержит шесть флагов, соответствующих разным форматам
отображения календарного вида, а также начальному значению формата (поле-список Initial format).
Допустимыми форматами являются следующие: один день (1 day), два дня (2 day), рабочая неделя (Work
week, т.е., без выходных), одна неделя (1 week), две недели (2 week) и один месяц (1 month). Начальное
значение (Initial format, т.е., тот формат, который будет использован при первом открытии вида) в
дополнение к перечисленным значениям содержит еще и значение по умолчанию (Default). Этот выбор
приведет к открытию календарного вида по формату, который был на момент закрытия вида. Выбранные
допустимые календарные форматы отображаются в строке заголовков календарного вида (поле Display
из секции Header с закладки Style tab окна свойств календарного вида, см. раздел 6.11.1.1). Причем,
значения из секции Calendar formats available to users обладают более высоким приоритетом над полем
Display. Например, в секции Calendar formats available to users опущены флаги 1 day и 2 day, тогда
даже если в поле Display выбрано значение Day tab, то в строке заголовков закладка на один день не
появится, и на форматирование в рамках одного/двух дней нельзя будет переключиться через меню View
-> Change Format. Между допустимыми форматами можно переключаться и программно по @-команде
[CalendarFormat].
Вторая секция Time slot display available to users (разрешить пользователям выводить слот
времени) отвечает за возможность отображения в календарных видах слота времени. Поднятие флага,
находящегося в заголовке секции, позволяет пользователям включать/выключать слот времени в
календарных видах. За это отвечает пункт контекстного меню Show Time Slots, вызывающийся кликом по
заголовку Formatting. Данный заголовок доступен только при выборе значения Format options для поля
Display из секции Header с закладки Style tab (см. раздел 6.11.1.1) окна свойств календарного вида.
Однако, даже если значение Format options не выбрано, все равно можно включить/выключить слот
времени через меню клиента Notes: View -> Show -> Time Slots. Если флаг Time slot display available to
users опущен, то меню Time Slots доступно, однако клик по нему никаких действий не вызывает.
Три поля - Start time (время начала интервала), End time (время окончания интервала) и Duration
(шаг интервала) определяют граничные параметры тайм слота. Ниже в секции расположены два флага:
•
Users may override these times (пользователи могут изменять эти временные параметры).
Поднятие флага ведет к тому, что пользователи могут самостоятельно изменять время начала,
окончания и шаг тайм-слота. В календарном виде стандартной почтовой базы это достигается через
профильный документ. А в итоге все выливается в запись специальных переменных
CalendarTimeSlotStart, CalendarTimeSlotEnd и CalendarTimeSlotDuration в файл NOTES.INI. Эти
переменные носят глобальный характер для календарных видов с поднятым флагом Users may
override these times;
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
280
•
Users may toggle time slots on/off for each day (пользователи могут включать/выключать таймслот на каждый день). Поднятие флага ведет к тому, что во всех календарных форматах на неделю
(исключая одну рабочую неделю) в правом углу заголовка каждой конкретной даты появляется
пиктограмма , которая позволяет включать/выключать тайм-слот независимо от других дат вида.
Последняя секция Other options (дополнительные параметры) содержит единственный флаг Group
entries together by time slot (группировать строки вида по тайм-слоту). Данный флаг позволяет
группировать по тайм-слоту события, стартующие в одно время для форматов, начиная с недели
(исключая рабочую неделю).
Рис. 6.38 Воздействие флага Group entries together by time slot на календарный вид
На представленной выше картинке приведены варианты использования флага Group entries
together by time slot. На первый взгляд, различий нет, однако, если всмотреться повнимательней, то
видно, что при поднятом флаге сначала присутствует время начала (09:00), а затем идут события, а во
втором случае - просто идут события. Автор оставляет на усмотрение читателей целесообразность
использования данного флага.
6.11.2 Окно свойств столбца календарного вида
На закладке
Column Info (см. раздел 6.4.1) окна свойств календарного вида, в отличие от
обычного вида, становятся недоступными для редактирования следующие поля: Resizable, Show
responses only, Do not display title in column header и Show twistie when row is expandable. При
использовании в календарных видах столбцов, задающих цвет строкам (флаг Use value as color),
цветовая гамма будет распространяться на всю строку календарного вида, а не от цветового столбца
вправо.
Закладка
Sorting tab (см. раздел 6.4.2) также накладывает ограничения на столбцы
календарного вида. Недоступны для редактирования поля: Type, Click on header column to sort и Totals.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
281
Остальные закладки окна свойств столбца календарного вида, с точки зрения интерфейса, не
отличаются от аналогичных закладок стандартного вида.
6.11.3 Трансляция календарных видов в Web
Как уже упоминалось, календарный вид в интерфейсе браузера всегда отображается только
стандартным HTML. На странице присутствуют гипертекстовые ссылки переключения на предыдущую
(Previous Page) и последующую (Next Page) страницы, пиктограмма
, клик по которой вызывает
страницу с календарем. Разработчик может использовать в таком виде @-команду [CalendarFormat] для
переключения между разными календарными форматами. Последнего можно так же достичь
использованием в URL специального аргумента Grid=N, где N равно: 6 для 1 day, 1 - 2 day, 2 -1 week, 3 2 week, 4 - 1 month. Допустимо еще указание N равным 5, в этом случае выводится календарь на год.
Обычно совместно с параметром Grid=N указывается еще один параметр Date=dama, определяющий
первую дату в календарном виде (исключая календарь на год). Аргумент дата задается в формате YYYYMM-DD. Например, http://www.inttrust.ru/test.nsf/calend?OpenView&Grid=3&Date=2006-07-23.
По мнению автора, гораздо интересней и познавательней заняться анализом календарного вида из
БД, созданной по шаблону iNotes. Оставляю это на Ваше рассмотрение, читатель.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
282
7 Виды, оперирующие с данными DB2
В Domino Designer R 7 для БД, хранящих свои данные в формате NSFDB2, появились два новых типа
видов:
• DB2 Access view (DAV) - вид для доступа к данным Domino из DB2. Данные документов Domino в
формате NSFDB2 не представляют собой по умолчанию плоские таблицы в DB2. Это не вызывает
удивлений, т.к. Domino, по своей сути, нереляционная БД и в разных документах одной БД Domino
может быть разный набор полей. DAV же представляет собой плоский вид (view в терминах DB2), в
который специально отбираются однотипные документы Domino. Уполномоченные пользователи могут
оперировать с этими документами (читать, изменять, добавлять и удалять) как через интерфейс
Domino, так и через DB2. В обоих случаях доступ и изменения в документах Domino происходят при
посредничестве сервера Domino, а не напрямую через DB2. Вид DAV является невизуальным
объектом дизайна (как агенты или DCR);
• DB2 query view - вид для доступа к данным DB2 из Domino. Этот элемента дизайна визуален и
представляет собой вид в интерфейсе Lotus/Domino, в который документы отбираются из DB2 на
основании оператора SELECT языка SQL. В качестве источника данных для SELECT могут выступать
ранее созданный DAV вид или «федеративная» база данных DB2, не имеющая отношения к данным
Domino. Сам оператор SELECT может быть достаточно сложен и включать клаузы JOIN, UNION,
HAVING, GROUP BY и т.д.
Рассмотрим подробнее эти два типа видов.
7.1 Вид для доступа к данным Domino из DB2 - DB2 Access view (DAV)
Для создания DB2 Access view (DAV) необходимо открыть в дизайн панели Domino Designer папку
Shared Resources\DB2 Access views и воспользоваться кнопкой New DB2 Access View, размещенной в
верхней части папки DB2 Access views. Аналогичного результата можно добиться через пункт меню
Create -> Design -> DB2 Access View.
Для нормального функционирования DAV вида необходимо выполнить следующие действии:
определить свойства собственно DAV вида, создать и определить свойства столбцов DAV вида и
транслировать изменения дизайна DAV вида из Domino в DB2.
Рассмотрим приведенные действия подробнее в данной последовательности.
При создании нового DAV вида автоматически выводится его окно свойств. Для повторного открытия
окна свойств DAV необходимо воспользоваться меню Design -> DB2 Access View Properties.
Окно свойств DAV вида состоит из двух закладок. Рассмотрим их подробнее.
7.1.1
Закладка
Basics tab - основные свойства DAV вида
Basics tab (основные свойства DAV вида) имеет следующий вид:
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
283
Рис. 7.1 Закладка Basics tab окна свойств DAV
Первая секция содержит стандартные поля Name (имя) и Comment (комментарии). Последнее поле
не влияет на поведение приложения. Значение этого поля еще отображается и в одноименном столбце
папки Shared Resources\DB2 Access views.
Секция Criteria (критерий отбора) с подзаголовком Select the form(s) associated with this DB2
access view (выберите форму(ы) ассоциированные с данным DAV видом) служит для определения
критерия отбора документов Domino, которые должны попасть в DAV. Отбор базируется на формах, по
которым эти документы создаются. Секция содержит большое списочное поле, содержащее все формы
текущей БД. Разработчик может выбрать в этом поле одну или несколько форм. Кроме этого в секции
присутствует флаг All forms (все формы). Поднятие флага приводит к отбору в DAV документов,
созданных по всем присутствующим в текущей БД формам, включая документы, созданные программным
путем без поля From, и по формам, сохраняемым в документах. Используя этот флаг, разработчик должен
сам заботиться о том, чтобы во всех документах БД Domino поля, включаемые в DAV вид в качестве его
столбцов, имели один и тот же тип данных.
Секция DB2 Inserts and Updates (добавления и обновления в DB2) определяет поведение системы
при внесении изменений в документы DAV через интерфейс DB2. Секция содержит:
• флаг Compute with form on DB2 insert or update (вычислять по форме при добавлениях или
изменения через DB2). Поднятие флага позволит при вводе или изменении данных через интерфейс
DB2 выполнить формулы вычисляемых полей для документов, входящих в DAV вид. Вычисления
будут производиться по форме, определяемой в следующем поле;
• список Default form to use for DB2 inserts (форма по умолчанию, используемая при вводе через
DB2). Список, содержит все формы текущей БД. Выбор любой из форм при поднятом флаге Compute
with form on DB2 insert or update в интерфейсе DB2 приводит к выполнению формул вычисляемых
полей на основании выбранной в этом списке формы. При этом в рамках такой операции будут
вычисляться даже те поля, которые явно не входят DAV в виде столбцов.
Конкретные примеры поведения DAV вида в зависимости от его свойств будут приведены в разделе
7.2.
7.1.2
Закладка
Advanced tab - дополнительные свойства DAV вида
Advanced tab (дополнительные свойства DAV вида) имеет следующий вид:
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
284
Рис. 7.2 Закладка Advanced tab окна свойств DAV вида
Закладка содержит единственную секцию Options (параметры), в которой находятся следующие
флаги:
• Include UNID in access view (включать универсальный идентификатор документа в DAV вид).
Поднятие флага приводит к появлению в DAV виде столбца с именем #UNID. Тип данных этого
столбца (как и последующего #OID) - CHARACTER с установленным флагом BIT DATA, поэтому сами
значения не отображаются при просмотре DAV вида через интерфейс IBM DB2 Control Center. Так же
значение этого столбца напрямую нельзя отобразить в DB2 query views. Однако значения таких
столбцов можно увидеть с использованием IBM DB2 Command Line Processor и отобразить в DB2
query views с использованием встроенных функций преобразования DB2. Соответствующий пример
приведен в разделе 7.2.3;
• Include OID in access view (включать OID идентификатор документа в DAV вид). Поднятие флага
приводит к появлению в DAV виде столбца с именем #OID;
• Include modified time in access view (включать время модификации документа в DAV вид).
Поднятие флага приводит к появлению в DAV виде столбца с именем #MODIFIED, содержащего
дату/время последней модификации документа в формате приведенном к GMT;
• Normalize to GMT for time zone conversions (приводить к GMT формату). Поднятие флага
автоматически приводит все значения типа дата/время в DAV виде к формату GMT.
7.1.3
Определение столбцов DAV вида
После загрузки DAV вида в рабочую панель Domino Designer, столбцы DAV вида отображаются в
виде строк, а в верхней части рабочей панели появляются четыре кнопки, выполняющие следующие
действия:
•
Choose field (выбор поля) добавляет новый столбец в DAV вид с использованием
механизма связи существующих полей форм Domino и создаваемых полей DB2. Действие кнопки
дублируется через меню Create -> Choose field. Нажатие кнопки вызывает следующий одноименный с
кнопкой диалог:
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
285
Рис. 7.3 Диалог Choose field
В диалоге Choose field присутствуют две секции: Choose Field Selection Source (источник для
выбора поля) и Select field(s) from the List (выбор поля/ей из списка). Окончательный выбор поля для
DAV осуществляется в списочном поле второй секции. Первая секция диалога служит для формирования
списка полей второй секции. В первой секции присутствует поле Туре (тип), которое определяет поля
каких источников будут использоваться для формирования списка второй секции. Для выбора в поле Туре
представлены следующие значения:
• Аll (все). В этом случае в списке второй секции появляются поля, присутствующие в
индексе полей БД Domino плюс ряд системных полей Domino (например, Form, OriginalModTime), a
также DB2 поля федеративных данных из DB2 query views, если таковые в текущей БД имеются.
Списочное поле первой секции при выборе значения All пусто. Для завершения диалога нужно
выбрать одно или несколько полей в списке второй секции и кликнуть по кнопке ОК. Это приведет к
формированию одного или нескольких столбцов DAV вида. При выполнении этой операции не
следует забывать, что выбранные поля будут искаться в документах Domino, созданных по формам
из критерия отбора - секция Criteria закладки Basics tab окна свойств DAV вида. Поэтому выбор в
качестве столбцов DAV вида полей федеративных данных DB2 или полей Domino, которых нет в
формах из секции Criteria, приведет к тому, что эти столбцы в DAV виде будут пусты;
• Forms (формы). В этом случае списочное поле первой секции содержит список всех
доступных форм текущей БД. Выбор конкретной формы в этом поле приводит к отображению в
списке второй секции доступных полей выбранной формы. Завершение диалога аналогично
предыдущему пункту;
• Subforms (подформы). Аналогично предыдущему пункту, но в качестве источника
используются поля подформ текущей БД;
• Shared fields (общие поля). Аналогично предыдущему пункту, но в качестве источника
используются общие поля текущей БД.
•
Insert field (добавление поля) добавляет новый пустой столбец в DAV вид. В
дальнейшем можно самостоятельно в рамках свойств этого столбца определить связь полей Domino
<-> DB2. Действие кнопки дублируется через меню Create -> Insert field;
•
Save (сохранить) сохраняет DAV вид как элемент дизайна Domino. Действие кнопки
дублируется через меню File -> Save. Перед использованием сохраненного DAV вида надо выполнить
ряд процедур, которые будут описаны в разделе 7.1.5;
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
286
•
Validate (проверить) выполняет ряд проверок на предмет возможности создания
корректного DAV вида в DB2. Действие кнопки дублируется через меню Design -> Validate. Перед
выполнением операции проверки требуется сохранить DAV вид. При успешной проверке будет выдано
сообщение: «The DB2 Access View validated seccessfully.» (проверка DAV вид закончилась успешно). В
противном случае выдается сообщение об ошибке, например: «Access View definition contains duplicate
field names.» (DAV вид содержит дублирующиеся имена полей).
Для ряда операций со столбцами DAV вида в рабочей панели не предусмотрены специальные
кнопки. Удаление столбцов можно выполнить через меню Edit -> Delete, а окно свойств столбца вызвать
через Design -> DB2 Access Entry Properties.
Рассмотрим подробнее окно свойств столбца DAV вида. Оно состоит из одной закладки.
7.1.4
Закладка
Basics tab - основные свойства столбца DAV вида
Basics tab (основные свойства столбца DAV вида) имеет следующий вид:
Рис. 7.4 Закладка Basics tab окна свойств столбца DAV
Первая секция определяет трансляцию типов данных при осуществлении связи Domino <-> DB2.
Поле Field Name (имя поля) определяет имя поля из документов Domino, которое будет присутствовать в
качестве столбца значений в DAV виде. Поля Notes type (тип данных Notes) и DB2 Туре (тип данных DB2)
определяют соответствие типов данных этого столбца в Notes и DB2. Для поля Notes type допустимыми
являются следующие значения: Text (текст), Text List (текстовый список), Number (число), Number List
(числовой список), Date/Time (дата/время) и Date/Time List or Range (список значений дата/время или
диапазон дат). Значения поля DB2 Туре зависят от типа Notes type. Для Text и Text List в Notes type
можно в DB2 Туре выбрать VARCHAR (строка символов переменной длины) и LONGVARCHAR
(расширенная строка символов переменной длины); для Number - INTEGER (целое) и DOUBLE
(вещественное с плавающей точкой двойной точности); для Number List - VARCHAR, LONGVARCHAR,
INTEGER и DOUBLE; для Date/Time - DATE (дата), TIME (время) и TIMESTAMP (дата и время); для
Date/Time List or Range - VARCHAR, LONGVARCHAR, DATE, TIME и TIMESTAMP. Более подробно о
форматах данных DB2 можно узнать из книги [14],
Вторая секция определяет:
•
параметры индексирования. Флаг Create DB2 index field (создать в DB2 индекс по полю);
• параметры обработки полей с множественными значениями (Allow multiple values) Domino.
Элементы интерфейса этой части секции становятся доступными только если в поле Notes type
выбраны списочные значения (Text List, Number List и Date/Time List or Range). Список Store
multiple values as (сохранять множественные значения как) предлагает на выбор следующие
значения:
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
287
• Single value only (только единичное значение). Применение этого параметра должно
сохранять в DB2 виде только первое значение из списка Domino значений. В версии 7.0 выдает
ошибку на этапе распространения данных из Domino в DAV (Populate in DB2, см раздел 7.1.5). На
консоли сервера выводится сообщение: «Cannot save a multi-value item to a DB2 Access View
defined as 'single value only'» (не могу сохранить множественные значения как одно значение).
Подобное сообщение об ошибке можно получить через операцию (Refresh Status, см раздел
7.1.5). IBM признала данную ситуацию ошибкой;
• Delimited values (разделенные значения). Список сохраняется в одном DB2 столбце, через
разделитель, определенный в поле DB2 multivalue delimiter (разделитель множественных
значений в DB2). Если значение этого поля пусто, то в качестве разделителя в DB2 используется
символ точки с запятой «;».
Для текстовых типов значений (Text и Text List) становятся доступными:
• поле DB2 column length (длина столбца в DB2). Это значение устанавливается в качестве размера
соответствующего столбца DAV вида в DB2.
• флаг Allow truncation of Notes data (разрешить «усечение» данных Notes). Данный флаг применим
только к операции распространения данных из Domino в DAV (Populate in DB2, см раздел 7.1.5). Если
перед этой операцией реальная длина значения поля в Domino будет больше значения DB2 column
length, и флаг Allow truncation of Notes data опущен, то на этапе Populate in DB2 будет
сгенерировано состояние ошибки, которая будет выведена на консоли сервера: «Access Table field
data exceeds defined length» (превышена определенная длина для DAV поля). Поднятие флага Allow
truncation of Notes data предотвращает указанную ошибку. Обратите внимание, что процедура
«усечения» происходит только в рамках столбцов DAV вида, данные в документе Domino при этом
остаются без изменений.
7.1.5
Создание и обновление DAV вида в DB2
Создание и изменение свойств DAV вида в Domino Designer не влечет немедленной передачи этих
изменений в DB2. Для этого необходимо выполнить ряд процедур. Для этих целей в верхней части папки
Shared Resources\DB2 Access views присутствуют следующие кнопки:
•
New DB2 Access View (создание нового DAV вида). Действие этой кнопки
аналогично уже рассмотренному пункту меню пункт меню Create -> Design -> DB2 Access View. Сразу
после создания и сохранения DAV вида, как элемента дизайна Domino, он получает статус New DAV,
not yet created or populated in DB2 (новый, но не созданный в DB2 и без данных). Статус DAV
отображается в виде иконки
в первой колонке папки Shared Resources\DB2 Access views;
Create/Update in DB2 (создание/обновление в DB2). После создания и/или
•
определения/переопределения свойств DAV вида и его столбцов в Domino Designer, для
создания/переопределения в DB2 указанного DAV вида первой необходимо выполнить эту команду.
После успешного выполнения команды DAV вид приобретет статус New DAV that has been created in
DB2 (but not yet populated) (новый DAV, созданный в DB2, но не содержащий данных). Иконка,
соответствующая этому статусу
;
•
Populate in DB2 (распространение данных в DB2). Данная команда должна
выполняться сразу за Create/Update in DB2. Обратите внимание, что перенос большого объема
данных в DAV может потребовать значительного времени на выполнение операции. Операция
асинхронная и даже после ее успешного выполнения статус DAV в папке автоматически не изменится.
Для этих целей предназначена следующая команда;
•
Refresh Status (обновить статус). Обновляет иконку, отображающую статус DAV.
Помимо двух уже рассмотренных статусов существуют еще два:
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
288
•
DAV has been successfully created and populated in DB2 (DAV успешно создан и
содержит данные);
•
There is an error in the DAV (ошибка в DAV);
•
Delete in DB2 (удаление в DB2). Удаляет DAV в DB2, оставляя его как элемент
дизайна Domino.
После успешного создания DAV вида и распространения в него данных из Domino, перед
использованием DAV как через интерфейс DB2, так и в рамках DB2 query views необходимо либо
осуществить связывание пользователя Domino с пользователем DB2, либо разрешить анонимный доступ к
DAV виду (подробнее см. раздел 18.10).
7.1.6
Безопасность DAV видов
Как уже упоминалось, все операции с DAV видами идут при посредничестве сервера Domino, он же, в
первую очередь, отвечает и за безопасность представленных в DAV виде данных.
Для доступа к данным DAV вида должны выполняться следующие условия. Domino-пользователь,
ассоциированный с DВ2-пользователем, под правами которого выполняются операции с DAV:
• должен иметь доступ на сервер Domino, хранящий DAV. Эти ограничения определяются в
серверном документе;
• должен иметь доступ к БД, хранящей DAV. Эти ограничения определяются в ACL БД;
• должен быть включен в поля Readers конкретных документов, входящих в DAV.
Кроме этого сам DВ2-пользователь должен иметь доступ к БД DB2, в которой находится DAV. Все
эти ограничения будут продемонстрированы на примерах из параграфа 7.1.8.
7.1.7
DAV вид в интерфейсе DB2
Когда DAV вид в DB2 создан, то в базе данных DB2, хранящей информацию Domino, появляется вид
(view) с именем, определенным в поле Name с закладки Basics tab окна свойств DAV вида, и
находящийся в DB2-cxeмe (schema), имя которой обычно совпадает с Domino-именем текущей БД. Для
определения имени схемы можно использовать новую в Domino R 7 @-функцию - @DB2Schema. Функция
имеет два формата вызова - @DB2Schema( server: file ) или @DB2Schema( server; replicalD ). В варианте
с одним параметром сервер и имя файла БД задается в виде списка, аналогичного возвращаемому
функцией @DBName. Во втором варианте синтаксиса БД задается именем сервера - первый параметр и
идентификатором реплики - второй параметр.
В DAV виде помимо столбцов, явно добавленных разработчиком через диалоги Choose field/Insert
field (см. раздел 7.1.3), появляется столбец с именем #NOTEID, который содержит идентификатор
документа (аналог возвращаемого значения @-функцией @NotelD).
7.1.8
Примеры использования DAV
Перед выполнением примеров этого параграфа создадим следующих пользователей:
•
в Domino с именами domuser01, domuser02 и domuser03 с паролем password;
• в операционной системе для DB2 - db2user01, db2user02, db2user03 и db2user04 с паролем
password. Добавим этих пользователей в группу db2users операционной системы.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
289
Выполним операцию «связывания» (см. раздел 18.10.1) для пользователей domuser01 <-> db2user01,
domuser02 <-> db2user02, domuser03 <-> db2user03.
В рамках этого параграфа будет использоваться сквозной пример в пределах одной БД. Другими
словами, для успешного воспроизведения результатов четвертого примера необходимо сначала
выполнить задание примеров с первого по третий включительно.
Пример 1. Создадим в БД с именем DBTestDAV форму First с одним текстовым полем MyText.
Сгенерируем несколько документов по этой форме. Теперь создадим DAV вид, с критерием отбора по
форме First, и содержащий единственное поле MyText. Для DAV вида зададим имя FirstDAV. Сохраним
DAV вид и выполним для него операции Create/Update in DB2 и Populate in DB2. В ACL БД добавим
пользователя domuserOI с правами Читатель. Загрузим IBM DB2 Command Line Processor (CLP) и
выполним в нем следующие команды:
connect to DOMINO user db2user01 using password;
Этой командой мы осуществляем соединение с DB2 базой, хранящей информацию Domino БД, под
правами пользователя db2user01 с паролем password. В случае успешного соединения в окне CLP будет
выведено примерно следующее:
Database Connection Information
Database server
= DB2/NT 8.2.3
SQL authorization ID
= DB2USER0...
Local database alias
= DOMINO
Далее введем SQL-запрос, получения всех данных из DAV вида:
select * from DBTESTDAV.FIRSTDAV;
В качестве результата при успешном выполнении запроса можем получить примерно следующее:
#NOTEID
MYTEXT
306 qaz
310 wsx
2 record(s) selected.
Попробуем под правами пользователя db2user01 добавить в DAV вид новую запись следующим
SQL-оператором:
insert into DBTESTDAV.FIRSTDAV (MYTEXT) values
('NewValue') ;
В качестве результата мы должны получить сообщение об ошибке, т.к. Domino-пользователь
domuserOI, «связанный» с DВ2-пользователем db2user01, имеет в БД права Читателя. Текст сообщения
об ошибке может быть примерно следующим:
DB21034E
The command was
Command Line Processor command.
processed as an SQL statement because
During SQL processing it returned:
it was
not
a valid
SQL0723N
An error occurred in a triggered SQL statement in trigger "DBTESTDAV.IT0602".
Information returned for the error includes SQLCODE "-443", SQLSTATE "04008" and message
tokens "IF060205140704002||You are not authorized ".
SQLSTATE=09000
Пример 2. Модифицируем предыдущий пример, добавив в ACL БД пользователя domuser02 с
правами Автор и поднятыми флагами Create documents и Delete documents (см. раздел 18.5.1).
Выполним в CLP следующие команды:
connect to DOMINO user db2user02 using password;
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
290
select count(*)
from DBTESTDAV.FIRSTDAV;
insert into DBTESTDAV.FIRSTDAV
(MYTEXT)
values
('NewValue');
commit;
select count(*)
connect
from DBTESTDAV.FIRSTDAV;
reset;
connect to DOMINO user db2user02 using password;
select
count(*)
connect
reset;
from DBTESTDAV.FIRSTDAV;
Первый оператор SELECT возвратит текущее число строк в DAV виде (например, N). Оператор
INSERT возвратит сообщение: «The SQL command completed successfully» - (SQL-команда выполнена
успешно). Однако, второй и третий оператор SELECT возвратят прежнее значение числа строк в DAV виде
(в нашем случае N). При этом соответствующий документ в БД Domino появится, и его можно увидеть в
интерфейсе клиента Notes (например, в виде, отображающем все документы БД).
Другими словами, документ в БД Domino добавился, однако, в DAV виде не отобразился. Такое
поведение объясняется очень просто - указанный документ не соответствует критериям отбора DAV вида
(по форме First). При создании записи в DB2 мы не определили значения поля Form. В следующем
примере мы исправим эту ситуацию.
Перед тем как перейти к следующему примеру проверим, под правами какого пользователя был
создан новый документ. Поле $UpdatedBy содержит значение domuser02.
Пример 3. Модифицируем предыдущий пример следующим образом: в свойствах DAV вид на
закладке Basics tab поднимем флаг Compute with form on DB2 insert or update и для поля Default form
to use for DB2 inserts установим значение First. После указанных изменений сохраним DAV вид и
выполним операции Create/Update in DB2 и Populate in DB2. Теперь в CLP выполним следующие
команды:
connect to DOMINO user db2user02 using password;
select
count(*)
from DBTESTDAV.FIRSTDAV;
insert into DBTESTDAV.FIRSTDAV
(MYTEXT)
values
('NewValue');
commit;
select
count(*)
connect
reset;
from DBTESTDAV.FIRSTDAV;
connect to DOMINO user db2user02 using password;
select count(*)
from DBTESTDAV.FIRSTDAV;
connect reset;
Теперь второй и третий оператор SELECT будут возвращать значение на единицу больше, чем
первый SELECT. Другими словами, запись, добавленная через интерфейс DB2, будет видна как в
интерфейсе клиента Notes, так и в интерфейсе DB2.
Заменим оператор INSERT на:
update DBTESTDAV.FIRSTDAV set MYTEXT ='Новое значение'
where MYTEXT =
'NewValue';
Выполнение этого оператора приведет к ошибке, т.к., DВ2-пользователь db2user02 «связан» с
Domino-пользователем domuser02, имеющим права Автора, а в документе, который мы пытаемся
изменить нет полей типа Authors (см. раздел 4.3.1.7).
Пример 4. Модифицируем предыдущий пример. Добавим в ACL БД пользователя domuser03 с
правами Редактор и поднятым флагом Delete documents. В CLP выполним следующие команды:
connect to DOMINO user db2user03 using password;
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
291
select * from DBTESTDAV.FIRSTDAV;
update DBTESTDAV.FIRSTDAV set MYTEXT ='Новое значение' where MYTEXT = 'NewValue';
commit;
select * from DBTESTDAV.FIRSTDAV;
connect reset;
В результате выполнения операции UPDATE будет изменено значение поля MYTEXT на «Новое
значение» в документе, введенном в предыдущем примере.
Теперь в CLP заменим оператор UPDATE на DELETE:
connect to DOMINO user db2user03 using password;
select count(*) from DBTESTDAV.FIRSTDAV;
delete from DBTESTDAV.FIRSTDAV where MYTEXT = 'Новое значение';
commit;
select count(*) from DBTESTDAV.FIRSTDAV;
connect reset;
В результате операции документ, введенный в предыдущем примере, будет удален. Если теперь в
ACL БД у пользователя domuser03 опустить флаг Delete documents, то выполнение следующих операций
приведет к ошибке:
connect to DOMINO user db2user03 using password;
select count(*) from DBTESTDAV.FIRSTDAV;
insert into DBTESTDAV.FIRSTDAV (MYTEXT) values ('NewValue');
select count(*) from DBTESTDAV.FIRSTDAV;
delete from DBTESTDAV.FIRSTDAV where MYTEXT = 'NewValue';
commit;
select count(*) from DBTESTDAV.FIRSTDAV;
connect reset;
Пример 4. Модифицируем предыдущий пример. В форму First добавим вычисляемое (Computed)
поле MyAuthors с типом поля Authors (см. раздел 4.3.1.7) и со значением, определяемым по формуле
@UserName. Сохраним форму First, а с DAV видом никаких дополнительных действий производить не
будем. Теперь в CLP выполним следующие команды:
connect to DOMINO user db2user02 using password;
select count(*) from DBTESTDAV.FIRSTDAV;
insert into DBTESTDAV.FIRSTDAV (MYTEXT) values ('NewValue with Authors field');
commit;
select * from DBTESTDAV.FIRSTDAV;
update DBTESTDAV.FIRSTDAV set MYTEXT ='Новое значение with Authors field' where MYTEXT =
'NewValue with Authors field';
commit;
select * from DBTESTDAV.FIRSTDAV;
connect reset;
В результате выполнения операции мы увидим, что сначала в DAV виде появится новая запись, у
которой значение поля MYTEXT будет равно «NewValue with Authors field», а затем оператор UPDATE
изменит это значение на «Новое значение with Authors field». Причем, все операции были выполнены под
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
292
правами DВ2-пользователя db2user02, который «связан» с Domino-пользователем domuser02, имеющим
авторские права в изменяемом документе.
Если теперь в CLP выполнить группу операторов:
connect to DOMINO user db2user02 using password;
delete from DBTESTDAV.FIRSTDAV where MYTEXT =
connect
'Новое значение with Authors field';
reset;
то это приведет к удалению только что введенной и затем модифицированной записи. Если перед
выполнением операции у пользователя domuser02 опустить флаг Delete documents, то это приведет к
ошибке.
Из результатов этого примера можно сделать вывод, что для организации авторского доступа к
документу, входящему в DAV вид, через интерфейс DB2 не требуется явного включения в DAV вид
столбцов с полями типа Authors.
В следующем примере рассмотрим работу DAV вида с полями типа Readers (см. раздел 4.3.1.7).
Пример 5. Модифицируем предыдущий пример. В форму First добавим вычисляемое (Computed)
поле MyReaders с типом поля Readers (см. раздел 4.3.1.7) и со значением, определяемым по формуле
"[admin]" : "domusergroup". Сохраним форму First, а с DAV видом никаких дополнительных действий
производить не будем. Сделаем следующие изменения в ACL БД: добавим роль [admin] и назначим на нее
пользователя domuser03. Проверим, что пользователь domuser01 имеет права Читателя; domuser02 Автора с поднятыми флагами Create documents и Delete documents; domuser03 - Редактора с поднятым
флагом Delete documents. Теперь в CLP выполним следующие команды:
connect to DOMINO user db2user03 using password;
delete
from
DBTESTDAV.FIRSTDAV;
insert into DBTESTDAV.FIRSTDAV
(MYTEXT)
values
('NewValue by db2user03');
commit;
connect
reset;
connect to DOMINO user db2user02 using password;
insert into DBTESTDAV.FIRSTDAV
(MYTEXT)
values
('NewValue by db2user02');
commit;
connect
reset;
connect to DOMINO user db2user03 using password;
select count(*)
connect
from DBTESTDAV.FIRSTDAV;
reset;
connect to DOMINO user db2user02 using password;
select
count(*)
connect
reset;
from DBTESTDAV.FIRSTDAV;
connect to DOMINO user db2user01 using password;
select
count(*)
connect
reset;
from DBTESTDAV.FIRSTDAV;
В результате выполнения получим, что SELECT вернет:
• под правами db2user03 число записей равное двум, т.к., «связанный» пользователь domuser03
входит через роль [admin] в поле MyReaders обоих документов;
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
293
• под правами db2user02 - одну запись, т.к., «связанный» пользователь domuser02 не входит в поле
MyReaders ни одного документа. Однако, он входит в поле MyAuthors одного документа;
• под правами db2user01 - ноль записей, т.к., «связанный» пользователь domuser01 не входит ни в
поле MyReaders, ни в поле MyAuthors ни одного документа.
Изменим условие задачи. Создадим в Domino Directory сервера группу domusergroup и добавим в нее
пользователя db2user01. Теперь оператор:
connect to DOMINO user db2user01 using password;
select
count(*)
connect
reset;
from DBTESTDAV.FIRSTDAV;
вернет значение два, т.е., оба документа будут видны пользователю db2user01, потому что
«связанный» пользователь domuser01 входит через группу domusergroup в поле MyReaders обоих
документов.
Из результатов этого примера можно сделать вывод, что для организации разграничения доступа к
документам с использованием полей типа Readers, не требуется их явного включения в качестве
столбцов DAV вида.
Пример 6. Проверим механизм работы анонимного доступа к DAV виду (см. раздел 18.10.2). Для
этого
добавим
в
файл
NOTES.INI
сервера
связи
с
DB2
значение
ALLOW_ANONYMOUS_ACCESS_FROM_DB2=1. Затем в БД DBTestDAV создадим новую форму Second с
алиасами «SecAl1 | SecAI2 | SecAl». В форме определим одно числовое (именно числовое) поле с
именем MyText. Сгенерируем несколько документов по этой форме. Теперь создадим DAV вид с именем
SecondDAV и с критерием отбора по форме Second, и содержащий единственное поле MyText. Сохраним
DAV вид и выполним для него операции Create/Update in DB2 и Populate in DB2. Проверим, что в ACL БД
псевдогруппа -Default- имеет права доступа Читатель, и еще проверим, что пользователь domuser03
обладает правами Редактор. Загрузим CLP и выполним в нем следующие команды:
connect to DOMINO user db2user04 using password;
select *
connect
from DBTESTDAV.SECONDDAV;
reset;
В результате выполнения этой группы оператором мы увидим, что SELECT корректно отработал и
вернул значения ранее созданных документов по форме Second.
Если теперь в ACL БД понизить уровень доступа псевдогруппе -Default- до No Access, то повторное
выполнение той же группы операторов приведет к ошибке - «You are not authorized to perform that
operation» (вы не авторизованы для выполнения этой операции).
Добавим теперь в ACL БД элемент доступа Anonymous с правами Редактор и выполним в CLP
следующие операции:
connect to DOMINO user db2user04 using password;
insert into DBTESTDAV.SECONDDAV
(MYTEXT)
values
(777);
commit;
select *
connect
from DBTESTDAV.SECONDDAV;
reset;
Оператор INSERT выполнится нормально, и в БД Domino появится новый документ, созданный под
правами Anonymous (значение поля $UpdatedBy). Единственно новый документ в DAV виде не появляется,
но это исправляется аналогично алгоритму примера 3 (поднятием флага Compute with form on DB2 insert
or update и установкой значения Second для поля Default form to use for DB2 inserts). Теперь, если
повторить предыдущую группу операторов, то как результат - новый документ попадет в DAV вид.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
294
Попутно можно отметить, что у документа значение поля Form равно «SecAl», т.е., механизм алиасов
формы тоже корректно отработал.
Изменим ACL БД следующим образом: элементу -Default- установим права Редактор, a Anonymous Читатель, и снова повторим последнюю группу операторов. В результате оператор INSERT вернет ошибку
«You are not authorized» (вы не авторизованы).
Если теперь из ACL БД удалить элемент Anonymous, и опять выполнить группу операторов, то в БД
Domino и DAV виде появится новый документ, созданный под правами Anonymous (значение поля
$ UpdatedBy).
Последний раз выполним подобную группу операторов под правами DВ2-пользователя db2user03,
«связанного» с Domino-пользователем domuser03, имеющим права Редактора в ACL БД.
connect to DOMINO user db2user03 using password;
insert into DBTESTDAV.SECONDDAV
(MYTEXT)
values
(777);
commit;
select *
from DBTESTDAV.SECONDDAV;
connect reset;
В результате в БД Domino и DAV виде появится новый документ, созданный под правами
пользователя domuser03.
Как резюме этого примера можно отметить, что при включенном анонимном доступе к DAV видам,
операции для DВ2-пользователей, не «связанных» с Domino-пользователями, выполняются:
•
при наличии в ACL БД элемента Anonymous под его правами;
•
при отсутствии в ACL БД элемента Anonymous под правами -Default-.
Для «связанных» DВ2-пользователей его права определяются по правам соответствующего Dominoпользователя.
Пример 7. Модифицируем предыдущий пример. В форму Second добавим вычисляемое (Computed)
поле $PublicAccess со значением " 1 " . Кроме этого, в свойствах формы Second поднимем флаг Available to
Public Access users (см. раздел 4.1.7). Установим в ACL БД для пользователя domuser01 и для элемента
Anonymous права No Access с поднятыми флагами Write public documents и Read public documents.
Выполним в CLP следующие операции:
connect to DOMINO user db2user01 using password;
insert into DBTESTDAV.SECONDDAV (MYTEXT)
values
(555);
commit;
select *
connect
from DBTESTDAV.SECONDDAV;
reset;
В результате выполнения этой группы операторов в БД Domino и DAV виде появится новый
«общедоступный» документ, созданный под правами пользователя domuser01.
Если теперь в свойствах формы Second опустить флаг Available to Public Access users, то это
приведет к ошибке в момент выполнения оператора INSERT.
Выполнение операций под правами анонимного для Domino DВ2-пользователя db2user04 вызывает
тот же результат, что и под правами db2user01.
Пример 8. Создадим новый DAV вид с именем ThirdDAV, в свойствах которого поднят флаг All forms.
Определим в DAV виде два столбца:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
295
•
MyText (Notes type = Text и DB2 Type = VARCHAR);
•
Form (Notes type = Text и DB2 Type = VARCHAR). Это поле добавим через диалог Insert field.
Сохраним DAV вид и выполним для него операции Create/Update in DB2 и Populate in DB2.
Проверим, установлены ли у пользователя db2user03 в ACL БД права Редактора. Выполним теперь в CLP
следующую группу операторов:
connect to DOMINO user db2user03 using password;
select *
from DBTESTDAV.THIRDDAV;
insert into DBTESTDAV.THIRDDAV
(FORM, MYTEXT) values
('ABC,
insert into DBTESTDAV.THIRDDAV
(FORM, MYTEXT)
('SecAl',
values
'New value');
'Новое значение');
commit;
select *
connect
from DBTESTDAV.THIRDDAV;
reset;
Выполнение первого оператора SELECT продемонстрирует, что в DAV виде присутствуют
документы, созданные как по форме Second, так и по First. Оба оператора INSERT так же должны
выполниться корректно, несмотря на то, что во втором данные добавляются в форму Second (алиас
SecAl), в которой поле MyText имеет числовое (а не текстовое значение). Никакой ошибки в этом нет, т.к.
добавление записи идет без проверок по указанной форме. Второй оператор SELECT отобразит все
документы БД, включая два только что добавленных через INSERT. Для поля MyText документов, ранее
созданных по форме Second (исключая документ только что созданный последним INSERT),
отображаются пустые значения.
Установим в свойствах DAV вида флаг Compute with form on DB2 insert or update и значения
Second для поля Default form to use for DB2 inserts. Сохраним DAV вид и выполним для него операции
Create/Update in DB2 и Populate in DB2. Повторим группу операторов этого примера. Ошибки на этапе
выполнения не возникает. Две новые записи в DAV вид и БД добавляются и в этих записях теперь
присутствует поле $PublicAccess со значением " 1 " . Это связано с тем, что флаг Compute with form on DB2
insert or update и поле Default form to use for DB2 предназначены только для выполнения формул
вычисляемых полей, а не для проверок на корректность данных содержимого полей.
Пример 8. Проверим, что создание документа в Domino (не важно каким путем) вызывает
добавление соответствующей записи в DAV вид. Для этого создадим новую форму Third с полем MyText и
поднятым в свойствах формы флагом Store form in document (см. раздел 4.1.1). Создадим агента с
именем MyAgent, запускаемого по событию (On event) из меню Actions (Actions menu selection) с
триггером All documents in database (см. раздел 13.1.1) и со следующим кодом на LotusScript:
Sub
Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Set db = session.CurrentDatabase
Set doc = New NotesDocument ( db )
doc.Form =
"NewForm"
doc.MyText = "Здесь у нас текст, а не число"
Call doc.Save( True, False )
End Sub
Содержимое DAV вида будем проверять с помощью следующих операторов:
connect to DOMINO user db2user03 using password;
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
296
select * from DBTESTDAV.THIRDDAV;
connect
reset;
Создадим несколько новых документов по формам First, Second и Third. Проверим содержимое DAV
вида. Результат - новые документы появились в DAV виде. Запустим на выполнение агент MyAgent и
опять проверим содержимое DAV вида. Результат - новый документ в DAV виде появился.
Пример 9. Проверим работу DAV вида с полями, содержащими множественные значения. Для этого
создадим форму с именем Fife и содержащую поля:
•
Country - текстовое поле;
• Town - текстовое поле с поднятым флагом Allow multiple values и установленным для списков
Separate values when user enters и Display separate values with значением Semicolon (см. раздел
4.3.1.1).
Сгенерируем по форме Fife несколько документов. Создадим новый DAV вид с именем FifeDAV,
базирующийся на форме Fife, и содержащий два столбца: Country и Town. Для столбца Town в его
свойствах установим:
•
для поля Store multiple values as значение Delimited values;
• для поля DB2 multivalue delimiter значение символа запятая «,».
В свойствах DAV вида на закладке Basics tab поднимем флаг Compute with form on DB2 insert or
update и установим для поля Default form to use for DB2 inserts значение Fife. Сохраним DAV вид и
выполним для него операции Create/Update in DB2 и Populate in DB2.
Проверим, установлены ли у пользователя db2user03 в ACL БД права Редактора. Выполним теперь
следующую группу операторов:
connect to DOMINO user db2user03 using password;
select * from DBTESTDAV.FIFEDAV;
insert into DBTESTDAV.FIFEDAV (COUNTRY, TOWN) values ('Япония', 'Токио;Осака');
commit;
select * from DBTESTDAV.FIFEDAV;
connect
reset;
Выполнение первого оператора SELECT отобразит ранее введенные по форме Fife документы,
причем, множественные значения столбца Town будут разделены запятыми. Оператора INSERT должен
корректно выполниться, и второй SELECT добавит к ранее введенным документам новый, у которого в
столбце Country лежит значение «Япония», а в столбце Town - «Токио;Осака». Если теперь посмотреть
свойства этого документа в клиенте Notes, то будет видно, что в поле Town находятся два значения:
«Токио» и «Осака».
7.2 Вид для доступа к данным DB2 из Domino - DB2 query view
Создание нового DB2 query view осуществляется в рамках диалога создания обычного Domino вида
(см. Рис. 6.1). В диалоге Create view (создание вида) необходимо выбрать радиокнопку By SQL Query (пo
SQL запросу) и в поле, расположенном под радиокнопками, определить сам SQL запрос.
Значение в поле для задания SQL запроса определяется на языке @-формул, или, другими словами,
если SQL запрос статичен, то его содержимое должно быть представлено как строковый литерал.
Например, {select * from DBTESTDAV.FIRSTDAV}. Перед сохранением DB2 query view значение его SQL
запроса должно быть определено. В противном случае выдается предупреждение: «You must specify an
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
297
SQL Query Formula» (вы должны определить формулу SQL запроса). Следует обратить внимание, что
после создания DB2 query view изменить его тип на обычный Domino вид нельзя.
После создания DB2 query view в его объектно-событийной панели появляется новый объект SQL
Query, который и содержит SQL запрос этого DB2 query view. Разработчик может изменить значение этого
запроса. В остальном, свойства и внешний вид DB2 query view и его столбцов мало отличаются от
обычного Domino вид, созданного с использованием радиокнопок Simple Search и By Formula. Подробнее
эти отличия будут рассмотрены позднее в разделе 7.2.2).
Пример. Создадим DB2 query view с именем FirstDQV на основании DAV вида из примера 1 раздела
7.1.8. Зададим для объекта SQL Query значение {select * from DBTESTDAV.FIRSTDAV}. Для первого и
единственного столбца DB2 query view определим формулу MyText. Сохраним и откроем вид FirstDQV в
клиенте Notes. Как результат - будут отображены записи из DAV вида в интерфейсе обычного Domino
вида.
7.2.1
Правила формирования DB2 query view
DB2 query view не имеет индекса вида. Его оператор SELECT из SQL Query отрабатывает в момент
открытия и обновления вида, и на такие виды не воздействуют серверные задачи UPDATE и UPDALL. С
одной стороны это приводит к уменьшению физического размера БД, а с другой - к необходимости в ряде
случаев принудительно обновлять вид для актуализации отображаемой в нем информации.
В рамках DB2 query view могут отображаться данные из DAV видов Domino, а также «федеративных»
данных DB2, которые не являются данными сервера Domino. Можно также комбинировать в одном DB2
query view данные двух таких типов источников.
В формуле SQL Query допускается использовать @-функции, осуществляющие диалог с
пользователем. Например, @Prompt. Таким образом, можно строить параметризованные SQL-запросы
или вообще полностью переопределять оператор SELECT из SQL Query.
Сам оператор SELECT из SQL Query может быть достаточно сложен и включать в себя клаузы:
ORDER BY, GROUP BY, HAVING, JOIN, UNION. На использование клаузы: ORDER BY накладываются
определенные ограничения. Во-первых, данная клауза корректно работает только, если в возвращаемом
значении оператора SELECT не присутствует столбец #NOTEID. В этом случае возвращаемый результат
(независимо от присутствия ORDER BY) сортируется по содержимому столбца #NOTEID. Во-вторых,
сортировки в рамках DB2 query view, так же как и обычного Domino вида, могут быть определены в рамках
свойств столбцов вида. Клауза UNION в текущих версиях (7.0 - 7.0.1) работает с ошибками.
Правила именования полей в Domino и столбцов DВ2-таблицах различаются. Например, в DB2 имя
столбца может начинаться с цифры. Если такой столбец будет присутствовать в возвращаемом значении
оператора SELECT из SQL Query, то это приведет к ошибке: «Field names must begin with a letter or the
symbol _ and $ and . The rest of the name may contain the letters A-Z, the digits 0-9, or the symbols _ and $ and
. Spaces are not allowed.» (Имена полей должны начинаться с буквы или символов подчеркивания,
доллара и точки. Оставшаяся часть имени может содержать буквы от А до Z, цифры от 0 до 9 или
символы подчеркивания, доллара и точки. Пробелы недопустимы.). Для предотвращения такой ошибки
необходимо в операторе SELECT из SQL Query для таких столбцов указать алиас. Соответствующий
пример приведен в разделе 7.2.3.
Попытка открытия записи на чтение/просмотр/редактирование в DB2 query view будет успешной
только при наличии в возвращаемом значении оператора SELECT из SQL Query столбца #NOTEID,
содержащего идентификатор документа (аналог возвращаемого @-функцией @NotelD). В противном
случае выдается сообщение: «This note cannot be opened/previewed because there is no document
associated with federated data» (Эта запись не может быть открыта или отображена в панели
предварительного просмотра потому, что нет документа, ассоциированного с федеративными данными).
Точно такое же сообщение появится, если в возвращаемом значении оператора SELECT столбец
#NOTEID присутствует, но имеет алиас. В столбце #NOTEID должны содержаться значения
идентификаторов документов, присутствующих в текущей БД. В противном случае выдается
предупреждающее сообщение. В общем случае столбец #NOTEID может содержать даже
идентификаторы записей элементов дизайна (про это указано в «Справке дизайнера»), однако
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
298
корректность работы приложения в этом случае производитель не гарантирует. Кроме этого, для
корректного отображения DB2 query view со столбцом #NOTEID, этот столбец должен содержать
уникальные значения. В противном случае для повторяющихся значений будет выведена только одна
строка в клиенте Notes. Соответствующие примеры использования столбца #NOTEID приведены в
разделе 7.2.3.
Операции ввода, изменения и удаления записей в DB2 query view через клиент Notes предназначены
для случая, когда в качестве источника данных используется информация из DAV видов. Данные
«федеративных» таблиц DB2, входящих в DB2 query view, модификации напрямую через клиент Notes не
подлежат, однако такая информация может изменяться посредством интерфейсов DB2.
При операциях ввода и изменение записи в DB2 query view через клиент Notes происходит
автоматическое повторное выполнение оператора SELECT из SQL Query. Аналогичные действия через
интерфейс DB2 требуют обновления информации вида в клиенте Notes. В тестовых примерах было
достаточно применения F9 (в «Справке Дизайнера» рекомендуется применять Shift-F9). Удаление
записей в DB2 query view в обоих случаях (клиент Notes/интерфейс DB2) требует обновления вида.
По умолчанию оператор SELECT из SQL Query возвращает первые 500 строк результирующей
таблицы. В NOTES.INI сервера за этот процесс отвечает переменная DB2QueryViewRowLimit. Формат:
DB2QueryViewRowLimit=0
снимает ограничения на возвращаемое число строк в DB2 query view. Любое положительное число,
заданное в качестве значения DB2QueryViewRowLimit, устанавливает максимальное число возвращаемых
записей оператором SELECT по умолчанию. Кроме этого разработчик может воздействовать на
максимальное число возвращаемых записей в конкретном DB2 query view в свойствах вида, через флаг и
одноименное поле Maximum rows returned by a SQL query с закладки Options (см. раздел 6.3.2). Когда
установлены оба параметра, то серверное значение обладает большим приоритетом, или, другими
словами, с помощью Maximum rows returned by a SQL query можно только еще сократить (но не
увеличить) максимальное число возвращаемых записей. Если установлено хотя бы одно ограничение, то
при открытии/обновлении DB2 query view это значение отображается в строке состояния клиента Notes.
Далее идет информация, полученная из личного опыта и дополнительных источников:
• в формулах столбцов DB2 query view нельзя обращаться к полям или свойствам документа, даже
если DB2 query view основан на DAV виде. Возвращаемые значения при этом некорректны
(проверялось с функциями @Text(@DocumentUniquelD),
@Created,
@Author).
Допускается
использовать только информацию из столбцов, возвращаемых оператором SELECT;
• формула View Selection, которая также присутствует в DB2 query view, значительно мягче относится
к значению полей документа при условии, что DB2 query view создан на основе DAV вида.
Проверялось на полях, которые явно в DAV вид не входили. Например, SELECT Form = "First". При
этом View Selection отрабатывал и накладывал на возвращаемое значение SQL оператора
дополнительный фильтр. Применение свойств документа (проверялось на @Created, @Author)
результата не принесли;
• не допускается использовать DB2 query view в Web-приложениях. В этом случае на консоли сервера
выдается сообщение: «This function is not implemented on this version of the server» (эта функция не
реализована в этой версии сервера). IBM сообщил о исправлении такой ситуации в будущих версиях
7-го релиза;
• по информации из столбцов DB2 query view не работают функции @DbColumn и @DbLookUp. Также
выдается сообщение: «This function is not implemented on this version of the server».
7.2.2
Особые свойства и настройки для DB2 query view
Вернемся к диалогу создания DB2 query view (см. Рис. 6.1). В этом диалоге при выборе радиокнопки
By SQL Query в поле View type (тип вида) остаются только значения Shared (общий) и Private (личный).
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
299
Т.е., DB2 query view может иметь тип только общий или личный. Личный также как и для обычного Domino
вида предназначен для использования только его владельцем.
Как уже упоминалось, у DB2 query view в объектно-событийной модели появляется объект SQL
Query, определяющий SQL запрос DB2 query view.
В свойствах DB2 query view на закладке Options (см. раздел 6.3.2):
• появляются флаг и одноименное поле Maximum rows returned by a SQL query (максимальное
число строк, возвращаемое SQL запросом). Функциональность этих элементов дизайна рассмотрена в
предыдущем параграфе;
•
становится недоступным флаг Create new documents at view level.
В свойствах столбца DB2 query view на закладке Column Info (см. раздел 6.4.1) становится
недоступным флаг Show responses only.
Остальные свойства как самого DB2 query view, так и его столбцов не отличаются от обычного
Domino вида.
7.2.3
Примеры использования DB2 query views
Пример 1. Необходимо в рамках DB2 query view отобразить данные из DAV вида таким образом,
чтобы один из столбцов DB2 query view выводил значение аналогичное @Text(@DocumentUniquelD). Для
этого в свойствах DAV вида с именем THIRDDAV на закладке Advanced tab поднимаем флаг Include UNID
in access view (см раздел 7.1.2). Напомним, что при этом в DAV виде Domino появляется столбец #UNID с
бинарными данными, содержащими UNID документа. Причем, эти данные напрямую в DB2 query view не
отображаются и байты UNID лежат в столбце #UNID в порядке отличном от возвращаемого значения
функции @DocumentUniquelD. Для возможности отображения данных из #UNID в DB2 query view
необходимо выполнить преобразования данных средствами DB2 в рамках объекта SQL Query. В качестве
одного из таких вариантов для SQL Query может быть определена следующая формула:
"select HEX(CONCAT(SUBSTR(#UNID, 8, 1), CONCAT(SUBSTR(#UNID, 7, 1), CONCAT(SUBSTR(#UNID,
6, 1), CONCAT(SUBSTR(#UNID, 5, 1), CONCAT(SUBSTR(#UNID, 4, 1), CONCAT(SUBSTR(#UNID, 3, 1) ,
CONCAT(SUBSTR(#UNID, 2, 1), CONCAT(SUBSTR(#UNID, 1, 1), CONCAT(SUBSTR(#UNID, 16, 1) ,
CONCAT(SUBSTR(#UNID, 15, 1), CONCAT(SUBSTR (#UNID, 14, 1), CONCAT(SUBSTR(#UNID, 13, 1) ,
CONCAT(SUBSTR(#UNID, 12, 1), CONCAT(SUBSTR (#UNID, 11, 1), CONCAT(SUBSTR(#UNID, 10, 1) ,
SUBSTR(#UNID, 9, 1))))))))))))))))) MyUNID from " + @Db2Schema(@DbName) + ".THIRDDAV" ,
а для формулы столбца, выводящего значение UNID, в этом случае стоит использовать формулу
«MyUNID».
Пример 2. Скопируем из тестовой базы DB2 с именем SAMPLE таблицу DEPARTMENT в базу DB2,
хранящую информацию сервера Domino (см. раздел 18.11.1). Создадим DB2 query view с именем Dept и со
следующей формулой для SQL Query:
{select * from DB2ADMIN.DEPARTMENT}
Определим в DB2 query view два столбца с формулами: deptno и deptname. Сохраним и откроем DB2
query view в клиенте Notes. Как результат - в виде будут отображаться код и название отделов по
информации из таблицы DEPARTMENT. Попытка открытия документа (двойной клик по строке вида) в DB2
query view приводит к ожидаемой ошибке: «This note cannot be opened/previewed because there is no
document associated with federated data». Это происходит потому, что в рамках DB2 query view попытка
открытия чисто «федеративных» данных без #NOTEID приводит к такой ошибке.
Пример 3. Модифицируем предыдущий пример. Добавим в DВ2-таблицу DEPARTMENT столбец
#NOTEID и присвоим ему в качестве значения минимальный идентификатор документа из DAV вида
THIRDDAV:
connect to DOMINO user db2user03 using password;
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
300
alter table DB2ADMIN.DEPARTMENT add column #NOTEID INTEGER;
update DB2ADMIN.DEPARTMENT set #NOTEID =
(select MIN(#NOTEID)
from DBTESTDAV.THIRDDAV) ;
commit;
connect reset;
Откроем Dept вид в клиенте Notes и увидим, что в нем стала отображаться только одна запись из
таблицы DEPARTMENT. Т.е., Domino при выводе удаляет дублирующиеся в рамках столбца #NOTEID
записи. Тем не менее, двойной клик по этой единственной в Dept виде записи открывает документ в
режиме чтения.
Пример 4. Модифицируем предыдущий пример. Откроем в IBM DB2 Control Center таблицу
DEPARTMENT и внесем в столбец #NOTEID уникальные значения. Например, на основании DAV вида
THIRDDAV. Теперь при открытии в клиенте Notes вида Dept отображаются все записи таблицы
DEPARTMENT, и также все они отрываются на чтение/просмотр/редактирование.
Создадим в Domino Designer элемент дизайна типа страница (Page). Сохраним эту страницу и
обратимся к окну ее свойств как элемента дизайна верхнего уровня (см. раздел 3.1). На закладке
Document IDs будет представлен идентификатор этой страницы. Например, NT000005E6. Отбросив
префикс «NT», переведем оставшуюся часть идентификатора в десятичный формат и получившееся
число внесем в одну из записей таблицы DEPARTMENT в столбец #NOTEID. Например, NT000005E6 ->
000005Е6 -> 1510. Откроем теперь эту запись в клиенте Notes в виде Dept. Результат - отрывается
созданная нами страница. Единственное замечание - не следует использовать указанный механизм в
реальных приложениях.
Теперь, встанем в виде Dept на запись, у которой в #NOTEID лежит идентификатор документа (а не
страницы), запомним это значение, и удалим эту запись, последовательно нажав клавиши Delete и F9.
После выполнения этой операции в самом виде Dept запись о соответствующем отделе осталась. В
таблице DEPARTMENT запись также присутствует, но если перейти в DAV вид THIRDDAV и попробовать
найти запись с соответствующим #NOTEID, то эта попытка закончится неуспехом - запись из DAV вид
THIRDDAV удалилась.
Пример 5. Модифицируем предыдущий пример. Добавим через в DВ2-таблицу DEPARTMENT
столбец с именем "4YOU" с помощью команды:
CONNECT TO DOMINO USER db2user03 USING password;
ALTER TABLE DB2ADMIN.DEPARTMENT ADD COLUMN "4YOU" VARCHAR (10)
;
UPDATE DB2ADMIN.DEPARTMENT SET "4YOU" = '123';
COMMIT;
CONNECT RESET;
Теперь если опять обратиться в клиенте Notes к созданному в предыдущем примере DB2 query view,
то это приведет к ожидаемой ошибке: «Field names must begin with a letter or the symbol _ and $ and . The
rest of the name may contain the letters A-Z, the digits 0-9, or the symbols _ and $ and . Spaces are not
allowed». Последнее вызвано присутствием в возвращаемом оператором SELECT значении, содержащем
недопустимое, с точки зрения Domino, поле - "4YOU".
Для исправления ситуации изменим формулу SQL Query следующим образом:
{select deptno,
deptname,
"4YOU" myforyou from DB2ADMIN.DEPARTMENT}
Добавим в DB2 query view столбец с формулой myforyou. Теперь открытие вида в клиенте Notes
происходит корректно.
Пример 5. «Федерализируем» таблицу EMPLOYEE из базы SAMPLE в базу DOMINO (см. раздел
18.11.2). Создадим DB2 query view с именем Emp и со следующей формулой для SQL Query:
{select
a.FIRSTNME
myfn,
a.LASTNAME
myln,
a.JOB
myjob,
b.DEPTNAME
DB2ADMIN.EMPLOYEE a, DB2ADMIN.DEPARTMENT b where a.WORKDEPT=b.DEPTNO}
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
mydept
from
301
Определим в DB2 query view следующие столбцы:
•
первый категоризованный столбец с формулой - mydept;
•
второй категоризованный столбец с формулой - myjob;
• третий столбец с формулой - myfn + "" + myln.
Сохраним и откроем DB2 query view в клиенте Notes. Как результат - в виде будут отображаться
категоризованные столбцы с названием отдела и должностью, а также некатегоризованный столбец с
полным именем сотрудника.
Обратите внимание, что оператор SELECT отбирает информацию из двух связанных баз данных, и
при обработке и отображении информации активно используются алиасы как для таблиц, так и для
колонок.
Пример 6. При попытке двойного клика по строке вида из предыдущего примера будет выведено
сообщение об ошибке, т.к., данные в виде чисто федеративные. Модифицируем предыдущий пример так,
чтобы информация из строк вида могла отображаться в форме. Для этого создадим новую форму с
именем Fourth, содержащую следующие поля:
•
редактируемое, текстовое с именем MyEmpNo;
•
вычисляемое для показа, текстовое с именем MyNAME и формулой MyNAME;
•
вычисляемое для показа, текстовое с именем MyJob и формулой MyJob;
•
вычисляемое для показа, текстовое с именем MyDept и формулой MyDept.
Для объекта QueryOpen зададим следующий код на LotusScript:
Sub Queryopen(Source As
As Variant)
Notesuidocument,
Mode As
Integer,
Isnewdoc As Variant,
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim vc As NotesViewEntryCollection
Dim entry As NotesViewEntry
Dim doc As NotesDocument
Set doc = Source.Document
Set db = session.CurrentDatabase
Set view = db.GetView("Emp")
Set vc = view.AllEntries
For i = 1 To vc.Count
Set entry = vc.GetNthEntry(i)
If entry.ColumnValues(3) = doc.MyEmpNo(0) Then
doc.MyName = entry.ColumnValues(2)
doc.MyJob = entry.ColumnValues(1)
doc.MyDept = entry.ColumnValues(0)
Exit For
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
Continue
302
End If
Next
End Sub
Теперь, на основании формы Fourth, создадим DAV вид с именем FourDAV, с единственным полем
MyEmpNo и установленными свойствами: поднятый флаг Compute with form on DB2 insert or update и
значение Fourth для поля Default form to use for DB2 inserts. После этого наполним DAV вид с именем
FourDAV ОВ2-записями, содержащими коды всех сотрудников по «федерализированной» таблице
EMPLOYEE. Для этого в CLP выполним следующую группу операторов:
connect to DOMINO user db2user03 using password;
insert into DBTESTDAV.FOURDAV
(MYEMPNO)
select EMPNO from DB2ADMIN.EMPLOYEE;
commit;
connect reset;
Модифицируем теперь вид Emp из предыдущего примера. Для этого изменим его формулу SQL
Query:
{select a.FIRSTNME myfn, a.LASTNAME myln, a.JOB myjob, b.DEPTNAME mydept , c.#noteid,
a.EMPNO eno
from DB2ADMIN.EMPLOYEE a, DB2ADMIN.DEPARTMENT b,
} + @Db2Schema(@DbName)
+{.FOURDAV с where a.WORKDEPT=b.DEPTNO AND с.MYEMPNO = a.EMPNO}
Кроме этого, добавим в Emp вид четвертый скрытый столбец с формулой еnо. Теперь при двойном
клике на строке вида Emp, не являющейся категорией, будет открываться форма Fourth, отображающая:
•
код сотрудника в поле MyEmpNo;
•
полное имя сотрудника в поле MyNAME;
• должность сотрудника в поле MyJob;
•
название отдела сотрудника в поле MyDept.
Пример требует некоторых пояснений. Во-первых, добавив в возвращаемое значение оператора
SELECT из SQL Query значение #NOTEID, была предотвращена ошибка: «This note cannot be
opened/previewed because there is no document associated with federated data». Во-вторых, при открытии
формы в обработчике события QueryOpen собирается коллекция всех строк вида Emp через объект
NotesViewEntryCollection. Далее в этой коллекции ищется строка, у которой значение четвертого столбца
совпадает со значением поля MyEmpNo текущего документа. Как только такая строка найдена, значение
из первого столбца выводится в поле MyDept, из второго - в поле MyJob и из третьего - в поле MyName.
Пример 7. Модифицируем предыдущий пример. Сделаем оператор SELECT в объекте SQL Query
параметризованным:
chdept := @Prompt([OkCancelList]; "Выбор"; "Выберите отдел";
"INFORMATION CENTER" : "ADMINISTRATION SYSTEMS" : "SOFTWARE SUPPORT");
"INFORMATION
CENTER";
"select a.FIRSTNME myfn, a.LASTNAME myln, a.JOB myjob, b.DEPTNAME mydept , c.#noteid,
a.EMPNO eno
from DB2ADMIN.EMPLOYEE a, DB2ADMIN.DEPARTMENT b,
" + @DB2Schema(@DbName)
+".FOURDAV с
where a.WORKDEPT = b.DEPTNO AND c.MYEMPNO = a.EMPNO AND b.DEPTNAME
= '" +
chdept +"'"
Теперь при обращении к виду Emp будет сначала запрашиваться название отдела, а затем
выводиться информация о сотрудниках только этого выбранного отдела.
Пример 8. Создадим новый DB2 query view вид с именем Еmр1 и со следующей формулой для SQL
Query:
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
303
"select a.FIRSTNME myfn, a.LASTNAME myln, a.JOB myjob, b.DEPTNAME mydept , c.#noteid
mynoteid,
a.EMPNO
eno
from
DB2ADMIN.EMPLOYEE
a,
DB2ADMIN.DEPARTMENT
b,
"
+
@DB2Schema(@DbName) +".FOURDAV с where a.WORKDEPT=b.DEPTNO AND c.MYEMPNO = a.EMPNO"
Определим в DB2 query view столбцы все без сортировок и категоризации (т.е., значение Sort с
закладки Sorting свойств столбца установлено в None) со следующими формулами:
•
первый столбец с формулой - mydept;
•
второй столбец с формулой - myjob;
• третий столбец с формулой - myfn + "" + myln;
•
четвертый столбец с формулой - mynoteid.
Откроем вид Еmр1 в клиенте Notes. При попытке двойного клика по строке вида выдается ошибка:
«This note cannot be opened/previewed because there is no document associated with federated data». Это
происходит потому, что клиент Notes не воспринимает за идентификатор ноты значение с алиасом. Для
исправления ситуации изменим значение формулы SQL Query:
"select a.FIRSTNME myfn, a.LASTNAME myln, a.JOB myjob, b.DEPTNAME mydept , c.#noteid
mynoteid, c.#noteid, a.EMPNO eno
from DB2ADMIN.EMPLOYEE a, DB2ADMIN.DEPARTMENT b, " +
@DB2Schema(@DbName) +".FOURDAV с where a.WORKDEPT=b.DEPTNO AND c.MYEMPNO = a.EMPNO"
Теперь при двойном клике на строке вида в клиенте Notes выводится форма Fourth со значениями
текущей строки вида.
Изменим опять формулу SQL Query, добавив в нее сортировки средствами SQL:
"select a.FIRSTNME myfn, a.LASTNAME myln, a.JOB myjob, b.DEPTNAME mydept , c.#noteid
mynoteid, c.tnoteid, a.EMPNO eno
from DB2ADMIN.EMPLOYEE a, DB2ADMIN.DEPARTMENT b, " +
@DB2Schema(@DbName) +".FOURDAV с
where a.WORKDEPT=b.DEPTNO AND c.MYEMPNO = a.EMPNO order by
myjob, mydept, myfn"
Согласно этой формуле, возвращаемое значение должно быть отсортировано сначала по
должности, затем по названию отдела и, наконец, по имени сотрудника. Однако при просмотре в клиенте
Notes этого не происходит. Это вызвано тем, что в возвращаемом оператором SELECT значении
присутствует значение #NOTEID. Еще раз изменим формулу SQL Query:
"select a.FIRSTNME myfn, a.LASTNAME myln, a.JOB myjob, b.DEPTNAME mydept , a.EMPNO eno
from DB2ADMIN.EMPLOYEE a, DB2ADMIN.DEPARTMENT b, " + @DB2Schema(SDbName) +".FOURDAV с where
a.WORKDEPT=b.DEPTNO AND c.MYEMPNO = a.EMPNO order by myjob, mydept, myfn"
Теперь строки вида в клиенте Notes отсортированы сначала по должности, затем по названию
отдела и, наконец, по имени сотрудника.
Пример 9. Проверим работу в рамках DB2 query view клауз GROUP BY и HAVING. Для этого
создадим новый DB2 query view вид с именем Еmр2 и со следующей формулой для SQL Query:
"select
b.DEPTNAME
mydept
,
SUM(a.SALARY)
sal
from
DB2ADMIN.EMPLOYEE
DB2ADMIN.DEPARTMENT b where a.WORKDEPT = b.DEPTNO group by b.DEPTNAME order by mydept"
a,
Определим в DB2 query view столбцы со следующими формулами:
•
первый столбец с формулой - mydept;
• второй столбец с формулой - sal.
При открытии вида в клиенте Notes отображаются строки, содержащие название отдела и
суммарную зарплату по отделу.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
304
Изменим условие задачи. Удалим из возвращаемого оператором SELECT значения строки с
отделами, суммарная зарплата которых меньше 100 000. Для этого изменим формулу SQL Query
следующим образом:
"select
b.DEPTNAME
mydept
,
SUM(a.SALARY)
sal
from
DB2ADMIN.EMPLOYEE
a,
DB2ADMIN.DEPARTMENT b where a.WORKDEPT = b.DEPTNO group by b.DEPTNAME having SUM(a.SALARY) >
100000 order by mydept"
Пример 10. Проверим работу в рамках DB2 query view клаузы UNION. Для этого модифицируем DB2
query view вид Emp1, указав для SQL Query следующую формулу:
"select a.FIRSTNME myfn, a.LASTNAME myln, a.JOB myjob, b.DEPTNAME mydept , a.SALARY sal
from DB2ADMIN.EMPLOYEE a, DB2ADMIN.DEPARTMENT b where a.WORKDEPT=b.DEPTNO AND a.SALARY >
25000
union
select a.FIRSTNME myfn, a.LASTNAME myln, a.JOB myjob, b.DEPTNAME mydept , a.SALARY sal
from DB2ADMIN.EMPLOYEE a,
DB2ADMIN.DEPARTMENT b where a.WORKDEPT=b.DEPTNO AND a.JOB =
'DESIGNER'"
В клиенте Notes в рамках DB2 query view отображается 18 записей, а в IBM Control Center - 23
записи. IBM признало это ошибкой и обещало исправить в версии 7.0.2.
Пример 11. Проверим работу в рамках DB2 query view клаузы JOIN. Для этого модифицируем DB2
query view вид Emp2, указав для SQL Query следующую формулу:
"select
b.DEPTNAME
mydept
,
SUM(a.SALARY)
sal
from DB2ADMIN.EMPLOYEE
a
join
DB2ADMIN.DEPARTMENT Ь on a.WORKDEPT = b.DEPTNO group by b.DEPTNAME having SUM(a.SALARY) >
100000 order by mydept"
Обращение к виду в клиенте Notes выдаст тот же результат, что и в IBM Control Center.
Пример 12. Создадим DB2 query view с именем MyThirdDav на основании DAV вида THIRDDAV и со
следующей формулой для SQL Query:
"select * from " + @DB2Schema(@DbName) +".THIRDDAV"
Определим в DB2 query view столбцы со следующими формулами:
•
первый столбец с формулой - @DocNumber;
•
второй столбец с формулой - Form.
Создадим в MyThirdDav акцию вида со следующим кодом на LotusScript:
Sub Click(Source As Button)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Set db = session.CurrentDatabase
Dim doc As NotesDocument
For i = 1 To 600
Set doc = New NotesDocument ( db )
doc.Form = "SecAl"
doc.MyText = Cstr(i)
Call doc.Save( True, False )
Next
Set view = db.GetView( "MyThirdDav" )
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
305
Call
view.Refresh
End Sub
Указанный код должен создать и сохранить в текущей БД 600 документов и, после этого, обновить
индекс вида как объекта «заднего плана» (back-end).
Откроем вид в клиенте Notes. Перед выполнением операции никаких специальных настроек на
сервере не выполнялось, т.е., число возвращаемых строк DB2 query view установлено по умолчанию и
равно 500. Выполним созданную акцию вида. По завершении операции новые документы автоматически в
виде не появятся, и требуется нажатие F9. Теперь документы появились - и их отображается только 500.
Попутно было выяснено, что метод view. Refresh на DB2 query view не действует.
Установим значение серверной переменной DB2QueryViewRowLimit=0, отвечающей за максимальное
число возвращаемых значений в DB2 query view (значение 0 указывает на вывод без ограничений). Кроме
этого, еще заменим в коде акции две строки с:
Set view = db.GetView ( "MyThirdDav" )
Call
view.Refresh
на
Dim workspace As New NotesUIWorkspace
Call
workspace.ViewRefresh
Установка значения серверной переменной DB2QueryViewRowLimit и нажатие F9 приведет к выводу
всех документов DB2 query view.
Повторно выполним акцию вида. Содержимое вида опять автоматически не обновилось. Вывод:
метод workspace.ViewRefresh так же не применим в контексте DB2 query view. Изменим в коде акции
строку с:
Call
workspace.ViewRefresh
на
Call
workspace.ViewRebuild
Повторное применение акции приведет к автоматическому обновлению содержимого DB2 query view.
Теперь в свойствах вида на закладке Options поднимем флаг Maximum rows returned by a SQL
query (см. раздел 7.2.2) и установим напротив него значение - 30. Обновим вид по клавише F9. Теперь
отображается только 30 документов.
Пример 13. Проверим работу механизма редактирования «по месту» для DB2 query view,
базирующегося на DAV виде. Для этого модифицируем предыдущий пример. Добавим в MyThirdDav вид
третий столбец с формулой - MyText. Установим у этого столбца свойство Editable column (см. раздел
6.4.1). Далее для объекта InViewEdit из объектно-событийной панели определим следующий код:
Sub Inviewedit(Source As Notesuiview, Requesttype
Columnvalue As Variant, Continue As Variant)
As
Integer,
Colprogname
As
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim caret As String
Dim i As Integer
caret =
Source.CaretNoteID
'noteID
текущего документа
Set db - Source.View.Parent
If (caret <> "0") Then
Set doc =
db.GetDocumentByID(caret)
'получили текущий документ в виде
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
Variant,
306
End If
If Requesttype = 3 Then 'сохранение
For i = Lbound(Colprogname)
Call
To Ubound(Colprogname)
doc.ReplaceItemValue(Colprogname(i),
Call doc.Save( True,
False, True )
Columnvalue(i))
'сохраняем измененный документ
Next
End If
End Sub
Проверка в клиенте Notes демонстрирует, что редактирование «по месту» корректно работает для
DB2 query view, базирующемся на DAV виде.
Пример 14. Проверим работу DB2 query view, базирующегося на DAV виде, в который отбираются
документы с полями, имеющими множественными значениями (Allow multiple values). Для этого
создадим новый DB2 query view с именем MyFifeDAV, который будет базироваться на DAV виде FifeDAV из
раздела 7.1.8. Укажем для SQL Query вида MyFifeDAV следующую формулу:
{select * from ) + @DB2Schema(@DbName) +".FIFEDAV"
Определим в виде MyFifeDAV два столбца:
•
первый по формуле Country с категоризацией;
• второй по формуле @Explode(Town; ";") с сортировкой по возрастанию (Sort равно Ascending) и
поднятым флагом Show multiple values as separate entries (см. раздел 6.4.2).
При открытии вида в клиенте Notes в первом столбце будут отображаться значения названия стран
как категорий, а во втором - названия городов с сортировкой по возрастанию, и каждый город на новой
строчке.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
307
8 Проектирование папок - folder
Папки (folder), так же как и виды, предназначены для отображения документов в табличной форме. С
точки зрения интерфейса, папка, как элемент дизайна, а также ее составляющие (столбцы, акции и т.д.)
практически не отличаются от видов. Отличия возникают на уровне набора отображаемых в виде и папке
документов. Если у вида за это отвечает формула отбора (View Selection), то у папки такого объекта в
объектно-событийной панели нет. Сразу после своего создания в папке документы отсутствуют, однако, в
любой момент времени можно добавить документ в папку как программным путем, так и методом
drag&drop. После того как документ появился в папке, его можно из папки удалить, переместить или
скопировать в другую папку.
Domino/Notes для своих нужд часто использует предопределенные папки. Наиболее
распространенная из них - это папка с именем «($Trash)», которая представляет собой «мусорную
корзину», или, другими словами, папку, содержащую документы, помеченные к удалению. Создание такой
папки в своих приложениях позволяет определенным образом расширить функциональность приложения.
По крайней мере, после появления этой папки в БД, отметки об удалении не пропадают после выхода из
БД (хотя это не самое главное).
В прикладных приложениях папки также широко используются. Можно, например, программным
способом «складывать» туда документы, удовлетворяющие условиям выполненного полнотекстового
поиска. Вариантов применения папок, на самом деле, достаточно много, и для их перечисления не хватит
объема настоящего издания.
8.1 Создание новой папки
Создание новой папки можно осуществить посредством пунктов меню: Create -> Folder. Это
приводит к выводу модального окна Create Folder:
Рис. 8.1 Диалоговое окно создания новой папки
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
308
По своему интерфейсу окно очень похоже на аналогичное, используемое в диалоге создания нового
вида (см. Рис. 6.1), разумеется, исключая секцию, связанную с отбором документов. Кроме этого, поле
Folder type (тип папки) содержит меньше значений, чем у вида, а именно: Shared (общая папка), Shared,
private on first use (общая, но становящаяся личной при первом использовании), Shared, desktop private
on first use (общая, но становящаяся личной при первом использовании, и сама папка сохраняется в
файле desktop6.ndk), Private (личная папка).
В остальном, различий между папкой и видом на уровне свойств как ее самой, так и составляющих
ее объектов практически нет. Исключения составляют:
•
объект View Selection, которого у папки нет;
• секция Who may update the contents of this folder (кто может обновлять содержимое этой папки) с
закладки Security tab (безопасность) окна свойств папки, которой нет у видов. Секция содержит флаг
All authors and above (все авторы и выше). При снятии флага становятся доступными поле со
списком всех пользователей и ролей из ACL БД и кнопка
. В поле со списком можно проставить
«галочку» напротив требуемого пользователя или роли, а по кнопке
можно добавить новых
пользователей из адресных книг. Если флаг All authors and above и пользователь и/или роль не
выбрана в списочном поле секции Who may update the contents of this folder, то попытки такого
пользователя поместить/удалить документы в эту папку закончатся сообщением: «You are not
authorized to perform that operation» (вы не уполномочены выполнять эту операцию).
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
309
9 Проектирование аутлайнов - outline
Элемент дизайна аутлайн (outline) позволяет осуществлять навигацию по другим элементам
приложения, включая поименованные элементы дизайна БД, действия, URL, Notes гиперссылки, а также
«раскрывать/сворачивать» иерархические строчки, собственно, аутлайна.
Объект аутлайн не может выступать в качестве самостоятельного элемента дизайна БД. Для работы
аутлайн должен быть «встроен» в страницу (page, см. раздел 11), форму (form, см. раздел 4) или Rich
Text поле документа. В приложениях наиболее часто используется аутлайн, встроенный в страницу,
которая, в свою очередь, отображается в определенном фрейме объекта фреймсет. В данном разделе
будет рассматриваться, собственно, объект аутлайн, встраивание его в страницы или формы
рассматривается в разделе 4.23.
В дизайн-панели Domino Designer, начиная с версии 6, папка с объектами дизайна типа аутлайн
расположена в папке Shared Code (общий код). Для создания нового аутлайна можно воспользоваться
пунктами меню Create -> Design -> Outline. При этом, в панели тела элемента дизайна будет выведен
пустой аутлайн с первой обычно неотображаемой в клиенте Notes и браузере строкой, содержащей имя
файла текущей БД. Получить доступ к свойствам, собственно, аутлайна можно с помощью пунктов меню
Design -> Outline Properties. При этом, выводится окно свойств аутлайна, состоящее из одной закладки
Outline Info (общая информация о аутлайне). Рассмотрим ее подробнее.
9.1 Свойства аутлайна
Закладка
Outline Info (общая информация о аутлайне) имеет следующий вид:
Рис. 9.1 Закладка Outline Info окна свойств аутлайна
В первой секции закладки расположены три поля: Name (имя), Alias (алиас) и Comment
(комментарии). Имя аутлайна используется в процессе встраивания последнего в страницу или форму, а
также при программном доступе к аутлайну. Поле Alias предназначено для программного доступа к
аутлайну, a Comment обычно используется для задания пояснительных записей к аутлайну. Все три поля
отображаются в папке аутлайнов Domino Designer.
Вторая секция закладки содержит два флага:
•
Available to public access users (разрешить доступ пользователям с уровнем доступа
Общедоступный). Поднятый флаг позволяет пользователям, даже с уровнем «Нет доступа», но с
поднятым флагом Read public documents (возможность читать общедоступные документы)
обращаться к данному аутлайну;
•
Read only (только для чтения). Если данный флаг не установлен, то через аутлайн можно
редактировать по месту имена видов и папок, отображаемых через строки аутлайна с типом
View/Folder Placeholder (о данном типе будет рассказано позднее в настоящей главе). Для
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
310
редактирования по месту нужно выполнить «длинный» левый клик на имени папки/вида в аутлайне.
Данное действие может выполнять только пользователь с правами Дизайнера и выше. Источник
информации:
http://www-10.lotus.com/ldd/nd6forum.nsf/0/63d1708f34a6f21885256d41004b2072?OpenDocument.
Рис. 9.2 Редактирование по месту строк аутлайна
9.2 Строки аутлайна - outline entry
Основными и единственными составляющими элементами дизайна аутлайна являются его строки
(outline entry), клик по которым осуществляет навигацию в рамках приложения или
«раскрытие/свертывание» иерархических строк аутлайна (если таковые имеются).
При создании аутлайна разработчик имеет возможность выбрать тип будущего аутлайна - аутлайн по
умолчанию (default outline), либо создать аутлайн «с нуля». С точки зрения свойств аутлайна и входящих
в него строк, практически нет никакой разницы между аутлайном по умолчанию и самостоятельно
разработанным аутлайном. Создание аутлайна по умолчанию осуществляется либо через пункты меню
Design -> Generate Default Ouline, либо по одноименной кнопке
, находящейся в
верхней части панели тела элемента дизайна. При этом, на основании существующих в текущей БД видов
и папок будет создан иерархический аутлайн, осуществляющий навигацию по ним. Под иерархией здесь
понимается то, что для видов/папок с многоуровневым именем, такие виды/папки будут отображаться
иерархически по уровням имени. Создание аутлайна по умолчанию подразумевает отсутствие в текущем
аутлайне других строк (outline entry). Если же таковые имеются, то при создании default outline будет
выведено диалоговое окно с предложением убрать существующие outline entry:
Рис. 9.3 Диалоговое окно Generating the default outline will remove all existing outline entries/OK to proceed?
(Создание аутлайна по умолчанию удаляет все существующие строки аутлайна. ОК для продолжения.)
Нажатие в диалоговом окне Yes (да) вызовет удаление существующих строк текущего аутлайна, а
No (нет) - прервет процедуру создания аутлайна по умолчанию
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
311
После создания аутлайна по умолчанию, он будет включать в себя иерархическую схему навигации
по существующим папкам и видам, а также ряд дополнительных предопределенных строк Other Views
(другие виды), Other Private Views (другие личные виды), Other Folders (другие папки) и Other Private
Folders (другие личные папки). Функциональное предназначение этих строк состоит в том, что после
создания аутлайна по умолчанию в текущей БД могут появиться новые виды и папки. Однако,
сохраненный аутлайн не может самостоятельно динамически изменяться. Для отображения папок/видов,
созданных после сохранения аутлайна, и предназначены строки Other Views, Other Private Views, Other
Folders и Other Private Folders. Эти строки так же обладают рядом предопределенных свойств, которые
не могут быть изменены (подробнее они будут рассмотрены в настоящем параграфе). Однако, никто не
мешает разработчику удалить любую из этих строк. Для этого строку(и) нужно выделить и нажать клавишу
Del. Если в аутлайне (как по умолчанию, так и создаваемому «с нуля») отсутствует какая-либо из строк
Other Views, Other Private Views, Other Folders и Other Private Folders, то они могут быть добавлены в
аутлайн посредством пунктов меню: Create -> View Placeholder, Create -> Private View Placeholder,
Create -> Folder Placeholder и Create -> Private Folders соответственно. После добавления любой из этих
строк, соответствующий пункт меню становится недоступным.
В меню Create присутствует еще один специализированный тип строки аутлайна - Archive
Placeholder, который позволяет сформировать ссылку на архивную БД по отношению к текущей. Для
отображения этой строки аутлайна в клиенте Notes необходимо в параметрах архивирования текущей БД
на закладке Criteria активировать один из профилей архивирования (подробнее см. раздел 18.1).
Остальные строки аутлайна по умолчанию разработчик может модифицировать и создавать по своему
усмотрению.
Для добавления в аутлайн (как по умолчанию, так и создаваемому «с нуля») пустой новой строки
нужно сначала выбрать строку, ниже которой должна появиться новая строка, и затем воспользоваться
либо меню Create -> Outline Entry, либо кнопкой-акцией
New Entry (новая строка). Порядок
следования существующих строк в рамках аутлайна можно изменить с помощью операции drag&drop.
После того как строка создана, можно определить ее уровень иерархии в аутлайне. Это достигается
«сдвигом» вправо или влево уровня строки относительно текущего. В интерфейсе Domino Designer за это
отвечают как пункты меню Indent Outline Entry (сдвиг строки аутлайна вправо) и Outdent Outline Entry
(сдвиг строки аутлайна влево), так и одноименные кнопки
и
. Сдвиг может
осуществляться только на один уровень по отношению к текущему. Поэтому нельзя осуществить как сдвиг
левее уровня, идущего от собственно БД, так и «сдвинуть» первую строку аутлайна. Сдвинутые вправо
строки заставляют строку, находящуюся уровнем выше, становиться «разворачиваемой» (определенный
аналог категории в видах/папках). У «разворачиваемой» строки после ее создания в интерфейсе Domino
Designer появляется символ минуса, расположенный напротив, собственно, строки. Это говорит о том, что
по умолчанию данная строка будет «развернута». Клик по символу минуса «свертывает» входящие в
текущую строку строки подуровней. При этом, символ минуса изменится на символ плюса. Данный
элемент интерфейса работает как переключатель - последующий клик опять «развернет» строку. При
сохранении аутлайна фиксируется текущее состояние «разворачиваемой» строки, оно может влиять на
внешний вид встроенного аутлайна в интерфейсе клиента Notes (см. раздел 4.23.1) и браузера (см. раздел
4.23.5).
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
312
Рис. 9.4 Внешний вид «раскрываемых/свертываемых» строк аутлайна в интерфейсе Domino Designer
Рассмотрим оставшиеся пункты меню и кнопки Domino Designer, имеющие отношение к аутлайнам.
Из кнопок-акций остались нерассмотренными две:
Save Outline (сохранить аутлайн) и
Use Outline (применить аутлайн). Последняя предлагает сохранить аутлайн (если он еще не
сохранен) и встраивает его в пустую страницу (Page), которая затем выводится в панели тела элемента
дизайна. Аналогичного результата можно добиться через пункты меню Design -> Use Outline.
Нерассмотренные действия из меню Domino Designer, имеющие отношение к аутлайнам, разнесены
по двум пунктам верхнего уровня: View и Design. Для View это следующие подпункты: View -> Expand All
(«раскрывает» все «разворачиваемые» строки аутлайна), View -> Collapse All («свертывает» все
«разворачиваемые» строки аутлайна), View -> Expand/Collapse -> Expand Selected Level («раскрывает»
выбранную «разворачиваемую» строку аутлайна, если у строки также есть «разворачиваемые» подстроки,
то они не «раскрываются»), View -> Expand/Collapse -> Expand Selected & Children («раскрывает» все
уровни и подуровни выбранной «разворачиваемой» строки аутлайна) и View -> Expand/Collapse ->
Expand Selected Level («свертывает» все уровни и подуровни выбранной «разворачиваемой» строки
аутлайна).
В меню Design нерассмотренными остались два подпункта: Design -> Outline Entry Properties
(выводит окно свойств конкретной строки аутлайна, строка при этом должна быть выбрана) и Design -> Go
to Element (вызывает переход в среде клиента Notes или браузера к конкретному элементу, на который
ссылается выбранная строка аутлайна). Последний подпункт доступен только для тех строк, которые
действительно куда-то «ведут», поэтому он недоступен для предопределенных строк аутлайна (Other
Views, Other Private Views, Other Folders и Other Private Folders), а также если у строки для свойства
Туре (тип) установлено значение (None) (подробнее см. раздел 9.2.1).
Рассмотрим подробнее окно свойств конкретной строки аутлайна. Данное окно состоит из двух
закладок. Первая - будет рассмотрена позднее в настоящем разделе. Вторая закладка
Entry Hide
When (когда «скрывать» строку аутлайна), с точки зрения интерфейса, отличается от аналогичной
закладки Paragraph Hide When окна свойств поля (см. раздел 4.3.5) отсутствием секции Hide paragraph
when document is. По функциональности существуют и другие отличия:
•
нежелательно использовать в таких формулах «скрытия» строки аутлайна значение полей
документа (даже для встроенных в форму аутлайнов и с применением ключевого слова DEFAULT) такие формулы, обычно, не работают.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
313
•
для «раскрываемой» строки аутлайна, если ее формула «скрытия» определена и возвращает
@True в каком-либо конкретном случае, то при этом будут скрываться и «дочерние» для данной
строки аутлайна строки. Это происходит независимо от их формул «скрытия».
Перейдем к первой закладке окна свойств строки аутлайна.
9.2.1
Outline Entry Info - общая информация о строке аутлайна
Закладка
Outline Entry Info (общая информация о строке аутлайна) содержит следующие
элементы интерфейса:
Рис. 9.5 Закладка Outline Entry Info окна свойств строки аутлайна
Первая секция закладки Outline Entry Info содержит три поля:
•
Label (текстовый ярлык) определяет текстовую надпись, появляющуюся в конкретной строке
аутлайна;
•
Popup (всплывающий текст) определяет текстовую надпись, появляющуюся при проходе через
данную строку указателя мыши, в случае если окно, в котором выводится аутлайн, недостаточно
широко для вывода всего заголовка строки из поля Label;
•
Alias (алиас) позволяет задать синоним как для программного доступа к текущей строке аутлайна,
так и для ограничения доступа к «раскрываемым» строкам через поле Root entry с закладки Info tab
окна свойств встроенного аутлайна (подробнее см. раздел 4.23.1).
Секция Content (содержимое) практически полностью идентична одноименной секции закладки
Hotspot Info окна свойств Link Hotspot (см. раздел 4.14). Из отличий по отношению к Link Hotspot можно
отметить то, что в поле Туре (тип) секции Content закладки Outline Entry Info присутствуют два новых
значения:
•
(None) (пустой тип). Данное значение может применяться в случае, если строка используется
только для «свертывания/раскрытия» входящих в нее других подстрок аутлайна;
•
Action (действие). Это значение позволяет задать определенное действие на языке @-формул,
которое будет выполняться по факту клика на строке аутлайна. Само действие определяется с
помощью кнопки
Formula (формула). Клик по этой кнопке вызывает окно для ввода, собственно, @формулы (например, @Prompt([Ok]; "Текущее время"; @Text(@Time(@Now)))).
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
314
Секция Image (графическое изображение) позволяет разработчику самостоятельно определить
иконку, отображаемую слева от текстовой надписи (Label) строки аутлайна. Конкретная иконка
выбирается из доступных графических ресурсов с помощью текстового поля и кнопок:
Browse images
(просмотреть графические ресурсы) и
Formula (формула). Флаг Do not display an image (не выводить
графическое изображение) позволяет запретить вывод иконки (даже если она определена) для текущей
строки аутлайна. По поводу данной секции следует сделать замечание, что если строка аутлайна
ссылается на поименованный объект Notes типа вида/папки, то для таких строк по умолчанию (т.е., без
определения в секции Image) выводятся стандартные иконки соответственно вида или папки.
Секция Options (параметры) для большинства строк содержит единственный флаг Does not keep
selection focus (не сохранять фокус для выбранной строки аутлайна). Поднятие флага позволяет не
«оставлять» в аутлайне фокус на данной строке после клика по ней, а возвращать его на строку аутлайна,
которая была выбрана до момента клика по текущей. Для предопределенных строк аутлайна (Other
Views, Other Private Views, Other Folders, Other Private Folders и Archive) в секции Options появляется
дополнительный флаг Read only (только для чтения). Данный флаг используется совместно с
одноименным флагом свойств самого аутлайна (см. раздел 9.1), и при поднятии позволяет заблокировать
редактирование по месту предопределенных строк аутлайна.
9.2.2
Свойства строки аутлайна, представленные в объектно-событийной панели
Сам объект аутлайн не представлен в объектно-событийной панели, но каждая его строка находит
свое отражение в объектно-событийной панели. Все подобъекты строки аутлайна из объектно-событийной
панели так же представлены одноименными свойствами в окне свойств строки аутлайна. Однако, для
ряда свойств строки аутлайна их определение через объектно-событийную панель предлагает более
гибкий способ по сравнению с окном свойств. Перечислим подобъекты строки аутлайна, представленные в
объектно-событийной панели:
•
Label (текстовый ярлык). Позволяет определить текстовую надпись, появляющуюся в текущей
строке аутлайна, с помощью языка @-формул. Например, "Текущее время: "+ @Text(@Time(@Now)).
Вычисление формулы происходит однократно только в момент загрузки формы или страницы. При
пересчете полей формы по клавише F9 или программно (например, по акции с формулой
@Command([ViewRefreshFields]) ) в интерфейсе клиента Notes перевычисления формулы объекта
Label происходит только если аутлайн встроен в форму, открытую в режиме редактирования. В
интерфейсе браузера пересчет полей вызывает повторную загрузку формы с сервера, и
соответственно формула объекта Label будет повторно вычислена. При установке значения свойства
Label через объектно-событийную панель, в окне свойств поле Label приобретает значение Computed
(вычисляемое). Аналогичное значение отображается и в рабочей панели Domino Designer. Следует
также отметить, что при задании значения Label через окно свойств, по синтаксису допускаются только
текстовые константы (но не @-формулы, возвращающие переменные значения), которые
автоматически переносятся в объект Label из объектно-событийной панели.
•
Source (источник). Представляет значение ссылки на объект, куда указывает текущая строка
аутлайна (т.е., объект, который должен открываться при клике на данную строку аутлайна). Объект
Source имеет смысл только для тех строк аутлайна, у которых на закладке Outline Entry Info в поле
Туре выбрано одно из следующих значений: Action, Named Element или URL. Соответственно
теряется смысл для значений: (None) и Link (следует отметить, что в данном случае установка
значения объекта Source вызывает изменение значения поля Туре). При Туре равном Action в объект
Source передается @-формула, выполняющаяся по факту клика на строку аутлайна. В данном случае
определение @-формулы через объект Source не вызывает дополнительной функциональности по
отношению к окну свойств (т.к. @-формулу можно определить и через окно свойств). В случае, когда
Туре принимает значения Named Element или URL, объект Source позволяет определить значение
ссылки на поименованный элемент Notes или ресурс интернета динамически. Для поименованных
элементов Notes необходимо так же правильно указывать тип этого элемента (т.е., поле, содержащее
значения: Page, Form, Frameset, View, Folder и Navigator). Например, для аутлайна, встроенного в
форму/страницу, у определенной строки аутлайна значение объекта Source может быть определено
как: @lf( @UserRoles = "[admin]" ; "View1" ; "View2"). Это приводит к тому, что конкретный вид, к
которому будет осуществлен переход по клику на данную строку аутлайна, будет определяться
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
315
динамически, в зависимости от назначения текущего пользователя на роль admin в ACL БД. При
определении @-формулы объекта Source следует соблюдать определенную осторожность.
Например, нежелательно использовать в таких формулах значение полей документа (даже с
применением ключевого слова DEFAULT) - это приводит к непредсказуемым последствиям. Это
связано, скорее всего, с тем, что для @-формул в рамках объектов аутлайна существует собственный
контекст (неупоминаемый в документации), и не все функции и команды допустимы для данного
контекста (определять приходится экспериментально). Также следует помнить, что вычисление
формулы объекта Source, как и для Label, происходит однократно (за исключением аутлайна
встроенного в форму, открытую в режиме редактирования), только в момент загрузки формы или
страницы. По аналогии с Label, установка значения объекта Source приводит к установке в поле Value
из окна свойств значения Computed (вычисляемое).
•
Frame (целевой фрейм). Данный объект позволяет динамически определить в каком фрейме будет
открываться ссылка аутлайна. После установки в поле Frame отображается значение Computed.
•
объекты Image (графический ресурс) и Hide When (формула «скрытия» строки аутлайна)
соответствуют одноименным полям из окна свойств строки аутлайна. Данные объекты не добавляют
новой функциональности по сравнению с окном свойств строки аутлайна.
9.2.3
Программный доступ к аутлайну
В Domino, начиная с версии R 5, присутствуют классы [Notes]Outline и [Notes]OutlineEntry,
позволяющие программным способом обращаться к аутлайну и его строкам. Приведем код LotusScriptагента, который добавляет в аутлайн новую строку, для организации ссылки на сайт www.lotus.com.
Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim outline As NotesOutline
Dim entry As NotesOutlineEntry
Set db = session.CurrentDatabase
Set outline = db.GetOutline("MyOutline") 'получаем доступ к аутлайну
Set entry - outline.Createentry("MyEntry") 'создаем новую строку аутлайна
entry.Label = "Ссылка на Lotus.Com" 'присваиваем строку аутлайна текст ярлыка
Call entry.SetURL("http://www.lotus.com") 'присваиваем строку аутлайна URL
Call outline.save() 'сохраняем аутлайн
End Sub
При выполнении агента в аутлайне MyOutline появится новая строка со ссылкой на сайт
www.lotus.com. Увидеть результат работы агента в клиенте Notes можно только открыв заново БД. Для
успешной работы агента требуется доступ к БД на уровне Дизайнера и выше.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
316
10 Проектирование навигаторов - navigator
Элемент дизайна навигатор (navigator), так же как и аутлайн, предназначен для осуществления
навигации по другим элементам приложения. Папка с элементами дизайна типа навигатор расположена в
Domino Designer в папке Other (Other -> Navigators). Для создания навигатора можно воспользоваться
меню Create -> Design -> Navigator. При этом, в рабочей панели Domino Designer загрузится чистый бланк
нового навигатора. Для получения доступа к свойствам навигатора можно воспользоваться меню Design > Navigator Properties. Окно свойств навигатора состоит из двух закладок, рассмотрим их подробнее.
10.1 Info tab - общие свойства навигатора
Закладка
Info tab (общие свойства навигатора) содержит следующие элементы интерфейса:
Рис. 10.1 Закладка Info tab окна свойств навигатора
Первая секция содержит два поля Name (имя) и Comment (комментарии). Поле Name
предназначено для задания навигатору имени и, возможно, алиаса. Если алиас необходим, то он
отделяется от, собственно, имени символом вертикальной черты («|»). Поле Comment используется для
добавления комментариев к навигатору. Значение из этого поля не влияет на поведение навигатора, а
только отображается в одноименном столбце папки Other\Navigators.
Во второй секции присутствуют следующие элементы интерфейса:
•
список Initial view or folder (начальный вид или папка). Данное поле позволяет задать вид или
папку, которая будет открываться одновременно с открытием навигатора. Поле содержит имена всех
доступных в данной БД видов и папок, а также значение (nоnе), которое запрещает одновременный
вывод навигатора и вида/папки;
•
флаг Auto adjust panes at runtime (автоматически устанавливать размеры панелей окна в момент
выполнения). Поднятие флага запрещает пользователю менять размер панели, в которой
отображается данный навигатор;
•
флаг Web browser compatible (совместимость с Web браузерами). Если флаг не установлен, то
такой навигатор не может быть отображен в Web-приложениях как самостоятельный, так и встроенный
объект (исключение составляет только импортированный навигатор - import navigator, см. раздел
4.25);
•
список Background color (цвет фона). Задает цвет фона навигатора.
10.2 Grid tab - параметры сетки навигатора
Закладка
Grid tab (параметры сетки навигатора) содержит следующие элементы интерфейса:
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
317
Рис. 10.2 Закладка Grid tab окна свойств навигатора
Параметры данной закладки предназначены для определения на теле навигатора сетки, которая
помогает разработчику позиционировать объекты, входящие в навигатор, относительно узлов этой сетки.
На закладке присутствует флаг Snap to grid (фиксировать объекты по узлам сетки). Поднятие флага
делает доступным второе поле Grid size XX pixels (размер сетки в пикселях). Поле позволяет определить
расстояние в пикселях между узлами сетки. Сама сетка на бланке навигатора не отображается, однако
перемещение объектов, входящих в навигатор (например, прямоугольник), с помощью мыши
производится по узлам сетки.
10.3 Составляющие навигатора
Кроме установки параметров навигатора, из ранее рассмотренного окна свойств, разработчик может
разместить на бланке навигатора определенные объекты, собственно, и выполняющие навигацию по
приложению. Эти объекты можно разделить на две группы. К первой относятся, условно говоря,
«видимые» объекты (например, «закрашенный» многоугольник), вторые - это определенные области
навигатора, которые не обязательно должны иметь «видимое» отражение. Добавить объекты первой
группы на бланк навигатора можно с помощью следующих пунктов меню:
•
Create -> Text определяет текстовую надпись. После выбора данного пункта меню указатель мыши
в рамках рабочей панели меняет свою пиктограмму на соответствующую графическому выделению.
Определение границ надписи производится нажатием левой кнопки мыши в одном из определяющих
углов прямоугольника (левый верхний или правый нижний) и перемещением указателя мыши, без
отпускания кнопки мыши, к оставшемуся из определяющих углов. После определения графических
размеров надписи выводится окно свойств надписи (подробно будет рассмотрено позднее в разделе
10.3.1);
•
Create -> Rectangle определяет объект «закрашенный» прямоугольник. Дальнейшее определение
размеров прямоугольника, как, впрочем, и большинства других объектов навигатора, аналогично
текстовой надписи;
•
Create -> Rounded Rectangle определяет объект «закрашенный» прямоугольник со скругленными
углами;
•
Create -> Ellipse определяет объект «закрашенный» эллипс;
•
Create -> Polygon определяет объект «закрашенный» многоугольник. После выбора данного
пункта меню, «рисование» каждой границы многоугольника аналогично текстовой надписи. Для
окончания процесса «рисования» необходимо при определении последней границы выполнить
двойной клик мыши. При этом, последняя граница автоматически соединится с начальной границей
многоугольника;
•
Create -> Polyline определяет объект ломаная линия. Дальнейшее определение размеров
ломаной линии аналогично «закрашенному» многоугольнику;
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
318
•
Create -> Button определяет объект кнопка;
•
Create -> Graphic Button определяет объект «графическая» кнопка. Перед определением объекта
необходимо предварительно скопировать в буфер обмена графическое изображение.
Объекты второй группы так же могут добавляться на бланк формы с помощью пунктов меню:
•
Create -> Hotspot Rectangle определяет гиперобъект прямоугольник;
•
Create -> Hotspot Circle определяет гиперобъект круг;
•
Create -> Hotspot Polygon определяет гиперобъект многоугольник.
Помимо объектов
навигатора. Для этого
воспользоваться меню
фонового изображения
Background.
и гиперобъектов с помощью меню можно определить фоновое изображение для
надо сначала скопировать графическое изображение в буфер обмена, а затем
Create -> Graphic Background. Удаление ранее определенного графического
навигатора достигается посредством пунктов меню Design -> Remove Graphic
Для объектов навигатора из первой группы можно определить их порядок в Z-индексе. За это
отвечают два пункта меню:
•
Design -> Bring To Front - заставляет отображаться текущий объект поверх других. Перед
выполнением этой команды необходимо выбрать (но не выделить) определенный объект навигатора;
•
Design -> Send To Back - «прячет» текущий объект под другими.
Для получения доступа к окну свойств любого из объектов навигатора необходимо выбрать (но не
выделить) последний и воспользоваться меню Design -> Objects Properties. Окно свойств объектов
навигатора зависит от типа объекта и содержит от двух до четырех закладок. В заголовке окна свойств
отображается тип объекта (например, Rectangle - прямоугольник). Рассмотрим общие свойства,
представленные на этих закладках.
10.3.1 Info tab - общие свойства объектов навигатора
Первая закладка
Info tab (общие свойства объектов навигатора) для большинства подобъектов
навигатора имеет следующий вид:
Рис. 10.3 Закладка Info tab окна свойств объектов навигатора
В единственной секции закладки присутствуют поля: Name (имя), определяющее имя объекта, под
которым он будет появляться в объектно-событийной панели, Caption (заголовок) - надпись,
выводящаяся на объекте и флаг Lock size and position (зафиксировать размер и положение объекта).
Для объекта текстовая надпись поле Caption имеет многострочный вид и позволяет вводить в него
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
319
символы перевода строки. Для объектов ломаная линия, «графическая»
прямоугольник, круг и многоугольник на закладке отсутствует поле Caption.
кнопка,
гиперобъектов
10.3.2 Font tab - свойства шрифта текстового заголовка объектов навигатора
Для объектов навигатора, у которых на закладке Info tab (см. предыдущий раздел) имеется поле
Caption, в окне свойств присутствует закладка Font tab. Она определяет параметры шрифта текстового
заголовка объекта. С точки зрения интерфейса, закладка практически идентична одноименной закладке
окна свойств поля (см. раздел 4.3.3). Из отличий можно отметить присутствие на закладке кнопки Make
Default for Buttons/Text/Shapes (сделать шрифтом по умолчанию для всех кнопок/текстовых
надписей/для всех остальных объектов навигатора). Если такая кнопка будет нажата, то у вновь
создаваемых объектов данного типа параметры шрифта заголовка будут изначально соответствовать тем,
которые были в момент нажатия кнопки.
10.3.3 Styles tab - параметры стилей объектов навигатора
У объектов навигатора: текстовая надпись, «закрашенный» прямоугольник, «закрашенный»
прямоугольник со скругленными углами, «закрашенный» эллипс, «закрашенный» многоугольник, ломаная
линия и кнопка в окне их свойств присутствует закладка
Styles tab (параметры стилей объектов
навигатора). Для всех из перечисленных объектов, за исключением ломаной линии и кнопки, закладка
имеет следующий вид:
Рис. 10.4 Закладка Styles tab окна свойств объектов навигатора
Отличия данной закладки для объектов ломаная линия и кнопка будут рассмотрены позднее в
настоящем разделе.
На закладке присутствуют два раздела Border (параметры границы объекта), Background
(параметры фона) и кнопка Make Default for Buttons/Text/Shapes (сделать стилем по умолчанию для всех
кнопок/текстовых надписей/«закрашенных» объектов навигатора). Если такая кнопка будет нажата, то у
вновь создаваемых объектов данного типа параметры стиля заголовка будут изначально соответствовать
тем, которые были в момент нажатия кнопки.
Раздел Border содержит:
•
радиокнопки Solid (сплошной) и None (отсутствуют), определяющие наличие или отсутствие
границ объекта;
•
поле Color (цвет), которое задает цвет границы объекта. Разумеется, если в предыдущем поле
выбрано значение Solid;
•
поле Width (ширина), определяющее толщину линии границы. Значения поля представлены в
виде наглядных пиктограмм, отражающих толщину линии;
Раздел Background содержит:
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
320
•
радиокнопки Solid (сплошной) и Transparent (прозрачный), которые определяют наличие или
отсутствие фона у объекта;
•
поле Color (цвет), задающее цвет фона объекта. Разумеется, если в предыдущем поле выбрано
значение Solid.
Для объекта ломаная линии на закладке Styles tab присутствуют следующие элементы интерфейса:
•
поле Line width (ширина линии), определяющее толщину ломаной линии;
•
поле Line color (цвет линии), определяющее цвет ломаной линии;
•
кнопка Make Default for Lines (сделать стилем по умолчанию для всех линий) - на основании стиля
текущей ломаной линии устанавливает аналогичный стиль для всех ломаных линий, создаваемых в
последствии.
Для объекта кнопка на закладке Styles tab присутствуют следующие элементы интерфейса:
•
поле Button face color (цвет лицевой стороны кнопки), определяющее цвет кнопки;
•
поле Bevel width (ширина «скоса» кнопки), задающее величину ширины «скоса» трехмерной
кнопки;
•
поле Button outline color (цвет контура кнопки), которое должно задавать цвет границы кнопки.
10.3.4 Highlight tab - параметры «подсветки» объектов навигатора
Закладка
Highlight tab (параметры «подсветки» объектов навигатора) представлена для всех
объектов навигатора. Для большинства из них она выглядит следующим образом:
Рис. 10.5 Закладка Highlight tab окна свойств объектов навигатора
После создания нового объекта на бланке навигатора, на данной закладке присутствуют только два
неподнятых флага: Highlight when touched (подсветка объекта при проходе через объект указателя
мыши) и Highlight when clicked (подсветка объекта при клике мыши). Поднятие любого из флагов
выводит на закладке ряд новых полей и кнопку:
•
поле Highlight border width (толщина границы
соответствующую толщину с помощью наглядных пиктограмм;
подсвечиваемого
объекта)
задает
•
поле Highlight border color (цвет границы подсвечиваемого объекта) задает цвет границы
объекта;
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
321
•
поле Highlight background color (цвет фона подсвечиваемого объекта) задает цвет фона объекта,
через который проходит указатель мыши. Поле доступно для всех «закрашенных» объектов и
текстовых надписей;
•
кнопка Make Default for Shapes/Text/Lines/Нotspot/Buttons/Bitmaps (сделать стилем подсветки
по
умолчанию
для
всех
«закрашенных»
объектов/текстовых
надписей/ломаных
линий/гиперобъектов/обычных кнопок/графических кнопок навигатора). Кнопка устанавливает
аналогичный стиль для всех указанных объектов навигатора, создаваемых в последствии.
10.3.5 Свойства объектов навигатора, представленные в объектно-событийной панели
Каждый объект навигатора после своего создания находит отражение в объектно-событийной панели
Domino Designer. Имя объекта соответствует значению поля Name с закладки Info tab (см. раздел 10.3.1).
Первоначально у каждого объекта навигатора в объектно-событийной панели присутствует единственный
подобъект Click (действие по событию клика мыши на объекте). Число подобъектов зависит от языка
программирования, который для каждого конкретного объекта навигатора выбирается в панели
программного кода. Разработчику предоставляются на выбор три значения обработки события клика:
Simple action(s) (простые действия), Formula (@-формулы) и LotusScript (код на языке LotusScript).
При выборе значения Simple action(s) для поля выбора языка программирования (Run) в панели
программного кода присутствует поле Action (действие), которое, собственно, и определяет действия,
выполняемые по факту клика мыши на объекте. Для поля Action допустимыми являются следующие
значения:
•
(nоnе) - никаких дополнительных действий по факту клика на объект не вызывается;
•
Open another Navigator (открыть другой навигатор). Выбор этого значения вызывает появление
еще одного поля, в котором определяется имя другого навигатора для открытия. В поле, кроме имен
доступных на данный момент навигаторов, присутствуют два значения: (nоnе) - не открывать никаких
других навигаторов, Folders (папки) -открыть стандартный навигатор «Виды и папки»;
•
Open a View or Folder (открыть вид или папку). Выбор этого значения вызывает появление еще
одного поля, в котором определяется имя вида или папки для открытия. В поле, кроме имен доступных
на данный момент видов и папок, присутствует значение (nоnе) - не открывать никаких других видов и
папок;
•
Alias a Folder (алиас папки). Данное значение позволяет выбрать папку для открытия по факту
клика на объекте навигатора. Выбор данного значения вызывает появление еще одного поля, в
котором определяется имя папки для открытия. В поле, кроме имен доступных на данный момент
папок, присутствует значение (nоnе) - не открывать никаких других папок;
•
Open a Link (открыть Notes гиперссылку). Выбор данного значения вызывает появление кнопки
Paste Link (вставить ссылку), позволяющей перенести значение Notes гиперссылки из буфера обмена
в обработчик клика по данному объекту навигатора;
•
Open URL (открыть ресурс интернета). Выбор данного значения вызывает появление кнопки Enter
URL (ввести URL), клик по которой открывает окно для определения адреса ресурса интернета.
Рис. 10.6 Окно определения адреса ресурса интернета для объектов навигатора
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
322
Задание для объектов навигатора в поле выбора языка программирования значения Formula
позволяет определить действия, выполняемые по факту клика на объект навигатора с помощью @формулы. Например, @Prompt([Ok]; "Текущее время"; @Text(@Time(@Now))).
Выбор для поля Run значения LotusScript ведет к появлению у текущего объекта навигатора ряда
подобъектов:
•
(Options) (параметры) - предназначен для объявления неисполняемых операторов на уровне
данного объекта навигатора;
•
(Declarations) (описания) - предназначен для объявления переменных и констант на уровне
данного объекта навигатора;
•
Click (клик мыши) - предназначен для определения процедуры обработки события клик мыши по
данному объекту навигатора. Например,
Sub Click(Source As Navigator)
Messagebox "Текущее время: " & Time$()
End Sub
•
Initialize (инициализация) - обработчик события по факту создания данного объекта навигатора;
•
Terminate (завершение) - обработчик события по факту выгрузки данного объекта навигатора из
памяти. Реально происходит при закрытии навигатора.
Проверить последовательность возникновения данных событий можно с помощью функции
Messagebox.
10.4 Трансляция навигаторов в Web
Трансляция навигаторов в Web практически не зависит от свойства БД Use JavaScript when
generation pages (см. раздел 2.3.1). Попытка открытия в Web навигатора с опущенным флагом Web
browser compatible (см. раздел 10.1) вызывает сообщение браузера об ошибке. Навигаторы, с
установленным свойством Web browser compatible, транслируются в Web стандартным тегом карты
изображения <МАР ...>. В данном случае используется комбинированный (клиентский плюс серверный)
вариант карты изображения, т.е., за тегом <МАР ...> следует тег <IMG SRC ...> с атрибутами USEMAP и
ISMAP. Например,
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
323
<HTML>
<BODY>
<MAP NAME="25A.map">
<AREA
<AREA
HREF="/Test7.nsf/m1!OpenView"
HREF="http://www.lotus.com"
SHAPE=rect
SHAPE=rect
COORDS="46,34,202,110">
COORDS="33,190,255,322">
</MAP>
<A
HREF="/Test7.nsf/sss!OpenNavigator">
<IMG
SRC
=
"/Test7.nsf/sss/$NavImagemap/0.52!OpenElement&FieldElemFormat=gif"
WIDTH=255 HEIGHT=322 USEMAP="#25A.map" BORDER=0 ISMAP>
</A>
</B0DY>
</HTML>
Код сгенерированной HTML-страницы был несколько упрощен для удобства восприятия.
Допустимые активные объекты навигатора транслируются в теги <AREA ...>. Под допустимыми здесь
понимаются все объекты навигатора, определенные с помощью Simple action(s) (см. раздел 10.3.5), а
также ряд объектов, заданных через Formula. Подробнее, для БД, с установленным свойством Use
JavaScript when generation pages и для всех объектов навигатора, определяемых по @-формулам, при
трансляции их в Web будет генерироваться тег <AREA ...>. При этом, не проверяется, может ли ссылка,
выполняющаяся по факту клика на объект навигатора, отображаться в Web-приложении. Например, @формула может быть @Prompt([Ok]; "123"; "123"). Даже в этом случае, будет сгенерирован тег <AREA ...>,
однако, клик по объекту навигатора вызывает сообщение браузера об ошибке. Для «правильных»
объектов (например, с формулой @UrlOpen("http://www.lotus.com") ) клик по объекту откроет
соответствующий ресурс. URL ресурса, который должен быть открыт, передается в тег <AREA ...>
внутренней JavaScript функцией, вызываемой на событие onClick. Если у БД опущен флаг Use JavaScript
when generation pages, то в Web будут транслироваться только объекты навигатора с «адекватными» @формулами (т.е., @Prompt транслироваться не будет). Ресурс, который должен быть открыт для данного
случая, передается в атрибут HREF тега <AREA ...>. Объекты навигатора, определенные с помощью
LotusScript, в Web не транслируются, независимо от свойства БД Use JavaScript when generation pages.
Следует так же отметить, что хотя объекты навигатора типа ломаная линия (Polyline см. раздел 10.3) в
Web-приложениях отображаются, тег <AREA ... > на них не генерируется.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
324
11 Проектирование страниц - page
Элемент дизайна Page (страница) предназначен для отображения статичных, или относительно
статичных (например, встроенный вид) данных. В четвертой версии Notes/Domino для этих целей
приходилось создавать сначала форму, потом возможно документ и только потом переходить к
собственно отображению. Использование страниц помогает решить эту проблему.
Страницы в клиенте Notes могут отображаться во фреймах, открываться по ссылке из
гиперобъектов, или программным путем - @Command( [OpenPage]; "страница"). В интерфейсе браузера
страницы открываются по URL...БД/страница?ОреnРаgе.
Для создания новой страницы можно воспользоваться пунктами меню Create -> Design -> Page. При
этом, в панель тела элемента дизайна Domino Designer загрузится пустой бланк новой страницы. Окно
свойств страницы можно вывести через меню Design -> Page Properties.
11.1 Свойства страницы
Окно свойств страницы состоит из четырех закладок. Последняя закладка
Security
(безопасность) содержит единственный флаг Available to Public Access users (разрешить доступ к
странице пользователям с уровнем доступа «Общедоступный»). Поднятый флаг предоставляет
пользователям, даже с уровнем «Нет доступа», но с поднятым в ACL флаге Read public documents
(возможность читать общедоступные документы) получать доступ на отображение указанной страницы.
Закладка
Launch (действия при «запуске» страницы) практически полностью идентична
одноименной закладке свойств формы (см. раздел 4.1.3). Отличие состоит лишь в том, что у поля Auto
Launch (автоматический запуск) отсутствует значение -URL-.
Закладка
Background (определение фона страницы) также практически полностью идентична
одноименной закладке свойств формы (см. раздел 4.1.4). Из отличий можно отметить отсутствие флага
Allow users to change this properties.
Разберем подробнее первую закладку окна свойств страницы.
11.1.1 Page Info - общие свойства страницы
Закладка
Page Info (общие свойства страницы) имеет следующий вид:
Рис. 11.1 Закладка Page Info окна свойств страницы
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
325
Первая секция закладки предназначена для определения имени страницы (поле Name) и
комментариев (Comment). Последнее поле не влияет на поведение приложения. Значение этого поля еще
отображается в одноименном столбце папки Pages. В поле Name кроме, собственно, имени можно ввести
алиас страницы. Для этого надо отделить его (алиас) от имени символом вертикальной черты («|»).
Все три флага из секции Options (параметры), по своей функциональности, идентичны одноименным
флагам одноименной секции закладки Form Info (см. раздел 4.1.1) окна свойств формы.
Все элементы интерфейса из секций Web Access (при доступе через Web) и Link Colors (цвета
ссылок), по своей функциональности, идентичны одноименным элементам интерфейса секции On Web
Access с закладки Defaults tab (см. раздел 4.1.2) окна свойств формы.
11.2 Объекты и свойства страницы, определяемые в объектно-событийной
панели
Объекты и свойства страницы, присутствующие в объектно-событийной панели, практически
идентичны одноименным объектам и событиям формы (см. раздел 4.2). Отличия наблюдаются в объекте
Page, в котором отсутствуют ряд объектов из Form. Это: WebQueryOpen, WebQuerySave, onReset,
onSubmit, Querymodechange, Postmodechange, QuerySave, PostSave, QuerySend и PostSend. В
остальном объекты, подобъекты формы и страницы идентичны.
11.3 Составляющие элементы страницы
На странице может быть размещено большинство элементов дизайна второго уровня, допустимых
для формы. Исключение составляют: поля (Field), секции с управляемым доступом (Controlled Access
Section), области размещения (Layout region), системные акции (System Action), объекты загрузки
файлов на сервер (File Upload), объекты группового планирования (Group Scheduler), встроенный
редактор (Embedded Editor) и подформы (Subform).
Остальные объекты практически полностью идентичны по свойствам и функциональности в рамках
формы.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
326
12 Проектирование фреймсетов - frameset
Объект Frameset позволяет «разделить» главное окно приложения на несколько прямоугольных
областей, называемых фреймами (Frame). В каждом из фреймов можно вывести приложения,
независящее от других фреймов. При необходимости можно осуществить связь между фреймами
(например, можно по факту клика по гиперобъекту или активной ссылке в одном фрейме открыть новый
объект в другом фрейме).
Объект Frameset может использоваться для приложений как в интерфейсе браузера, так и клиента
Notes. Например, в стандартном шаблоне почтовой БД широко применяются фреймсеты в интерфейсе
клиента Notes.
12.1 Создание нового фреймсета
Для создания нового фреймсета можно воспользоваться пунктами меню Create -> Design ->
Frameset. При этом появляется следующее модальное окно:
Рис. 12.1 Диалог создания нового фреймсета
Поле Numbers of frames (число фреймов) определяет первоначальное число фреймов во
фреймсете. Под словом «первоначальное» здесь понимается то, что в дальнейшем число фреймов может
быть изменено. Четыре графические кнопки с общим именем Arrangement (расположение) определяют
первоначальное расположение фреймов во фреймсете. С точки зрения интерфейса, эти кнопки работают
как радиокнопки. Внешний вид графических кнопок зависит от значения поля Numbers of frames
). Клик по
(например, если число фреймов равно 2, то они выглядят так и
кнопке Cancel (отменить) прерывает процесс создания нового фреймсета, Ok - загружает пустой
фреймсет в панель тела элемента дизайна Domino Designer. Число и расположение фреймов
соответствует значениям полей Numbers of frames и Arrangement из диалога Create New Frameset.
12.2 Параметры фреймсета, определяемые через меню и кнопки Domino
Designer
После загрузки нового фреймсета в панель тела элемента дизайна Domino Designer все его
составляющие фреймы пусты. В этом случае, они отображаются серым цветом с надписью вверху No
content (не определено содержимое). Первый фрейм обрамляется темно-серой рамкой, это говорит о том,
что этот фрейм в данный момент активен для определения своих свойств. Клик мыши в пределах другого
фрейма делает последний активным. После определения, что же будет показываться в пределах
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
327
текущего фрейма, он обычно, даже в среде Domino Designer меняет свой серый фон на это самое
содержимое. Если в качестве содержимого будет выбран адрес ресурса интернета, то это может
замедлить процесс, собственно, дизайна фреймсета, из-за необходимости загрузки/обновления HTMLстраниц. Для предотвращения такого поведения фреймсета используется пункт меню View -> Show Frame
Content. Данный пункт работает как переключатель, текущее состояние выбора определяется «галочкой»,
отображающейся/неотображающейся слева от самого пункта меню. Если выбрано значение «не
показывать содержимое» (т.е., «галочки» нет), то в рамках фрейма, содержимое которого определено,
отображается не само содержимое, а текстовые надписи Content type (тип содержимого) и Content value
(значение содержимого). Эти надписи размещаются вверху фреймов на месте No content. Например,
Content type URL и Content value http://www.rambler.ru.
В верхней части панели тела элемента дизайна Domino Designer присутствуют кнопки:
•
Save Frameset (сохранить фреймсет);
•
Split into Columns (разбиение по столбцам) - делит текущий фрейм на два по
горизонтали. Аналогичного результата можно добиться с помощью пунктов меню Frame -> Split into
Columns. Пункт верхнего уровня меню Frame появляется в Domino Designer при загрузке в панель
тела элемента дизайна фреймсета;
•
Split into Rows (разбиение по строкам) - делит текущий фрейм на два по вертикали.
Аналог пункта меню Frame -> Split into Rows;
•
Delete Frame (удалить фрейм) - удаляет текущий фрейм. Аналог пункта меню Frame
-> Delete Frame;
•
Remove Frame Contents (удалить содержимое фрейма) - удаляет ссылку на
содержимое фрейма, сам фрейм при этом не удаляется. Аналог пункта меню Frame -> Remove Frame
Contents;
•
Flip Horizontally (зеркально отобразить по горизонтали) - для вертикальных
фреймов меняет их порядок следования относительно вертикальной оси симметрии.
Помимо уже рассмотренных пунктов меню, в меню Frame присутствует следующие пункты:
•
Refresh Frame Contents (обновить содержимое фрейма). Данный пункт обычно применяется для
фреймов, содержащих ресурсы интернет. Он позволяет в интерфейсе Domino Designer повторно
загрузить из источника содержимое фрейма. Применение данного пункта имеет смысл только, если
установлено свойство отображения содержимого фреймов (пункт View -> Show Frame Content);
•
Frame Properties (свойства фрейма) - выводит окно свойств выбранного фрейма;
•
Frameset Properties (свойства фреймсета) - выводит окно свойств фреймсета, как объекта
дизайна.
Рассмотрим подробнее параметры фреймсета, определяемые в его окне свойств.
12.3 Свойства фреймсета
Окно свойств фреймсета состоит из двух закладок. Вторая из них
HTML tab (HTML параметры
фреймсета), с точки зрения интерфейса, идентична одноименной закладке, рассмотренной в контексте
свойств поля (см. раздел 4.3.6). Рассмотрим первую закладку окна свойств фреймсета.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
328
12.3.1 Basics tab - основные свойства фреймсета
Закладка
Basics tab (основные свойства фреймсета) имеет следующий вид:
Рис. 12.2 Закладка Basics tab окна свойств фреймсета
В первой секции закладки присутствуют три текстовых поля, которые соответственно определяют
имя (Name), алиас (Alias) и комментарии (Comment) фреймсета. Последнее поле (Comment) не влияет
на функциональность приложения и используется только для внесения справочной информации. Эта
информация, кроме окна свойств фреймсета, отображается еще и в папке Framesets Domino Designer.
Поля Name и Alias могут использоваться для организации доступа к данному фреймсету из приложения.
Поле Available to public access users (разрешить доступ пользователям с уровнем доступа
Общедоступный) предоставляет пользователям, даже с уровнем «Нет доступа», но с поднятым флагом
Read public documents (возможность читать общедоступные документы) обращаться к данному
фреймсету.
Вторая секция Title (заголовок) позволяет с помощью языка @-формул определить общий заголовок
окна фреймсета. Значение заголовка можно задать как непосредственно в многострочном поле, так и с
помощью кнопки
Formula Window (окно для формулы), позволяющей определить значение
@-формулы в отдельном окне. Обратите внимание, что заголовок окна в обоих случаях (поле или кнопка
Formula Window) определяется на основании языка @-формул, поэтому даже в случае, если значение
должно быть текстовой константой, необходимо брать его в двойные кавычки.
12.4 Свойства фрейма
Окно свойств фрейма состоит из пяти закладок. Последняя из них
Additional HTML
(дополнительные HTML параметры фрейма), с точки зрения интерфейса, идентична одноименной
закладке, рассмотренной в контексте свойств поля (см. раздел 4.3.6). Рассмотрим оставшиеся закладки.
12.4.1 Basics tab - основные свойства фрейма
Закладка
Basics tab (основные свойства фрейма) имеет следующий вид:
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
329
Рис. 12.3 Закладка Basics tab окна свойств фрейма
Первая секция окна содержит единственное поле Name (имя), определяющее имя фрейма.
Вторая секция Content (содержимое), с точки зрения интерфейса, практически полностью идентична
одноименной секции с закладки Hotspot Info окна свойств гиперобъекта типа ссылка (Link Hotspot,
подробнее см. раздел 4.14). Наблюдаются лишь три отличия.
Первое, для объекта Frame в данной секции вместо поля Frame присутствует поле Default target for
links in frame (целевой фрейм по умолчанию для ссылок из текущего фрейма). Поле определяет целевой
фрейм для тех ссылок из фрейма, для которых они не заданы явно. Если в качестве источника фрейма
выбран поименованный объект Notes (например, форма) или ресурс интернета, то у последних уже может
быть определено аналогичное свойство (для формы это свойство Target Frame из объектно-событийной
панели, см. раздел 4.2.2), и оно может войти в конфликт со значением Default target for links in frame.
Поэтому рекомендуется задавать значение целевого фрейма либо у одного объекта (форма или фрейм),
либо они должны совпадать.
Второе отличие от одноименной секции гиперобъекта типа ссылки состоит в том, что при выборе у
фрейма в качестве источника поименованного объекта Notes вида или папки, в секции появляется ряд
дополнительных флагов:
•
Show action bar (отображать панель акций вида/папки);
•
Show header (отображать строку заголовков вида/папки);
• Selection tracks mouse movement (отслеживать перемещения мыши). Поднятый флаг позволяет
при перемещении указателя мыши в рамках вида, отображаемого во фрейме, выделять текущую
строку рамкой;
• Basic simple appearance (простой внешний вид). Поднятие флага при отображении календарных
видов приводит к формату вывода последних на один день. В документации приведен еще ряд
функциональных возможностей применения этого флага к календарному виду. Однако автору не
удалось воспроизвести эти примеры на практике.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
330
Третье отличие обнаруживается при попытке в качестве содержимого фрейма указать Notes
гиперссылку на БД, это приводит к появлению предупреждающего окна Domino Designer с текстом:
«Database links are not supported within framesets» (Notes гиперссылки на БД не поддерживаются во
фреймсетах).
Если по смыслу все же необходимо определить в качестве источника фрейма ссылку на некую БД
Notes, то это можно сделать через поле Туре равное URL и значение Value, соответствующее URL
открытия конкретной БД (например, http://www.inttrust.ru/Test.nsf?OpenDatabase ).
12.4.2 Frame Size - размеры фрейма
Закладка
Frame Size (размеры фрейма) имеет следующий вид:
Рис. 12.4 Закладка Frame Size окна свойств фрейма
Первая секция определяет горизонтальные (Width) и вертикальные (Height) размеры фрейма.
Каждая из размерностей задается парой полей, первое определяет собственно размер, а второе единицы измерения. Допустимыми для второго поля являются следующие значения:
•
Relative (относительное значение). Данное значение обычно имеет смысл, если для всех
связанных с этим горизонтальных или вертикальных фреймов установлено это же значение. В этом
случае данный размер фреймов определяется как дробное значение с числителем равным Relative, и
знаменателем равным сумме всех Relative для однотипных фреймов. Например, фреймсет состоит из
трех столбцов, значение поля Width первого равно 2 Relative, второго - 1 Relative, а третьего - 3
Relative. Для данного примера ширина первого столбца будет 1/3 от общей ширины главного окна,
второго столбца - 1/6, а третьего соответственно - 1/2. Желательно не использовать совместно
значения Relative и Percent (процент) для однотипных фреймов (вертикальных или горизонтальных);
•
Percent (процент). Такое значение определяет размер фрейма в процентах от общей
ширины/высоты главного окна. Желательно для всех однотипных фреймов устанавливать одинаковое
значение единиц измерения;
•
Pixels (пиксели). Определяет размер фрейма в пикселях.
По поводу размеров фрейма следует сделать замечание, что в определенных случаях поля Width и
Height недоступны на закладке. Это происходит тогда, когда высота или ширина фрейма занимает весь
размер экрана. Например, для фрейма, состоящего только из двух столбцов, будут недоступны поля
Height.
Вторая секция закладки предназначена для определения параметров вертикального «скроллинга»
(Scrolling) или «прокрутки» непомещающейся во фрейм информации, а также возможности пользователя
в момент выполнения менять размеры фрейма (Allow Resizing). Оба поля оформлены в виде
радиокнопок. Первое (Scrolling) предлагает на выбор следующие значения:
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
331
•
On (скроллинг включен). При этом значении вертикальная полоса «прокрутки» отображается, даже
если вся информация по вертикали помещается в границах фрейма;
•
Off (скроллинг выключен). Вертикальная полоса «прокрутки» не отображается, даже если вся
информация по вертикали не помещается в границах фрейма;
•
Auto (параметры скроллирования определяются автоматически). При данном выборе полоса
«прокрутки» появляется только в случае, когда содержимое фрейма не помещается в своих границах;
•
Default (параметры скроллирования по умолчанию). Соответствует значению Auto.
Поле Allow Resizing предлагает на выбор два значения:
•
Yes (да). Пользователям разрешается менять размеры фрейма в момент выполнения приложения;
•
No (нет). Пользователям запрещено менять размеры фрейма в момент выполнения приложения.
Если установлено такое значение у одного фрейма, то соответственно для соседних однотипных
фреймов (даже с установленным значением Allow Resizing равным Yes) не доступны для изменения
смежные границы. Например, если фреймсет состоит только из трех столбцов, и у среднего запрещено изменять размеры, то все фреймы приобретают это свойство (без установки
соответствующего свойства у остальных фреймов в окне их свойств). Если же в нашем примере
установить значение No только для последнего столбца, то пользователь в момент выполнения может
изменять положение границы между первым и вторым столбцом.
Секция Notes Client (в клиенте Notes) содержит единственный флаг Set Initial Focus (установить
начальный фокус), позволяющий определить фрейм, который первым станет активным при отображении
его в клиенте Notes
12.4.3 Frame B o r d e r - параметры границы фрейма
Закладка
Frame Border (параметры границы фрейма) имеет следующий вид:
Рис. 12.5 Закладка Frame Border окна свойств фрейма
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
332
Первая секция Border Style (Applies to this frame) (стиль границы, применяется к текущему фрейму)
содержит флаг 3-D border (трехмерная граница) и кнопку Apply to all frames (применить ко всем
фреймам), распространяющую значение предыдущего флага на все фреймы текущего фреймсета.
Секция Border Style (Applies to all borders in frameset) (стиль границы, применяется ко всем
границам фреймов в текущем фреймсете) содержит три поля:
•
флаг Border width Default (ширина границы по умолчанию). Поднятие флага устанавливает в
интерфейсе клиента Notes ширину границы всех фреймов равную 7 пикселям. При этом следующее
поле XXX pixels (ширина границы в пикселях) становится недоступным;
•
поле XXX pixels (ширина границы в пикселях), при опущенном предыдущем флаге позволяющее
установить ширину границы, определяемую разработчиком;
•
поле-список Border color (цвет границы), выдающее стандартный диалог определения цвета.
Секция Border Caption (Notes Client Only) (заголовок границы -только для клиента Notes) содержит
следующие элементы интерфейса:
•
поле Caption Formula (формула заголовка) и кнопка
Formula (формула) позволяют задать
формулу, определяющую текст заголовка фрейма. Где будет выводиться (и будет ли вообще
выводиться) заголовок фрейма, определяется в следующем поле;
•
список Show (отображение) предлагает на выбор одно из следующих значений:
• None (никакой) - заголовки не выводятся. При этом выборе все остальные параметры
секции теряют смысл;
• Caption only (только заголовок). Это значение допускается выбирать только для фреймов,
высота которых не занимает весь экран. Заголовок фрейма в этом случае выводится над нижней
или под верхней границей фрейма;
• Arrows only (только стрелки). Значение допустимо для всех фреймов. При этом выборе
рядом с одной из границ фрейма появляется иконка стрелки, клик по которой
«свертывает/раскрывает» содержимое фрейма, при условии возможности изменения его границ
(радиокнопка Allow Resizing - Yes с закладки Frame Size окна свойств фрейма, см. раздел 12.4.2);
• Both (обе возможности) отображает и заголовок фрейма, и стрелку из предыдущего
пункта. Значение допустимо только для фреймов, высота которых не занимает весь экран;
•
список Align (выравнивание) позволяет отображать заголовок фрейма и/или стрелки слева
(значение Left), справа (Right), сверху (Тор) или снизу (Bottom). He все значения из этого набора
допустимы для конкретного фрейма;
•
список Justify (выравнивание) позволяет выровнять заголовок фрейма и/или стрелки по левой
(значение Left), правой (Right) границе или центру (Center) строки заголовка;
•
пара полей Open (при открытии). В документации сказано, что эти поля определяют величину и
размерность текущего фрейма при открытии его кликом по границе, когда он полностью закрыт.
Автору не удалось на практике устойчиво воспроизвести данную функциональность;
•
параметры шрифта заголовка фрейма, определяемые в Font (собственно шрифт), Size (размер),
Style (стиль) и Text color (цвет текста);
•
поле Background (фон) определяет цвет фона строки заголовка фрейма.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
333
12.4.4 Advanced tab -дополнительные свойства фрейма
Закладка
Advanced tab (дополнительные свойства фрейма) имеет следующий вид:
Рис. 12.6 Закладка Advanced tab окна свойств фрейма
Закладка содержит три пары полей:
•
Frame Spacing (расстояние между фреймами). Данная группа полей распространяется на все
фреймы текущего фреймсета. Флаг Default (по умолчанию) устанавливает нулевое расстояние между
фреймами. Снятие флага делает доступным поле XXX pixels (расстояние между фреймами в
пикселях), позволяющее определить фиксированное расстояние в пикселях. Свойство Frame Spacing
XXX pixels обладает большим приоритетом, чем Border width XXX pixels с предыдущей закладки
окна свойств фрейма. Т.е., если заданы оба значения и Border width XXX pixels, и Frame Spacing
XXX pixels, то размер границы между фреймами будет определяться по полю Frame Spacing XXX
pixels;
•
две пары полей Margin Height (вертикальные поля фрейма) и Margin Width (горизонтальные поля
фрейма) определяющие отступ содержимого фрейма от его вертикальных и горизонтальных границ
соответственно. Поля воздействуют только на текущий фрейм. При поднятом флаге Default (по
умолчанию) устанавливаются поля фрейма в один пиксел. Данные свойства (Margin Height и Margin
Width) предназначены для использования только в Web-приложениях и не поддерживаются в клиенте
Notes.
12.5 Трансляция фреймсетов в Web
В общем случае объект фреймсет Notes транслируется в Web-приложениях в тег <FRAMESET ...>.
Если во фреймсете присутствуют горизонтальные и вертикальные фреймы, то такой фреймсет
транслируется вложенными фреймсетами. Например, если фреймсет состоит из двух колонок, вторая из
которых разбита на две строки, то генерируемый сервером Domino HTML-код может быть следующим:
<HTML>
<FRAMESET COLS="20%,80%">
<FRAME
NAME="a1"
SRC="/Test.nsf/abcd?OpenForm">
<FRAMESET ROWS="l*,1*">
<FRAME NAME="a2"
SRC="/Test.nsf/h?OpenView">
<FRAME
SRC="/Test.nsf/g?OpenPage">
NAME="a3"
</FRAMESET>
</FRAMESET>
</HTML>
Код сгенерированной HTML страницы был несколько упрощен для удобства восприятия. Обратите
внимание, что для фреймсетов в HTML-странице отсутствует тег <BODY ...>, это соответствует
синтаксису HTML применительно к фреймам. Каждый фрейм, в свою очередь, транслируется в тег
<FRAME...>.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
334
13 Проектирование агентов - agent
Агенты представляют собой независимые программы, предназначенные для автоматизации
определенных действий над одной или несколькими БД. Под словом «независимые» в данном контексте
понимается то, что агент жестко не привязывается к какому-либо другому элементу дизайна. Например, на
событие QuerySave формы (см. раздел 4.2.2) может быть написана собственная программа обработчик,
но она (программа) не будет являться агентом.
Агенты могут быть личными (personal) и общими (shared). Личные агенты могут быть выполнены
только пользователем, их создавшим. Общие агенты предназначены для использования их не только
своим автором. Процесс запуска и выполнения агента сильно коррелирован с системой безопасности,
принятой в организации (подробнее см. раздел 13.4).
При анализе большинства агентов, можно условно разделить сам агент на три составные части:
•
событие, определяющее момент «запуска» агента, иногда называемое триггером. Оно может
вызываться действиями пользователя (например, клик мыши по гиперобъекту «кнопка формы»,
которая содержит вызов агента) или внешними событиями (например, события таймера или приход в
БД новой почты). Не стоит путать триггер агента и документы, над которыми он выполняется (см. ниже
- критерий отбора). Другими словами, агент может запускаться по факту прихода в БД новой почты, но
обрабатывать не ее (т.е., почту), а, например, увеличивать какой-либо счетчик в документе из другой
БД;
•
критерий отбора документов - определяет набор документов, которые требуется обработать в
соответствии с программным кодом агента (см. ниже). Для агентов, написанных на языке @-формул
или с использованием простых действий, их программный код подразумевает последовательное
применение ко всем документам, удовлетворяющим критерию отбора. Для агентов, программный код
которых написан на языках LotusScript или Java, критерий отбора в основном определяется,
собственно, в программном коде. В этом случае, связь критерия отбора с программным кодом агента
очень часто осуществляется через свойство UnprocessedDocuments объекта NotesDatabase в
LotusScript или getUnprocessedDocuments объекта AgentContext в Java. В ряде контекстов для
нормальной работы таких агентов необходимо после обработки документа из коллекции
UnprocessedDocuments применять метод UpdateProcessedDoc класса NotesSession для LotusScript или
updateProcessedDoc объекта AgentContext в Java. Кстати, для агентов на LotusScript или Java критерий
отбора документов может вообще не иметь смысла. Например, агент меняет ACL БД или выполняет
файловые операции;
•
программный код - собственно те действия, которые агент выполняет. Как уже упоминалось,
допускается использование следующих языков программирования: простые действия, @-формулы,
LotusScript и Java.
13.1 Создание нового агента
Создание нового агента можно осуществить через пункты меню Create -> Design -> Agent. При этом
в рабочую панель Domino Designer загружается объектно-событийная панель и панель программного кода.
Панель тела элемента дизайна для агента не грузится, т.к., агент не является визуальным элементом
дизайна. После создания и сохранения агента к нему можно получить доступ из папки элементов дизайна
Shared Code -> Agents.
Одновременно с загрузкой панелей агента выводится его окно свойств. Специальной команды для
вывода окна свойств, уже загруженного в рабочую панель агента, нет. Можно воспользоваться меню Edit > Properties, и если, при этом, будет выведено окно Programmer's pane (программной панель), то кликом
по раскрывающемуся заголовку окна свойств следует «спуститься» до свойств агента.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
335
Рис. 13.1 Окно свойств программной панели
Рассмотрим подробнее окно свойств агента.
13.1.1 Basics tab - основные свойства агента
Закладка
Basics tab (основные свойства агента) имеет следующий вид:
Рис. 13.2 Закладка Basics tab окна свойств агента
В первой секции расположены два поля:
• Name (имя) - предназначено для определения имени агента. Синтаксические правила определения
имени агента аналогичны правилам задания имени формы (см. раздел 4.1.1). Notes позволяет для
агентов, отображаемых в меню Actions (подробнее см. ниже в текущем разделе), создавать
двухуровневые меню. Для этого необходимо в имени агента отделять один уровень от другого
символом обратного слеша ("\"). Также в имени агента по синтаксису может присутствовать:
• синоним или алиас, отделенный от имени символом вертикальной черты («|»);
• «горячая» клавиша, символ которой должен предваряться знаком подчеркивания ("_").
При сохранении агента, вызываемого из списка агентов (Manually From Agent List, подробнее см.
ниже в текущем разделе), имя его отображается в папке агентов заключенным в круглые скобки. При
вызове такого агента программным способом нужно так же указывать имя агента в скобках. Например,
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
336
@Command([ToolsRunMacro];"(MyAgent)")
• Comment (комментарии) используется для добавления комментариев к агенту. Значение из этого
поля не влияет на поведение агента, а только отображается в одноименном столбце папки Agents.
Секция Options (параметры) содержит следующие элементы интерфейса:
• радиокнопки Shared (общий) и Private (личный) определяющие тип агента. Личный агент может
вызывать только пользователь его создавший, в то время как общий агент могут применять
пользователи, имеющие на то соответствующие права. Начиная с 6-й версии, можно изменять тип
агента после его сохранения;
•
флаг Show search in search bar menu (отображать имя агента в меню панели поиска). При
поднятии флага имя агента отображается среди сохраненных поисковых запросов текущей БД. Если в
агенте определен критерий отбора документов (будет рассмотрено позднее), то при выборе имени
агента в панели поиска, критерий отбора переносится в строку поискового запроса (сам агент при этом
не выполняется). Запуск на выполнение такого поискового запроса аналогичен запуску обычного
запроса (т.е., по кнопке Search);
•
флаг Store highlights in documents (сохранять в документе пометки выделения). Данный флаг не
очень хорошо документирован. Исходя из названия, он, вроде бы, должен «оставлять» в документе
пометки о словах и фразах, удовлетворяющих критерию отбора. Однако, в каком контексте и для каких
агентов данный механизм должен работать, в документации не сказано;
•
флаг Run in background client thread (выполнять в фоновом потоке клиента). Поднятие флага
заставляет агента выполняться в фоновом режиме, т.е., система не будет дожидаться окончания
работы агента, а продолжит выполнять другие действия. Флаг доступен только для агентов,
запускаемых из меню Action. В рамках таких агентов нельзя обращаться к объектам переднего плана
(например, к полям открытого документа).
Секция Runtime (на шаге выполнения) содержит следующие элементы интерфейса:
• радиокнопки Trigger (триггер) со значениями On event (по событию) и On schedule (по расписанию)
определяют общий тип триггера агента;
• поле-список, определяющий конкретный тип триггера. Значение этого и нижеследующего поля
Target (цель) контекстно зависит от типа триггера. Перечислим допустимые значения этого поля
совместно с Target:
• Actions menu selection (запуск «вручную» из меню Actions). В интерфейсе клиента Notes
такие агенты можно запускать на выполнение из меню Actions. Помимо запуска из меню Actions,
данные агенты допускается активировать из других элементов дизайна (например, из акции формы
по @-команде ToolsRunMacro), а также программным путем (например, из другого агента).
Использование агентов в Web-приложениях будет рассмотрено позднее в разделе 13.5. Для
Actions menu selection агентов значение поля Target может быть следующим:
•
All documents in database (все документы в БД). Это значение не накладывает
дополнительных ограничений на критерий отбора документов;
•
All new & modified documents (все новые и модифицированные документы с
момента последнего старта агента). Для корректной работы таких агентов, написанных на языках
LotusScript и Java, необходимо правильно использовать свойство UnprocessedDocuments объекта
NotesDatabase, и обязательно после обработки конкретного документа применить метод
UpdateProcessedDoc класса NotesSession для LotusScript или getUnprocessedDocuments объекта
AgentContext и UpdateProcessedDoc объекта AgentContext в Java;
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
337
•
All unread documents in view (все непрочтенные документы в виде). Для
корректной работы таких агентов необходимо, чтобы на момент выполнения агента в окне
клиента Notes отображался какой-нибудь вид или папка. В противном случае (например, при
открытом документе) в строку состояния клиента Notes будет выдано предупреждающее
сообщение: "Action Failed, This agent must be run from a view window" (действие не выполнено,
этот агент должен выполняться из окна вида). Также на данный критерий отбора документов
влияют свойства БД Don't maintain unread marks (см. раздел 2.3.7) и Do not mark modified
documents as unread (см. раздел 2.3.4). Если установлен первый флаг, то агент в данном
контексте не обработает ни один документ. Поднятый второй флаг не даст агенту обрабатывать
измененные документы, которые перед этим были прочтены автором агента. Параметры
вида/папки, связанные с отображением непрочтенных документов, не влияют на критерий отбора
рассматриваемого типа агентов;
•
All documents in view (все документы в виде). По аналогии с предыдущим пунктом,
на момент выполнения агента в окне клиента Notes должен отображаться какой-нибудь вид или
папка;
•
Selected documents (выбранные документы). По аналогии с двумя предыдущими
пунктами, на момент выполнения агента в окне клиента Notes должен отображаться какой-нибудь
вид или папка. Если в текущем виде в столбце специальных пометок (selection margin см.
раздел 6.2.3) «помечены» ряд документов, то агент будет выполнен над этими документами.
Если таких пометок нет - агент обработает только текущий документ (т.е., тот, на котором стоит
световой маркер). После выполнения агента специальные пометки (при их наличии) с
обработанных документов обычно «снимаются»;
•
None (никакой). Агент выполняется однократно. При данном выборе из объектнособытийной панели исчезает объект Document Selection (критерий отбора документов), который
используется для определения критерия отбора документов. Однако, если в программном коде
агента, написанном на языке @-формул, присутствует оператор SELECT, то он накладывает
дополнительные ограничения на применимость данного агента к конкретным документам. Очень
часто None-агенты используются в Web-приложениях. В интерфейсе клиента Notes такие агенты
в контексте вида обрабатывают текущий документ, аналогичная картина наблюдается и если в
окне Notes открыт документ.
Вернемся в секцию Runtime, и перейдем к рассмотрению следующего триггера агентов:
• Agent list selection (запуск «вручную» из списка агентов). Имя таких агентов не появляется
в меню Actions. Данная опция обычно применяется для агентов, которые активизируются
программным путем. Для этого типа агентов значения критерия отбора документов из поля Target
совпадает с рассмотренными ранее значениями в контексте агента Actions menu selection;
• Before new mail arrives (выполняется перед приходом в БД новой почты). Данный тип
агентов предназначен для обработки почтовых сообщений, пришедших в БД, до момента их
размещения в собственно БД. Так как агент выполняется до момента внесения в БД почтового
сообщения, то не все операции допустимы в таком агенте. Например, выбор в качестве тела агента
простого действия Mark Document Read (пометить документ как прочтенный) не приведет к
ожидаемому результату. Это связано с тем, что после выполнения агента, пришедшее почтовое
сообщение будет внесено в БД и соответственно помечено как новое, т.е., непрочтенное. Следует
обратить внимание на то, что агенты с опцией Before new mail arrives не являются фоновыми
агентами, поэтому на возможность их выполнения не влияет свойство БД Disable background
agents for this database (см. раздел 2.3.1). Если рассматривать такие агенты более глубоко, то
можно отметить, что процесс их запуска и выполнения не зависит и от серверной задачи Agent
Manager, т.е., они могут выполняться даже при выгруженной задаче Agent Manager. Общее
администрирование Before new mail arrives агентов осуществляется в серверном документе
Configuration Settings (подробнее см. раздел 13.4). После своего создания и сохранения Before new
mail arrives агент может быть включен/выключен в процесс обработки входящей почты. Это
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
338
достигается либо посредством пункта меню Agent -> Enable, либо через одноименную кнопку,
расположенную вверху папки агентов Domino Designer. Здесь под «выключением из процесса
обработки входящей почты» подразумевается то, что агент в БД присутствует, но по факту прихода
в БД новой почты не стартует. Агенты Before new mail arrives, независимо от своего статуса
«включен/выключен», могут быть активированы так же и программным путем (например, в акциях
формы). Агенты Before new mail arrives могут быть только общими (Shared). При попытке
сохранения личного агента с этой опцией будет выдано предупреждающее окно со следующим
текстом: «This type of agent cannot be private» (данный тип агента не может быть личным). Кроме
этого в любой БД может быть только один включенный Before new mail arrives агент. Попытка
включить второй такой агент приводит к предупреждающему окну с текстом: «Only one agent of this
type can be enabled per database. Do you wish to disable agent 'имя_другого_агента'>> (только один
агент данного типа может быть включен для БД. Желаете ли Вы отключить агент
'имя_другого_агента'). После выбора в качестве триггера агента значения Before new mail arrives
становится недоступным для редактирования поле Target, которое приобретает значение - Each
incoming mail document (каждое входящее почтовое сообщение). При данном выборе из
объектно-событийной панели исчезает объект Document Selection;
• After new mail has arrived (выполняется после прихода в БД новой почты). Данный тип
агентов предназначен для обработки почтовых сообщений, пришедших в БД, после момента их
размещения в БД. Этот тип агента по умолчанию предназначен для выполнения только на одном
сервере в пределах Каталога Domino (Domino Directory). Такое ограничение наложено для запрета
массовых однотипных почтовых рассылок в случае, когда существует несколько реплик на разных
серверах текущей БД с включенным After new mail has arrived агентом. Точнее, по умолчанию
такой агент будет выполняться только на home сервере пользователя, последний раз
модифицирующего агент. Для изменения такого поведения агента (т.е., для выполнения его во
всех репликах текущей БД) нужно установить переменную AMgr_DisableMailLookup из файла
NOTES.INI сервера в значение 1. К сожалению, данные факты не нашли своего отражения в
стандартной документации. Однако, в форуме компании Iris автором Julie Kadashevich достаточно
подробно и обстоятельно рассмотрены многие вопросы, касающиеся проблем работы агентов (см.
например,http://www-10.lotus.com/ldd/today.nsf/0/4897c5b8c2737e088525674300751711?OpenDocument ).
Остальные
документы по этой теме можно найти, открыв форум компании Iris по виду Author (например,
http://www-10.lotus.com/ldd/today.nsf/Author?OpenView ), и затем в виде перейти к автору Julie
Kadashevich. Вернемся опять к, собственно, агенту. При выборе опции After new mail has arrived
становится недоступным для редактирования поле Target, которое приобретает значение - Newly
received mail documents (последние полученные почтовые сообщения). Однако, в отличие от
Before new mail arrives агентов, у After new mail has arrived агентов остается доступным объект
Document Selection из объектно-событийной панели. Следующее отличие состоит в том, что After
new mail has arrived агенты являются фоновыми агентами, и, следовательно, могут быть
отключены поднятием у БД флага Disable background agents for this database. Из общих черт
агентов Before new mail arrives и After new mail has arrived можно отметить то, что последние
могут быть включены/выключены в процесс обработки входящей почты, а также активированы
программным путем. Еще одно отличие проявляется в том, что в БД может быть несколько
включенных After new mail has arrived агентов, и, кроме этого, они могут быть как общими, так и
личными;
• After documents are created or modified (выполняется после появлении в БД новых или
модифицированных документов). Это фоновый тип агента, факт старта которого определяется
появлением в БД новых или модифицированных документов. При выборе опции After documents
are created or modified становится недоступным для редактирования поле Target, которое
приобретает значение - Newly modified documents (последние модифицированные документы).
Для этого типа агентов доступен для редактирования объект Document Selection из объектнособытийной панели. Кроме этого в окне свойств появляется кнопка Edit settings (редактировать
настройки), по нажатию на которую выдается модальное окно Agent Schedule (расписание работы
агента). Оно состоит из трех секций, первая - в данном случае пустая, а две вторые - идентичны
аналогичным секциям, которые будут рассмотрены позднее в контексте агентов по расписанию.
Агенты After documents are created or modified могут быть включены или выключены, в одной БД
может быть несколько включенных агентов данного типа. Допускается использование как общих,
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
339
так и личных After documents are created or modified агентов. Если в БД имеются включенные
почтовые агенты (Before new mail arrives и/или After new mail has arrived), а также включенные
After documents are created or modified агенты, то по факту прихода новой почты выполнятся оба
типа агентов;
• When documents are pasted (выполняется при внесении в БД новых документов из
буфера обмена). Данный тип агентов не является фоновым. Такие агенты не могут быть
выключены «вручную», т.е., после своего сохранения они всегда включены. В одной БД может быть
несколько When documents are pasted агентов как личных, так и общих. Если в БД имеются
включенные After documents are created or modified и When documents are pasted агенты, то по
факту внесения в БД новых документов из буфера обмена выполнятся оба типа агентов. При
выборе опции When documents are pasted становится недоступным для редактирования поле
Target, которое приобретает значение - Pasted documents (документы, вставляемые из буфера
обмена). Для этого типа агентов доступен для редактирования объект Document Selection из
объектно-событийной панели. Данный тип агентов не может быть вызван программным путем,
такая попытка приводит к выводу в строке состояния клиента Notes предупреждающего сообщения
с текстом: «This agent cannot be run manually. It will only be run when documents are pasted into the
database» (Этот агент не может быть запущен на выполнение «вручную». Он выполняется только
по факту прихода в БД документов из буфера обмена).
Возвращаемся опять к радиокнопкам Trigger из секции Runtime. Нерассмотренным осталось
значение On schedule (по расписанию). При таком выборе в поле-списке, определяющем конкретный тип
триггера, представлены следующие значения:
• More than once a day (по расписанию более одного раза в день). Фоновый агент,
выполняемый по расписанию. При выборе этой опции становится доступным для редактирования
поле Target. Для этого поля допустимыми являются следующие значениями:
•
All documents in database (все документы в БД);
•
All new & modified documents (все новые и модифицированные документы с
момента последнего старта агента). Оба значения уже были рассмотрены в контексте Manually
From Actions Menu агентов.
Кроме этого, для More than once a day агентов становится доступным для редактирования объект
Document Selection из объектно-событийной панели, а также кнопка Schedule (расписание). По нажатии
на эту кнопку выдается модальное диалоговое окно:
Рис. 13.3 Модальное диалоговое окно Schedule
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
340
Рассмотрим подробнее элементы интерфейса данного окна.
В первой секции Run Agent More Than Once a Day (выполнять агента более одного раза в день)
содержит следующие элементы интерфейса:
• два поля типа список Run agent every XXX hour(s) YYY minutes (запускать на выполнение каждые
XXX часов и YYY минут) позволяют определить интервал между последовательными «запусками»
данного агента. Минимальный квант времени для часовой составляющей - 1 час, а для минутной - 1
минута. Т.е., с помощью этих двух полей можно создать агентов, стартующих в пределах от 1 минуты
(это может серьезно сказаться на производительности сервера) до 11 часов 59 минут. В реализации
интерфейса минутной составляющей расписания агента имеется ошибка, подтвержденная IBM. В поле
минутной составляющей можно с клавиатуры ввести любое допустимое значение (например, 7 минут).
После сохранения агента, закрытия и повторного открытия окна Agent Schedule, в поле минутной
составляющей будет отображаться округленное, по отношению к введенному, значение кратное пяти.
Однако выполняться такой агент будет в соответствии с введенным (а не отображаемым) значением
минутной составляющей;
• радиокнопки Between times (в интервале времени) и All days (каждый день). При выборе Between
times становятся доступными два поля для определения конкретного интервала времени, который
накладывает дополнительные ограничения на расписание агента. В этом случае агент, обычно,
первый раз будет запущен по прошествии времени из первого интервального поля согласно
серверному таймеру. Время последующих запусков будет определяться в соответствии с полем Run
agent every XXX hour(s) YYY minutes, и после наступления времени из конечного поля интервала
времени агент перестанет выполняться. Под словом обычно здесь подразумевается, что на время
запуска агента еще оказывает влияние система безопасности, принятая в организации. Если же
выбрана радиокнопка All days, то агент, обычно, первый раз будет запущен после того, как он станет
Enable.
В следующей секции Restrict Dates When Agent Runs (ограничения по датам на время выполнения
агента) представлены три доступных флага: Start running agent on this date (запускать агент, начиная с
указанной даты), Stop running on this date (прекратить запуск агента после указанной даты) и Don't run
on weekends (не запускать агент по выходным дням). После поднятия первых двух флагов становятся
доступными для редактирования текстовые поля, в которых необходимо определить конкретные
предельные даты «запуска» агента. Поднятый флаг Don't run on weekends препятствует запуску агента
по выходным дням. По умолчанию это суббота и воскресенье, администратор сервера может изменить эти
значения с помощью переменной AMgr_WeekendDays из файла NOTES.INI.
Последняя секция Where The Agent Runs (где агент будет выполняться) определяет, на каком
сервере будет выполняться текущий агент. Данная возможность используется для БД, которые имеют
реплики на разных серверах домена. В этом случае, если один и тот же агент будет выполняться сразу в
нескольких репликах одной БД, то это может привести к конфликту репликаций. Поле-список Run on
(выполнять на) предлагает на выбор доступные для текущей сессии серверы, а также значения Local
(локально) и -Any Server- (любой сервер), разрешающие выполнять агент только локально и на любых
серверах, содержащих реплику текущей БД.
Поднятый флаг секции Choose when agent is enabled (осуществлять выбор сервера при
«включении» агента) делает недоступным предыдущее поле, и при «включении» агента в интерфейсе
Domino Designer появляется модальное окно, содержащее единственное поле, аналогичное Run on, в
котором можно выбрать сервер, выполняющий этого агента.
В завершении рассмотрения модального окна Schedule, хотелось бы отметить тот факт, что в
клиенте Notes, начиная с версии R 5, стало возможным автоматически «запускать» фоновые агенты по
расписанию и для локальных БД. За данную возможность отвечает флаг Enable scheduled local agents
(разрешить запуск по расписанию для локальных агентов). Флаг расположен на закладке Basics окна User
Preferences (доступ через меню File -> Preferences -> User Preferences). Вернемся к окну свойств агента
и перейдем к рассмотрению следующего типа триггера:
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
341
• Daily (пo расписанию один раз в день). Фоновый агент, выполняемый по расписанию раз в
день. Для данного типа агентов доступны для редактирования: поле Target, объект Document
Selection из объектно-событийной панели, а также кнопка Schedule. Значения и смысл всех этих
элементов интерфейса (за исключением Schedule) аналогичны More than once a day агентам. В
модальном окне Schedule изменилась первая секция. В ней присутствует единственное поле Start
running agent at (запускать агент на выполнение во время), определяющее время запуска агента;
• Weekly (по расписанию один раз в неделю). Фоновый агент, выполняемый по расписанию
раз в неделю. Для данного типа агентов доступны для редактирования, поле Target, объект
Document Selection из объектно-событийной панели, а также кнопка Schedule. Значения и смысл
всех этих элементов интерфейса (за исключением Schedule) аналогичны More than once a day
агентам. В модальном окне Schedule стал недоступен для редактирования флаг Don't run on
weekends, а также изменилась первая секция. В ней появились поля: On day (стартовать агента в
указанный день) и At time (в указанное время), определяющие день недели и время запуска агента
соответственно;
• Monthly (по расписанию один раз в месяц). Фоновый агент, выполняемый по расписанию
раз в месяц. Для данного типа агентов доступны для редактирования: поле Target, объект
Document Selection из объектно-событийной панели, а также кнопка Schedule. Значения и смысл
всех этих элементов интерфейса (за исключением Schedule) аналогичны On Schedule Weekly
агентам. В модальном окне Schedule изменилась первая секция. В ней появились поля On day
(стартовать агента в указанный день) и At time (в указанное время), определяющие дату и время
запуска агента соответственно;
• Never (по расписанию никогда). Данный триггер обычно применяется для агентов,
вызываемых из контекста других агентов. По отношению к другим агентам по расписанию у On
Schedule Never недоступна кнопка Schedule.
13.1.2 Security tab - параметры безопасности агента
Закладка
Security tab (параметры безопасности агента) имеет следующий вид:
Рис. 13.4 Закладка Security tab окна свойств агента
В первой секции расположены следующие элементы интерфейса:
•
флаг Run as web user (выполнять агента под правами Web-пользователя). При запуске агента в
интерфейсе браузера, если этот флаг не поднят, то права на выполнение агента будут определяться
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
342
правами пользователя, последний раз модифицирующего данный агент. При поднятии флага, права
на выполнения агента будут определяться правами пользователя, запускающего этот агент;
•
поле Run on behalf of (выполнять агента от имени другого пользователя) и кнопка
Browse for a
name (просмотр имен) позволяют определить пользователя, под правами которого будет выполняться
агент. Данный флаг сильно коррелирован с системой безопасности Domino, связанной с выполнением
агентов (будет рассмотрена позднее в разделе 13.4). Пользователи, которым разрешается выполнять
только ограниченных по возможностям агентов, не могут выполнять агентов под правами другого
пользователя. В этом случае, в момент выполнения агента возникнет ошибка. Пользователи, которым
разрешается выполнять неограниченных по возможностям агентов, а также пользователи, которым
разрешено выполнять агентов под правами любых других пользователей, могут выполнять такие
агенты. Пользователь, под правами которого выполняется агент, должен присутствовать в ACL БД или
быть полным администратором сервера (Full Access administrator). Если Run on behalf of агент
создает или отправляет документы по почте, то автором этих документов будет выступать
пользователь из поля Run on behalf of;
•
один из флагов:
• для агентов на LotusScript - Allow remote debugging (разрешить удаленную отладку). Флаг
предоставляет возможность удаленной отладки серверных LotusScript агентов. Подробно этот
механизм будет рассмотрен в разделе 18.7;
• для агентов на Java - Compile Java code with debugging information (компилировать Java
код с использованием отладочной информации). Поднятый флаг может использоваться для
отладки таких агентов в стороннем Java-отладчике. Подробно этот механизм будет рассмотрен в
разделе 18.9;
•
флаг Allow user activation (разрешить пользователям активировать агента). Поднятый флаг
разрешает пользователям с правами Редактора из ACL включать/выключать данного агента.
Операция включения/выключения агента осуществляется из интерфейса клиента Notes через меню
View -> Agents. Выполнение операции включения/выключения агента не ведет к его переподписанию.
При этом, в папке Domino Designer с агентами, у последних в колонке Last Modified By (кто последний
модифицировал агента) отображается имя пользователя, включившего/выключившего данный агент.
Такая же картина наблюдается в поле Modified By с закладки Info tab свойств агента как элемента
дизайна верхнего уровня (см. раздел 3.1). Реальное значение имени пользователя, подписавшего
агент, можно увидеть на закладке Design tab в секции Signer:
Рис. 13.5 Закладка Design tab окна свойств агента как элемента дизайна с секцией Signer
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
343
•
флаг Profile this agent (создание профильного документа для агента). Поднятие флага ведет при
вызове агента к созданию специального профильного документа, в который записываются:
используемые в агенте классы, методы и свойства, число вызовов и время затраченное на их
выполнение, а также общее время выполнения агента. Для просмотра такого профильного документа
используется меню Agent -> View Profile Results. Если агент еще ни разу не выполнялся, то выдается
сообщение: «No profiling information ia available.» (нет доступной профильной информации). В
противном случае отображается профильный документ агента:
Рис. 13.6 Профильный документ агента
•
поле-список Set runtime security level (установка уровня безопасности на шаге выполнения
агента), предлагающий на выбор следующие значения:
• 1. Do not allow restricted operations (не разрешать выполнять в агенте операции, которые
можно использовать в неограниченных по возможностям агентах). Данное значение запрещает в
теле агента использовать указанные операции. В противном случае на шаге выполнения агента
произойдет ошибка, даже в случае, если агент будет выполнять под правами пользователя,
которому разрешено выполнять неограниченных по возможностям агентов;
• 2. Allow restricted operations (разрешить выполнять в агенте операции, которые можно
использовать в неограниченных по возможностям агентах). Данный выбор разрешает для
уполномоченных пользователей выполнять в теле агента операции, которые можно использовать в
неограниченных по возможностям агентах;
• 3. Allow restricted operations with full administration rights (разрешить выполнять в
агенте операции, которые можно использовать в неограниченных по возможностям агентах с
правами полного администратора сервера). В дополнение к предыдущему значению агент может
выполняться с правами полного администратора сервера. Для успешного выполнения таких
агентов, пользователь, под правами которого выполняется агент, должен обладать правами
полного администратора сервера.
Секция Default access for viewing and running this agent (доступ по умолчанию для просмотра и
выполнения данного агента) определяет, кто может видеть и выполнять данного агента. По умолчанию
доступ определяется поднятым флагом All readers and above (все пользователи с уровнем доступа в ACL
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
344
читатель и выше). При снятии флага становятся доступными поле со списком всех пользователей и ролей
из ACL БД и кнопка
. В поле со списком можно проставить «галочку» напротив требуемого пользователя
или роли, а по кнопке
можно добавить новых пользователей из адресной книги.
В последней секции присутствует флаг Allow Public Access users to view and run this agent
(разрешить видеть и выполнять агента пользователям с уровнем доступа «Общедоступный»). Поднятый
флаг предоставляет пользователям, даже с уровнем «Нет доступа», но с поднятым в ACL флагом Write
public documents (возможность создавать общедоступные документы), получать доступ на просмотр и
запуск к таким агентам. Флаг Allow Public Access users to view and run this agent обладает более низким
приоритетом по отношению к секции Default access for viewing and running this agent. Говоря другими
словами, если опущен флаг All readers and above, то пользователи, которые не видят агента на
основании значений списочного поля секции, не будут его видеть даже при поднятом флаге Allow Public
Access users to view and run this agent и наличии соответствующего доступа.
13.2 Действия агента, определяемые в программной панели
Перейдем к рассмотрению программной панели агента. Поле Run (выполнять) задает язык
программирования для агента. Допустимыми значениями для Run являются: Formula (язык @-формул),
Simple action(s) (простые действия), LotusScript, Imported Java (применение импортированных, т.е.,
внешних классов языка Java) и просто Java.
При выборе значения Formula и после сохранения агента, по умолчанию к коду, введенному в
программной панели, добавляется оператор SELECT @AII (за исключением агентов, у которых в поле
Target стоит значение None). Этот оператор говорит о том, что помимо критерия отбора, определяемого в
объекте Document Selection, отбираются все документы. Разработчик имеет возможность изменить
данный оператор (например, на SELECT Form = "My_form"), единственная рекомендация - оператор
SELECT должен быть первым в формуле агента. Если определен и критерий отбора, и оператор SELECT,
то они работают совместно по принципу логического И. Для программного кода на языке @-формул в
правом нижнем углу программной панели появляется дополнительное поле со значениями: Modify
documents (модифицировать документы), Create new documents (создавать новые документы) и Select
documents in view (выбирать документы в виде). Если выбрано значение Modify documents, то
программный код агента применяется ко всем документам, удовлетворяющим критерию отбора. Значение
Create new documents заставляет сначала создать для всех документов, удовлетворяющих критерию
отбора, их копии, а затем применить к ним (копиям) тело агента. Значение Select documents in view
позволяет «пометить» в виде документы, удовлетворяющие критерию отбора агента. Тело агента при
этом не выполняется. Для корректной работы такого агента, он должен быть либо Actions menu selection,
либо Agent list selection, а в поле Target выбрано значение All documents in database или All
documents in view.
Выбор в качестве языка агента простых действий (Simple action(s)) позволяет задать тело агента на
основе предопределенных операций. С точки зрения интерфейса, все они идентичны рассмотренным
ранее простым действиям в контексте акций формы (см. раздел 4.8.6).
Для агентов, использующих
присутствуют четыре объекта:
язык
LotusScript,
в
объектно-событийной
панели
изначально
•
(Options) (параметры) - предназначен для объявления неисполняемых операторов на уровне
объекта агент. Аналогично одноименному объекту формы (см. разделы 4.2.1 и 4.2.2);
•
(Declarations) (описания) - предназначен для объявления переменных и констант на уровне
объекта агент;
•
Initialize (инициализация) - обработчик события по факту «загрузки» объекта агент. Обычно все
основные действия агента на языке LotusScript размещаются в этой процедуре;
•
Terminate (завершение) - обработчик события по факту выгрузки объекта агент из памяти.
Реально событие происходит после отработки Initialize агента.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
345
Разработчик может добавить и свои функции или подпрограммы, вызываемые из Initialize или
Terminate. Один из способов сделать это - ввести код функции/подпрограммы на следующей за End Sub
строке в Initialize или Terminate.
Для программирования агента на языке Java, с использованием встроенного в Domino/Notes
компилятора необходимо выбрать в поле Run программной панели значение Java. После этого в
программной панели будет сформирован «шаблон» для тела агента:
import
lotus.domino.*;
public class JavaAgent extends AgentBase {
public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
// (Your code goes here)
} catch(Exception e)
{
e.printStackTrace
();
}
}
}
Разработчик пишет свой собственный код на Java на месте (или после) строки комментария // (Your
code goes here). Кроме этого, могут встречаться случаи, когда необходимо подключать дополнительные
Java модули оператором import в начале шаблона агента, а также изменять обработку исключительных
ситуаций в блоке catch.
В нижней части программной панели представлены четыре кнопки: Edit Project (редактировать
проект), New Class (создать новый класс), Export (экспорт) и Compile (компилировать). Кнопка New Class
создает в проекте агента новый пустой класс с именем Untitled. Кнопка Compile компилирует исходный код
агента. Нажатие на кнопку выдает дополнительное меню, состоящее из двух пунктов: Compile
JavaAgent.java (компилировать только исходный код класса JavaAgent) и Compile All (компилировать все
файлы проекта). Если в процессе компиляции обнаружатся ошибки, то они будут отображены в строке
Errors. При отсутствии в коде синтаксических ошибок в строке Errors будет выдано сообщение Successful
compile (компиляция прошла успешно). Обратите внимание, что перед выполнением агента после его
успешной компиляции, необходимо сначала сохранить агент. Кнопка Export позволяет экспортировать
исходный код составляющих проекта агента в виде соответствующих файлов. При нажатии на кнопку
выдается диалоговое окно для выбора директории, куда необходимо осуществить экспорт составляющих
агента.
Кнопка Edit Project позволяет оперировать с составляющими проекта Java-агента. По нажатии на эту
кнопку выдается модальное окно:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
346
Рис. 13.7 Модальное окно Organize Java Agent Files
Использовать данное окно имеет смысл в случае, если разработчик использует в агенте сторонние
ресурсы на Java или свои Java классы и/или библиотеки, хранимые в текущей БД. Окно разделено на две
секции Available Java Files (доступные Java файлы) и Current Agent Files (файлы текущего агента).
Начнем рассмотрение с секции Available Java Files. Поле Browse (просмотр) позволяет выбирать
доступные Java ресурсы либо из файловой системы рабочей станции разработчика (значение поля Local
File System), либо из Java библиотек, хранимых в текущей БД (значение Shared Java Libraries). Если
выбор Java ресурсов осуществляется из файловой системы, то в секции становится доступным поле Base
directory (базовая директория). После выбора базовой директории в окне-списке, расположенном ниже,
отображаются допустимые файлы и поддиректории. Типы отображаемых файлов определяются группой
флагов Show file types (отображаемые типы файлов):
•
Аll
(все) - отображать все типы файлов;
•
Class (классы) - отображать файлы с расширением *.class;
•
Archive (архивы) - отображать файлы с расширением *.jar;
•
Source (исходный код) - отображать файлы с расширением *.java;
•
Resource (ресурсы) - отображать файлы графики (*.jpg и *.gif).
Если выбор Java ресурсов осуществляется из Java библиотек, хранимых в текущей БД, то флаги
Show file types не влияют на отображение существующих Java библиотек.
Кнопка Add/Replace All (добавить/заменить все составляющие проекта) «переносит» все доступные
компоненты из поля-списка секции Available Java Files в аналогичное поле секции Current Agent Files.
Причем, для Local File System переносятся все доступные (в соответствии с Show file types) файлы и из
поддиректорий базовой директории. Одноименные компоненты будут замещаться и отображаться в поле
секции Current Agent Files красным цветом. Кнопка Add/Replace File(s) (добавить/заменить конкретные
файлы) «переносит» в аналогичное поле секции Current Agent Files только выбранные в секции Available
Java Files файлы.
Секция Current Agent Files содержит следующие элементы интерфейса:
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
347
•
поле-список Base class (базовый класс). В контексте агентов не рекомендуется менять значение
этого поля (по умолчанию JavaAgent.class);
•
поле-список с файлами проекта;
•
кнопки Reorder Up (переупорядочить со сдвигом вверх) и Reorder Down (переупорядочить со
сдвигом вниз) изменяют порядок следования файлов проекта. В контексте агентов, у которых в поле
Run стоит значение Java (но не Imported Java), изменение порядка следования файлов
дополнительной функциональности не несет;
•
кнопка Delete (удалить) позволяет удалить выбранный(е) файл(ы) проекта;
•
кнопки Refresh (обновить) и Refresh All (обновить все) обновляют содержимое файлов проекта на
основании содержимого аналогичного поля из секции Available Java Files.
Опять возвращаемся в программную панель агента. Нерассмотренным осталось только одно
значение в поле Run, а именно Imported Java. Это значение предназначено для определения тела агента
на основе языка Java, но компиляция исходного кода в Java байт код производится в стороннем продукте
(не Domino/Notes, например, IBM Rational Software Development Platform v 6). Для Imported Java агентов в
левом нижнем углу Agent Builder расположена кнопка Import Class Files (импорт Java файлов *.class для
нового агента), или Reimport Class Files (реимпорт Java файлов *.class для агента, уже содержащих
импортированные Java файлы). По нажатию на эти кнопки появляется модальное окно Define Java Agent
Files или Reimport Java Files. Само окно, с точки зрения интерфейса, очень похоже на Organize Java
Agent Files (см. Рис. 13.7). Основное предназначение окна состоит в определение Java файлов *.class,
которые будут выполняться по факту «запуска» агента. Исходный код Java файлов агента должен
соответствовать требованиям Domino (т.е., базироваться на Java классах, предназначенных для агентов).
Для этого при компиляции исходного кода агентов в стороннем ПО нужно подключать соответствующие
файлы Java архивов, поставляемых с Domino/Notes (подробнее см. документацию). В заключение об
Imported Java агентах можно сказать, что вместо данного типа практически всегда можно использовать
просто Java агентов. Скорее всего, Imported Java агенты оставлены для совместимости с предыдущими
версиями Domino/Notes (в R 4.x сначала поддерживались только Imported Java агенты).
В завершение настоящего раздела приведем, исключительно ради примера, четыре типа агентов
(Simple action(s), Formula, LotusScript и Java), которые перемещают выделенные в виде/папке
документы в папку с именем Proba.
Пример 1. На языке Simple action(s). В окне свойств агента выбраны следующие значения: для поля
Trigger - On event и Action menu selection, а для поля Target - Selected documents. В качестве действия
в окне Add Action для поля Action выбрано значение Move to Folder, а для поля Move documents to
folder - Proba.
Пример 2. На языке Formula. Настройки этого агента соответствуют предыдущему примеру, за
исключением поля Target, в котором стоит значение None. Последнее связано с тем, что тело агента
будет содержать @-команды, а они должны выполняться однократно. Тем не менее, @-команда Folder
будет выполнена над выделенными документами. Код агента следующий:
@Command( [Folder] ; "Proba" ; " 1 " ) ;
Пример 3. Модифицированный пример 2. Агент только копирует выделенные документы в папку
Proba, но не удаляет их из текущей папки. Если известно имя текущей папки, то можно указать это имя в
качестве второго параметра @-функции для их удаления из текущей папки. Настройки агента полностью
соответствуют примеру 1. Код агента следующий:
@AddToFolder( "Proba" ;"" );
Пример 4. На языке LotusScript. Настройки агента полностью соответствуют примеру 1. Агент только
помещает выбранные документы в папку, без удаления из текущей. Код агента следующий:
Sub Initialize
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
348
Dim session As New NotesSession
Dim db As NotesDatabase
Dim coll As NotesDocumentCollection
Set db = session.CurrentDatabase
Set coll
= db.UnprocessedDocuments
Call coll.PutAllInFolder(
"Proba" )
End Sub
Пример 5. На языке Java. Настройки агента полностью соответствуют примеру 1. Агент только
помещает выбранные документы в папку, без удаления из текущей. Код агента следующий:
import
lotus.domino.*;
public class JavaAgent extends AgentBase {
public void NotesMain() {
try {
Session session = getSession();
AgentContext
//
agentContext
=
session.getAgentContext();
(Your code goes here)
Database
db
= agentContext.getCurrentDatabase();
DocumentCollection dc =
agentContext.getUnprocessedDocuments();
dc.putAllInFolder ("Proba", false) ;
}
catch(Exception e) {
e.printStackTrace();
}
}
}
13.3 Операции с агентами, выполняемые через меню IDE
Вне рабочей панели для агентов наиболее часто используется операция «включения/выключения».
Здесь под «выключением» подразумевается то, что агент в БД присутствует, но по факту возникновения в
БД определенного события не стартует. Включение и выключение агента достигается либо посредством
пунктов меню Agent -> Enable, либо через одноименную кнопку, расположенную в верхней части папки
Shared Code\Agents. Операция «включения/выключения» доступна для фоновых и почтовых агентов.
Кроме пункта Enable, в меню верхнего уровня Agent присутствует еще ряд пунктов:
•
Run (выполнить) - выполняет попытку принудительного «запуска» агента. После «запуска»
выводится протокол работы агента;
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
349
•
Test (тестировать) - выполняет тестовый запуск агента, при котором проверяется критерий отбора
документов и выводится окно журнала выполнения агента. Конкретные действия, определенные в
теле агента при этом не выполняются. Данный пункт предназначен для первоначальной отладки
агентов, написанных на языках Simple action(s) и Formula, и не содержащих вызовов других агентов;
•
Log (журнал) выводит модальное окно журнала протокола последнего запуска агента, либо
предупреждающее сообщение, что этот агент никогда ранее не запускался (This agent has never been
run before).
Рис. 13.8 Модальное окно Agent Log
В окне журнала работы агента отображается время «запуска» и окончания работы агента, число
документов, удовлетворяющих критерию отбора, краткая информация о выполняемых действиях или
языке программирования агента, а также о некоторых ошибках, обнаруженных в процессе выполнения.
Более полная информация об ошибках агентов, возникающих в процессе их выполнения, протоколируется
в БД журнала работы сервера (LOG.NSF). Для агентов, написанных на языках LotusScript и Java,
разработчик может сам влиять на содержимое протокола работы агента. Это достигается с помощью
методов и свойств встроенного класса NotesLog для LotusScript, или Log - для Java.
•
Design Properties (свойства агента как элемента дизайна верхнего уровня) выдает окно свойств
агента как элемента дизайна верхнего уровня (см. раздел 3.1). По отношению к другим элементам
дизайна верхнего уровня (виды, формы и т.д.) у агентов на закладке Design присутствует
дополнительная секция Signer (кто подписал агент), содержащая реальное значение имени
пользователя подписавшего агент (см. Рис. 13.5).
•
View Profile Results (вывод результатов профилирования) - отображает профильный документ
агента если он есть. Такой документ появляется у агента после его первого запуска при условии что в
его свойствах на закладке Security tab поднят флаг Profile this agent (см. раздел 13.1.2 и Рис. 13.6).
13.4 Ограничения применимости агентов, вызываемые системой
безопасности Domino/Notes
В настоящем разделе мы не будем заниматься вопросами «тонких» настроек администрирования,
связанных с процессом выполнения агентов. Основная задача данного параграфа - дать общее
представление о параметрах, имеющих отношение к администрированию и оказывающих влияние на
запуск и выполнения агентов.
Права на выполнение агентов и определенные операции, используемые в агентах, могут
определяться: в самом агенте, ACL БД (подробнее см. раздел 18.5), документах Server и Configuration
Settings из Каталога Domino (Domino Directory, аналог общей адресной книги для версий до R 4
включительно), окне свойств БД, а также для локальных БД в ее ECL и настройках рабочей станции Notes.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
350
Начнем рассмотрение ограничений применимости с серверных агентов. Наиболее важные
ограничения определяются в документе Server из Каталога Domino. В первую очередь, это секция
Programmability Restrictions (программные ограничения для агентов) с закладки Security (безопасность)
документа Server.
Рис. 13.9 Секция Programmability Restrictions с закладки Security документа Server
Секция Programmability Restrictions содержит следующие поля:
•
Run Simple and Formula agents (кто может выполнять агентов, написанных на языках простых
действий и формул). В поле может быть список имен или «пусто». В последнем случае ограничений на
выполнение указанных типов агентов на уровне сервера нет. Поле воздействует на общих (Shared) и
личных (Private) агентов;
•
Run restricted LotusScript/Java agents (кто может выполнять ограниченные по возможностям
агенты на языках LotusScript и Java). Термин «ограниченные по возможностям агенты» подразумевает,
что такие агенты не могут воздействовать на параметры жизнедеятельности самого сервера (т.е., не
могут выполнять напрямую файловые операции, запускать приложения операционной системы,
работать с OLE-объектами на сервере и т.д.). Полный список недопустимых для restricted агентов
операций приведен в документации. Пустое значение поля запрещает запуск на сервере restricted
агентов всем кроме текущего сервера, Lotus Notes Template Development, а также пользователей,
входящих в следующее поле (Run unrestricted methods and operations). Пользователи, явно/неявно
входящие в поле Run restricted LotusScript/Java agents могут выполнять только агентов со
свойством Do not allow restricted operations;
•
Run unrestricted methods and operations (кто может выполнять неограниченные по возможностям
операции и методы в агентах). Пользователи, входящие в это поле явно или через группу, могут
выполнять неограниченных по возможностям агентов, при условии, что у таких агентов установлено
свойство Allow restricted operations или Allow restricted operations with full administration rights.
Для возможности реализации прав Allow restricted operations with full administration rights
пользователь, подписавший агент, должен быть полным администратором сервера. Пустое значение
поля Run unrestricted methods and operations запрещает запуск на сервере unrestricted агентов
всем кроме текущего сервера и Lotus Notes Template Development. Кроме этого пользователи,
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
351
входящие в поле Run unrestricted methods and operations, могут выполнять запуск агентов под
правами других пользователей (свойство Run on behalf of см. раздел 13.1.2);
•
Sign agents to run on behalf of someone else (кто может подписывать агентов, которые будут
выполняться под правами других пользователей). Данное поле определяет, кто может подписывать
агентов, выполняющихся под правами других пользователей. Поле обычно используется для тех
пользователей, которые не включены в Run unrestricted methods and operations поле (т.к. последние
и так могут выполнять агентов под правами других пользователей). Таким образом, это поле
предназначено для пользователей, которые могут выполнять только ограниченных по возможностям
агентов, и, следовательно в этом случае, пользователь, под правами которого выполняется агент,
должен входить в ACL текущей БД (даже если он полный администратор сервера);
•
Sign agents to run on behalf of the invoker of the agent (кто может подписывать агентов, которые
будут выполняться под правами вызвавшего агент). Данное поле относится только к Web-агентам с
поднятым флагом Run as web user, и только если вызвавший агент и тот, кто его подписал, есть
разные люди. Поле обычно используется для тех пользователей, которые не включены в Run
unrestricted methods and operations поле (т.к., последние и так могут выполнять агентов под правами
вызвавшего агент). Таким образом, это поле предназначено для пользователей, которые могут
выполнять только ограниченных по возможностям агентов, и для выполнения Web-агентов с поднятым
флагом Run as web user. Пользователь, подписавший агент, должен явно/неявно входить в поле Sign
agents to run on behalf of the invoker of the agent. Пустое значение поля позволяет всем
подписывать таких агентов;
•
Sign script libraries to run on behalf of someone else (кто может подписывать библиотеки
скриптов, используемые в агентах, запускаемых под правами других пользователей). Если в агенте,
запускаемом под правами другого пользователя или под правами Web-пользователя, используется
библиотека скриптов, то для нормального выполнения агента необходимо внести подписавшего
библиотеку в поле Sign script libraries to run on behalf of someone else. Значение поля, в первую
очередь, нужно для персон явно/неявно входящих в поле Run restricted LotusScript/Java agents, т.к.,
для пользователей из Run unrestricted methods and operations подписанные ими библиотеки могут
вызываться в контексте агентов, запускаемых под правами других пользователей. Пустое значение
поля Sign script libraries to run on behalf of someone else позволяет всем подписывать такие
библиотеки.
При описании секции Programmability Restrictions достаточно часто упоминались права полного
администратора сервера. В документе Server на закладке Security в секции Administrators присутствует
поле Full Access administrators (администраторы полного доступа). Не вдаваясь в подробности, можно
сказать, что пользователи, явно/неявно входящие в это поле, имеют права менеджера ко всем БД
сервера, минуя ACL, и кроме этого ко всем документам, «скрытым» от них полями типа Readers. В
контексте агентов пользователи, входящие в поля Full Access administrators и Run unrestricted methods
and operations, могут запускать агентов со свойством Allow restricted operations with full administration
rights.
На закладке Security документа Server есть еще одно поле, имеющее отношение к выполнению
агентов. Это поле Trusted servers (сервера, которым доверяют) из секции Server Access. Агенты,
размещенные в БД на серверах, перечисленных в этом поле (Trusted servers), имеют право обращаться к
БД текущего сервера.
Следующие ограничения для агентов определяются в документе Server на закладке Server Tasks ->
Agent Manager
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
352
Рис. 13.10 Закладка Server Tasks -> Agent Manager документа Server
Закладка содержит три секции: Basics (базовые параметры), Daytime Parameters («дневные»
параметры) и Nighttime Parameters («ночные» параметры). Под «дневными/ночными» параметрами
подразумевается, что администратор может в пределах 24 часов определить два временных интервала,
каждый со своими настройками для задачи Agent Manager. Если временные интервалы, определенные в
секциях Daytime Parameters и Nighttime Parameters, полностью не перекрывают все время суток (24
часа), то в оставшееся время задача Agent Manager функционировать не будет. Соответственно и не
будут выполняться фоновые серверные агенты.
Секция Basics содержит единственное поле Refresh agent cache (обновление кеша агентов),
которое определяет время принудительного обновления кеша агентов. Под принудительным здесь
подразумевается то, что кеш агентов обновляется еще и по факту появления в БД сервера новых или
«включения/выключения» существующих фоновых агентов.
Секции Daytime Parameters и Nighttime Parameters содержат следующие поля:
•
Start time (время начала) и End time (время окончания) определяют границы интервала
конкретной секции;
•
Max concurrent agents (максимальное число параллельно выполняемых агентов). Данное поле |
имеет отношение только к механизму параллельного выполнения Web-агентов (при условии, что он
включен, подробнее см. ниже);
•
Max LotusScript/Java execution time XX minutes (максимальное время выполнения в минутах
агентов на языках LotusScript и Java). Если за указанное время агент не успевает выполниться, то он
принудительно выгружается из памяти сервера;
•
Мах % busy before delay (максимальный процент занятости перед задержкой), Поле не
используется в администрировании задачи Agent Manager в Domino версии R 5.x и выше.
В документе Server присутствует еще одна секция Web Agents (Web-агенты), имеющая отношение к
агентам. Она расположена на закладке Internet Protocols -> Domino Web Engine. В секции присутствуют
два поля:
•
Run web agents concurrently? (выполнять Web-агентов параллельно?). Для поля допустимы
значения: разрешить (Enabled) и запретить (Disabled). Для корректной работы параллельно
выполняющихся Web-агентов, которые обращаются к общим ресурсам (например, изменяют один и
тот же документ БД), необходимо писать код агентов с использованием механизма «семафоров»
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
353
(подробнее см. документацию). Применять механизм «семафоров» для обычных (не Web-агентов) не
рекомендуется;
•
Web agent timeout (in seconds) (максимальное время выполнения Web-агентов в секундах). Если
агент не успевает выполниться за заданный интервал времени, то он (агент) будет «снят», а браузер
вернет сообщение о 500 ошибке «HTTP Web Server: Agent did not complete within configured time limit»
(агент не был полностью выполнен по причине ограничений времени). Аналогичное сообщение
пишется и в БД журнала работы сервера.
Кроме перечисленных секций, документ Server может неявно оказывать и другие воздействия на
поведение агентов. Например, в теле агента осуществляется попытка создания на сервере новой БД, а
пользователю запрещено выполнение такой операции (или вообще запрещен доступ к данному серверу).
Однако, мы не будем детально рассматривать подобные случаи.
Для Before New Mail Arrives агентов их администрирование осуществляется в серверном документе
Configuration Settings. Точнее в двух полях Pre-delivery agents (агенты, выполняющиеся перед внесением
БД почтовых сообщений) и Pre-delivery agent timeout (максимальное время выполнения агентов,
выполняющихся перед внесением БД почтовых сообщений) секции Delivery Controls с закладки
Router/SMTP -> Restrictions and Controls -> Delivery Controls. Первое поле (Pre-delivery agents)
позволяет разрешить (Enabled) или запретить (Disabled) выполнение на данном сервере Before New Mail
Arrives агентов, а поле Pre-delivery agent timeout накладывает ограничение на максимальное время
выполнения таких агентов.
Параметры ACL БД (подробнее см. раздел 18.5) позволяют Менеджеру БД для пользователей с
уровнем доступа от Читателя до Редактора запретить создание как личных агентов (флаг Create private
agents), так и агентов на языке LotusSrcipt и Java (флаг Create LotusSrcipt/Java agent). Пользователи с
уровнем доступа Депозитор и ниже вообще не могут создавать никаких агентов, а Дизайнеру можно
запретить только создавать агентов на языке LotusSrcipt и Java. Кроме этого, действия агента могут так же
войти в противоречие с ACL БД. Например, в агенте осуществляется попытка создания нового документа,
в этом случае, пользователь с правами Читателя не сможет полностью выполнить такой агент.
В окне свойств БД можно полностью запретить выполнение фоновых агентов (флаг Disable
background agents for this database см. раздел 2.3.1).
Для локальных БД выполнение определенных операций может войти в конфликт с ECL рабочей
станции. Например, в ECL для конкретного разработчика явно не разрешено отправлять почту (флаг Send
mail из секции Allow ability to). В этом случае, при запуске агента, подписанного указанным
разработчиком, будет выдано модальное окно:
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
354
Рис. 13.11 Модальное окно Execution Security Alert
В окне указано: «подозрительное» действие, кем подписан выполняемый элемент дизайна (в нашем
случае агент), и какой флаг вступил с действием в противоречие. На выбор предлагаются следующие
варианты в радиокнопках:
•
Do NOT execute the action (не выполнять указанное действие) - указанное действие
игнорируется. В нашем случае агент прекратит свою работу, и все действия, следующие за
«конфликтным», выполнены не будут;
•
Execute the action this one time (однократное выполнение) - действие выполнится, но ECL, при
этом, не изменится. При повторном запуске агента будет выдано тоже Execution Security Alert окно;
•
Trust the signer to execute this action for this Notes session (доверять разработчику,
подписавшему элемент дизайна для данной Notes-сессии) - действие выполнится, но ECL, при этом,
не изменится. При повторном запуске агента, в рамках текущей Notes-сессии, окно Execution Security
Alert выдаваться не будет. После завершения Notes-сессии при вызове агента опять будет выдано
тоже Execution Security Alert окно;
•
Start trusting the signer to execute this action (доверять разработчику, подписавшему элемент
дизайна). По нажатию на эту кнопку выполнится «конфликтное» действие, и в ECL будет поднят
соответствующий флаг. При повторном вызове агента окно Execution Security Alert выводиться не
будет.
Для вывода/изменения параметров ECL нужно сначала открыть окно User Security (пункты меню File
-> Security -> User Security), а затем перейти на закладку What Others Do.
В окне User Preferences на закладке Basics в секции Startup Options находится флаг Enable
scheduled local agents (разрешить запуск по расписанию для локальных агентов). Поднятый флаг для
локальных БД, содержащих включенные агенты по расписанию, позволяет выполняться на локальной
станции таким агентам. Любое изменение значения этого флага и нажатие на Ok, вызывает появление
предупреждающего окна Notes с текстом: «Some preferences will not take effect until next time the program is
started» (некоторые настройки не будут применяться до перезагрузки Notes).
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
355
В самом теле агента можно предусмотреть обращение к ACL БД, и, в зависимости от прав текущего
пользователя, выполнить те или иные действия.
Пример. Агент, написанный на языке LotusScript, проверяет уровень доступа пользователя,
запустившего агент, и если уровень соответствует Дизайнеру или выше, то создает для локальной БД
полнотекстовый индекс. В противном случае выдается предупреждающее окно.
Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim level As Integer
Set db = session.CurrentDatabase
level = db.CurrentAccessLevel
If level > 4 Then
Call db.CreateFTIndex( 4, True )
Else
Messagebox | Для
создания/изменения
Дизайнера или выше|,48,"Предупреждение"
полнотекстового
индекса
нужен
доступ
End If
End Sub
13.5 Использование агентов в Web-приложениях
В Web-приложениях агенты наиболее часто используются в качестве обработчиков событий формы
WebQueryOpen и WebQuerySave (см. раздел 4.2.2), а также как агенты, запускаемые по URL
...БД/агент?ОреnАgеnt
В последнем случае, такой URL может генерироваться сервером Domino и
самостоятельно. Например, в акции формы @-командой ToolsRunMacro вызывается агент, если при этом
у БД не установлен флаг Use JavaScript when generation pages (см. раздел 2.3.1), то акция формы
транслируется в тег гипертекстовой ссылки <А HREF ...>, в атрибут HREF которой передается URL
...БД/агент?ОреnAgent.
В документации сказано, что для выполнения агента в интерфейсе браузера, необходимо установить
для него следующие свойства:
•
для полей Trigger установить значение On event и далее либо - Action menu selection, либо Agent list selection.
•
для поля Target установить одно из двух значений:
• None - для агентов, оперирующих только с текущим документом;
• All documents in database - для агентов, оперирующих не только с текущим документом.
Агент WebQueryOpen выполняется перед тем, как сервер Domino конвертирует документ в HTML
для передачи его в браузер. Разработчики имеют возможность выполнить определенные действия
(например, изменить начальное значение определенных полей) перед открытием документа в Web. Для
получения доступа к значениям полей текущего документа из WebQueryOpen агентов, написанных на
языках LotusScript и Java, должны использоваться: свойство DocumentContext класса NotesSession для
LotusScript и свойство DocumentContext класса AgentContext для Java.
Приведем, исключительно ради примера, четыре типа агентов (Simple action(s), Formula,
LotusScript и Java), которые при открытии документа добавляют в поле а1, позволяющее принимать
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
356
несколько значений, новое значение - «значение, добавленное WebQueryOpen агентом». Само поле а1 на
форме присутствует.
Пример 1. На языке Simple action(s). В форме, содержащей поле а1, устанавливаем для объекта
WebQueryOpen значение @Command([ToolsRunMacro]; "WQO"). У агента задаем следующие значения:
для поля Name - WQO, для поля Trigger - On event и Action menu selection или Agent list selection, a
для поля Target - только None. В качестве действия в окне Add Action выбраны следующие значения для
полей:
•
Action выбрано значение Modify Field,
•
Field - a1,
•
Value - значение, добавленное WebQueryOpen агентом,
•
для радиокнопок Modify by - Appending.
Пример 2. На языке Formula. Свойства агента соответствуют предыдущему примеру. Значение поля
(Modify documents, Create new documents или Select documents in view) в правом нижнем углу
программной панели на WebQueryOpen агент влияния не оказывает. Код агента следующий:
@SetField( "a1"; a1 :
"значение,
добавленное WebQueryOpen агентом")
Пример 3. На языке LotusScript. Свойства агента могут соответствовать предыдущему примеру, и, в
дополнение, поле Target может содержать значение All documents in database. Код агента следующий:
Sub
Initialize
Dim session As NotesSession
Dim doc As NotesDocument
Dim item As NotesItem
Set session = New NotesSession
Set doc = session.DocumentContext
Set item = doc.GetFirstItem( "a1" )
Call item.AppendToTextList (
"значение,
добавленное WebQueryOpen агентом"
)
End Sub
Пример 4. На языке Java. Свойства агента соответствуют предыдущему примеру. Код агента
следующий:
import
lotus.domino.*;
public class JavaAgent extends AgentBase {
public void NotesMain()
{
try {
Session session = getSession();
AgentContext
//
agentContext = session.getAgentContext ();
(Your code goes here)
Document
doc
=
agentContext.getDocumentContext();
Item item = doc.getFirstItem( "al" );
item.appendToTextList(
"значение,
добавленное WebQueryOpen агентом"
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
);
357
} catch(Exception e) {
e.printStackTrace
();
}
}
}
Агент WebQuerySave выполняется перед сохранением документа в интерфейсе браузера.
Используя данный тип агента, можно выполнить определенные действия, включая запрет на сохранение
некорректных документов, определение страницы, на которую нужно перейти после сохранения и т.д.
WebQuerySave агенты, написанные на LotusScript и Java, могут «на лету» сгенерировать страницу,
которая будет выводиться по факту сохранения документа. Для LotusScript это достигается обычным
оператором языка Print, а для Java - методом println класса PrintWriter. В обоих случаях разработчик
операторами печати формирует только содержимое тега <BODY>, остальные теги и их атрибуты
генерируется сервером Domino. Кроме этого, с помощью оператора печати в теле агента можно
осуществить редирект (переход) на другую HTML-страницу. Это достигается выводом URL требуемой
страницы, заключенным в квадратные скобки. Такая конструкция корректно работает, если в теле агента
присутствует единственный выполнимый оператор печати. Аналогичного результата можно достичь и
печатью специального JavaScript кода. Приведем ряд примеров WebQuerySave агентов.
Пример 1. На языке LotusScript. Перед сохранением документа проверяется значение, которое
пользователь ввел в числовое поле Price. Если значение отрицательное, то документ не сохраняется, и на
лету генерируется и выводится HTML-страница. Предотвращение сохранения документа достигается
установкой значения "0" в предопределенное поле SaveOptions (поле должно присутствовать на форме).
Если значение поля Price положительное, то документ сохраняется, и осуществляется редирект на
страницу http://www.inttrust.ru. Для решения задачи в объекте WebQuerySave формы устанавливаем
значение @Command([ToolsRunMacro]; "WQS"). Создаем агента с именем WQS и свойствами: Trigger - On
event и Action menu selection, Target - None. Код агента может быть следующим:
Sub
Initialize
Dim session As NotesSession
Dim doc As NotesDocument
Set session = New NotesSession
Set doc = session.DocumentContext
If doc.Price(O) < 0 Then
doc.SaveOptions - " 0 "
Print
|<form><center>|
Print
|<h1>Цена
Print
|<input
должна быть
type="button"
положительным числом</h1><br><br>|
value="Bepнуться
к документу" onClick="history.go(-
1)">|
Print | </center></f orm> |
Else
Print
|[http://www.inttrust.ru]|
End If
End Sub
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
358
Пример 2. Вариант примера 1 на языке Java.
import lotus.domino.*;
import Java.io.PrintWriter;
public class JavaAgent extends AgentBase {
public void NotesMain() {
try {
Session session = getSession ();
AgentContext agentContext = session.getAgentContext ();
// (Your code goes here)
Document doc = agentContext.getDocumentContext();
PrintWriter pw = getAgentOutput();
if (doc.getItemValueDouble("Price") < 0)
{
doc.replaceItemValue("SaveOptions",
"0");
pw.println( "<form><center>" );
pw.println(
"<h1>Цена
должна
быть
положительным
числом</h1><br><br>" ) ;
pw.println(
"<input
документу\" onClick=\"history.go(-1)\">") ;
type=\"button\"
value=\"Bepнуться
к
pw.println( "</centerx/form>" );
}
else
{
pw.println( "[http://www.inttrust.ru]" );
}
} catch(Exception e) {
e.printstackTrace();
}
Перейдем к рассмотрению Web-агентов, вызываемых по URL ...БД/агент?ОреnAgent. Такие
агенты, аналогично WebQuerySave, при использовании операторов печати языков LotusScript и Java,
могут самостоятельно формировать содержимое тега <BODY> возвращаемой HTML-страницы или
осуществлять редирект на другую страницу. В дополнении к этому агенты, вызываемые по URL
...БД/агент?ОреnАgеnt, могут напрямую обращаться к CGI переменным. Это достигается обращением к
одноименным полям в контексте объекта DocumentContext. Для WebQuerySave агентов при обращении к
CGI переменным требовалось явное присутствие таких полей на форме. Для агентов, вызываемых по URL
...БД/агент?OpenAgent, понятие поля отсутствует, и поэтому обращение идет напрямую. Использование
такого механизма позволяет осуществить передачу в Web-агенты параметров.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
359
Пример. Передача параметров в Web-агент. В теле агента используется CGI переменная
Query_String, возвращающая часть URL от символа «?» (или «!» при соответствующей настройке сервера)
до
конца
URL-строки.
Если
для
вызова
агента
указать
URL:
http://www.inttrust.ru/test.nsf/abc?OpenAqent&par1=val1&par2=val2, то на HTML-странице в браузере будет
выведено: «Строка, собственно, параметров:"раr1=val1&раr2=val2"».
Sub Initialize
Dim session As New NotesSession
Dim doc As NotesDocument
Dim my_par As String
Set doc = session.DocumentContext
my_par$ » doc.Query_String(0)
my_par$ = Mid$(my_par$, 11)
'убираем из строки часть ?OpenAgent
Print | Строка, собственно, параметров:"| & my_par$ & |"|
'далее идут функциональные операторы скрипта
End Sub
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
360
14 Web-службы - Web service
В этой главе будет дано краткое изложение технологии Web service (Web-служб). Более детально
теория Web-служб изложена в книгах [16] и [17].
Одно из определений Web-служб,
представляет собой приложение, уникально
местонахождение могут быть определены
доступно для других приложений с помощью
данное консорциумом W3C, говорит, что Web-служба
идентифицирующееся своим URI, чьи интерфейсы, связи и
с помощью XML-документов. Это приложение напрямую
XML-сообщений, передаваемых поверх интернет протоколов.
Передача XML-сообщений в технологии Web-служб обычно происходит с использованием протокола
SOAP поверх HTTP (реже SMTP). Сейчас для аббревиатуры SOAP все чаще используется расшифровка
Service-Oriented Architecture Protocol, первоначально название определялось по первым буквам от Simple
Object Access Protocol. Описание самой Web-службы (допустимые операции, типы данных, протоколы,
порты и т.д.) производится на языке WSDL (Web Services Description Language), который является по сути
XML со своим пространством имен и схемой. Для удобства поиска Web-служб предназначены реестры
UDDI (Universal Discovery, Description and Integration), которые используются для получения информации о
Web-службах и их провайдерах.
14.1 Создание Web-службы
Создание Web-службы можно осуществить через меню Create -> Design -> Web Service. При этом в
рабочую панель Domino Designer загружается объектно-событийная панель и панель программного кода.
Панель тела элемента дизайна для Web-службы не грузится, т.к. последняя не является визуальным
элементом дизайна. После создания и сохранения Web-службы к ней можно получить доступ из папки
элементов дизайна Shared Code -> Web Services.
При создании новой Web-службы сразу выводится ее окно свойств. Для загруженной в панель
программного кода Web-службы вызвать ее окно свойств можно через меню Design -> Web Service
Properties. Окно Web-службы состоит из трех закладок. Рассмотрим их более подробно:
14.1.1 Закладка Basics tab - основные свойства Web-службы
Закладка
Basics tab (основные свойства Web-службы) имеет следующий вид:
Рис. 14.1 Закладка Basics tab окна свойств Web-службы
В первой секции окна определяются: имя Web-службы (Name), ее алиас (Alias) и комментарии
(Comment). Имя и алиас(ы) Web-службы используются для ее идентификации как элемента дизайна БД.
Алиасов может быть несколько, в этом случае они разделяются символом вертикальной черты. Любой из
алиасов наравне с именем может использоваться для формирования URL доступа к Web-службе. Поле
Comment не влияет на поведение приложения и, в основном, предназначено для отображения в папке
Web-служб Domino Designer.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
361
Секция Options (параметры) содержит единственный флаг Warn if the WSDL interface is modified
(предупреждать, если WSDL интерфейс изменен). При поднятии флага, если был изменен и не сохранен
программный код Web-службы, влияющий на содержимое WSDL-файла, то выдается предупреждающее
сообщение: «The WSDL document cannot be shown: The Web Service has not been saved because the WSDL
interface would be changed.» (WSDL документ не может быть отображен, т.к., был изменен и не сохранен
WSDL интерфейс).
Секция PortType class содержит единственное поле, служащее для определения имени класса,
содержащего доступные операции Web-службы. Для Web-служб на языке Java это поле имеет вид списка,
содержащего доступные классы Java-проекта. Для LotusScript - тип поля обычный текстовый.
14.1.2 Security tab - параметры безопасности Web-службы
Закладка
Security tab (параметры безопасности Web-службы) отличается от одноименной
закладки свойств агента (см. раздел 13.1.2) отсутствием флага Allow user activation. В остальном
элементы интерфейса закладки имеют ту же смысловую нагрузку, что и одноименные элементы
аналогичной закладки окна свойств агента. Для Web-службы (также как и для агентов) доступны:
• запуск Web-службы под правами Web-пользователя - флаг Run as web user. В отличие от
одноименного флага в свойствах агента можно отметить, что поднятие флага в свойствах Web-службы
делает недоступным следующий флаг Run on behalf on;
• запуск Web-службы под правами конкретного пользователя - флаг Run on behalf on;
• удаленная отладка LotusScript и Java кода - флаги Allow remote debugging и Compile Java code
with debugging information;
• профилирование - флаг Profile this web service. Просмотр содержимого профильного документа
осуществляется через меню Design -> View Profile Results;
• установка уровня безопасности на шаге выполнения - список Set runtime security level со
следующими значениями:
• 1. Do not allow restricted operations - запрет на выполнение неограниченных по
возможностям операций;
• 2. Allow restricted
возможностям операций;
operations - разрешение
на
выполнение
неограниченных
по
• 3. Allow restricted operations with full administration rights - разрешение на операции,
выполняемые под правами полного администратора;
• ограничение на видимость и запуск Web-служб - флаг и список All readers and above, а также флаг
Allow Public Access users to view and run this web service. Последний обладает более низким
приоритетом. Говоря другими словами, если опущен флаг All readers and above, то пользователи,
которые не видят Web-службу на основании значений в секции Default access for this web service, не
будут ее видеть даже при поднятом флаге Allow Public Access users to view and run this web service
и наличии соответствующего доступа.
14.1.3 Advanced tab -дополнительные свойства Web-службы
Закладка
Advanced tab (дополнительные свойства Web-службы) имеет следующий вид:
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
362
Рис. 14.2 Закладка Advanced tab окна свойств Web-службы
Закладка состоит из единственной секции Options (параметры), которая определяет стиль, формат
SOAP-сообщений и ряд других параметров Web-службы. Стиль (документарный или удаленный вызов)
определяют радиокнопки Programming model (программная модель). Удаленному вызову соответствует
значение RPC от Remote Procedure Call (удаленный вызов процедур), документарному - Message
(сообщение).
Для удаленного вызова (RPC) возможно определить формат SOAP-сообщений в списочном поле
SOAP message format. Присутствие в качестве значений в указанном поле типов Doc имеет отношение
только к формату сообщения, а не его стилю. Допустимыми для поле SOAP message format являются
следующие значения:
•
RPC/encoded. Данный формат в WSDL-файле формирует для тегов:
• <wsdl:message> : <wsdl:part> атрибут type, указывающий на соответствующий XSD тип
данных или тип, определенный в теге <wsdl:types>;
• <wsdlsoap:binding> атрибут style равный "rрс";
• <wsdl:operation> : <wsdl:input>/<wsdl:output> : <wsdlsoap:body> атрибут encodingStyle
равный http://schemas.xmlsoap.org/soap/encodinq/ и атрибут use равный "encoded";
•
RPC/literal. Данный формат в WSDL-файле формирует для тегов:
• <wsdl:message> : <wsdl:part> атрибут type, указывающий на соответствующий XSD тип
данных или тип, определенный в теге <wsdl:types>;
• <wsdlsoap:binding> атрибут style равный "грс";
• <wsdl:operation> : <wsdl:input>/<wsdl:output> : <wsdlsoap:body> атрибут use равный "literal";
•
Doc/literal. Данный формат в WSDL-файле формирует для тегов:
• <wsdl:types> новые теги <element> для всех входных/выходных параметров;
• <wsdl:message> : <wsdl:part> атрибут element, указывающий на соответствующий элемент
из тега <wsdl:types>;
• <wsdlsoap:binding> атрибут style равный "document";
• <wsdl:operation> : <wsdl:input>/<wsdl:output> : <wsdlsoap:body> атрибут use равный "literal";
©InterTrust Co. Тел. 095) 9567928 http://www.intertrust.ru
363
• Wrapped. Данный формат в WSDL-файле формирует для тегов:
• <wsdl:types> одиночные комплексные теги <element> для всех входных/выходных
параметров. Данные теги (верхнего уровня) имеют только атрибут name, ссылающийся на
соответствующую операцию;
• <wsdl:message> : <wsdl:part> атрибут element, указывающий на соответствующий элемент
из тега <wsdl:types> (каждый тег <wsdl:message> содержит единичный тег <wsdl:part> с атрибутом
name равный "parameters");
• <wsdlsoap:binding> атрибут style равный "document";
• <wsdl:operation> : <wsdl:input>/<wsdl:output> : <wsdlsoap:body> атрибут use равный "literal";
При выборе для радиокнопки Programming model значения Message список SOAP message format
становится недоступным для выбора и в этом поле устанавливается значение Doc/literal. Данный формат
в WSDL-файле формирует для тегов:
•
<wsdlsoap:binding> атрибут style равный "document";
• теги <wsdl:message>, <wsdl:operation> и т.д., присутствуют в WSDL-файле только для следующих
заголовков методов:
• для реализации на LotusScript - Function methodName (doc As NotesDomDocumentNode) As
NotesDomDocumentNode
• для реализации на Java - org.w3c.dom.Document methodName (org.w3c.dom.Document doc);
• <wsdl:message> атрибут name без тега <wsdl:part>. Схема реального содержимого SOAP послания
не является общедоступной, и согласуется в частном порядке между провайдером и потребителем
услуг Web-службы;
•
<wsdl:operation> : <wsdl:input>/<wsdl:output> : <wsdlsoap:body> атрибут use равный "literal";
Поднятие флага Include operation name in SOAP action формирует в WSDL-файле для каждого тега
<wsdlsoap:operation> значение атрибута soapAction, равное имени операции. Опущенный флаг задает для
атрибута soapAction значение, равное пустой строке.
Значение поля Port type name передается в WSDL-файл в атрибут name тега <wsdl:portType>. При
реализации Web-служб в Domino допускается использовать одно значение Port type name на каждый
сервис.
Значение поля Service element name передается в WSDL-файл в атрибут name тега <wsdl:service>.
Значение поля Service port name передается в WSDL-файл в атрибут name тега <wsdl:service> :
<wsdl:port>. При реализации Web-служб в Domino можно использовать одно значение Service port на
каждый сервис.
Получить более подробную информацию о стилях и форматах SOAP-сообщений можно в
документации и на ресурсе http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl.
14.2 Тестирование Web-службы
Для тестирования Web-служб достаточно часто используется специальное программное
обеспечение, обычно называемое Web services explorer (обозреватель Web-служб). Такое программное
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
364
обеспечение производит много фирм, в рамках этой книги мы будем использовать Web services explorer из
IBM Rational Software Development Platform v 6.
Пример 1. Создадим в БД форму с именем Book и двумя полями: BookName - текстовое и Cost числовое. Создадим несколько документов по этой форме, вводя в поле BookName значения на
английском языке. Далее создадим новую Web-службу, которая должна выполнять три операции:
•
возвращать список значений поля BookName в виде строки, где имена книг разделяются запятыми;
•
возвращать по имени книги его цену;
• устанавливать цену книги по его имени и новому значению цены.
Для этого определим в окне свойств Web-службы следующие опции:
•
закладка Basics tab:
• поле Name - значение MyWS;
• поле PortType class - значение Booklnfo;
•
закладка Advanced tab:
• радиокнопки Programming model - значение RPC;
• список SOAP message format - значение RPC/encoded;
• поле Port type name - значение Booklnfo.
Остальные значения в окне свойств Web-службы оставим по умолчанию, закроем ее окно свойств и
перейдем в панель программного кода. В окне выбора языка программирования выберем значение
LotusScript, и в объектно-событийной панели перейдем в объект (Declarations), в который введем
следующий код:
Dim session As NotesSession
Dim db As notesdatabase
Class BookInfo
Sub New
Set session = New NotesSession
Set db = session.Currentdatabase
End Sub
Function getBookNames() As String
Dim doc As notesdocument
Dim nc As NotesDocumentCollection
Set nc = db.Search (|Form="Book"|,Nothing, 0 )
getBookNames = ""
For i = 1 To nc.Count
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
365
Set doc =nc.GetNthDocument(i)
getBookNames = doc.BookName(0) & ", " & getBookNames
Next
getBookNames = Mid(getBookNames,1,Len(getBookNames) - 1)
End Function
Function getBookCost(BookName As String) As Double
Dim doc As notesdocument
Dim nc As NotesDocumentCollection
Set nc = db.Search (|Form="Book" s BookName="| & BookName & |"|,Nothing,0 )
getBookCost = -1.0
If nc.Count > 0 Then
Set doc =nc.GetNthDocument(1)
getBookCost = doc.Cost(0)
End If
End Function
Function setBookCost(BookName As String, BookCost As Double) As String
Dim doc As notesdocument
Dim nc As NotesDocumentCollection
Set nc = db.Search (|Form="Book" s BookName="| & BookName 4 |"|,Nothing,0 )
setBookCost = "No"
If nc.Count > 0 Then
Set doc =nc.GetNthDocument(1)
doc.Cost = BookCost
If doc.Save(True, False) Then
setBookCost = "Yes"
End If
End If
End Function
End Class
Сохраним Web-службу. Если теперь открыть окно свойств Web-службы, то увидим, что на закладке
Advanced tab автоматически заполнились следующие поля:
•
Service element name - в нашем примере значением BooklnfoService;
•
Service port name-значением Domino.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
366
Остальные поля и флаги сохранили свои значения по умолчанию (исключая измененные нами в
начале примера). Заострим наше внимание на тех элементах дизайна окна свойств Web-службы, которые
найдут свое прямое отражение в автоматически сгенерированном WSDL-файле. Это следующие опции с
закладки Advanced tab:
•
радиокнопки Programming model со значением RPC;
•
списочное поле SOAP message format со значением RPC/encoded.
Откроем теперь WSDL-файл, например, через меню Design -> Show WSDL.
<?xml version="l.0" encoding="UTF-8"?>
<wsdl:definitions
targetNamespace="urn:DefaultNamespace"
xmlns = "http://schemas.xmlsoap.org/wsdl/" xmlns:apachesoap="http://xml.apache.org/xml-soap"
xmlns:impl="urn:DefaultNamespace"
xmlns:intf="urn:DefaultNamespace"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<wsdl:message name="SETBOOKCOSTResponse">
<wsdl:part name="SETBOOKCOSTReturn" type="xsd:string"/>
</wsdl:message>
<wsdl:message name="GETBOOKCOSTResponse">
<wsdl:part name="GETBOOKCOSTReturn" type="xsd:double"/>
</wsdl:message>
<wsdl:message name="GETBOOKCOSTRequest">
<wsdl:part name="BOOKNAME" type="xsd:string"/>
</wsdl:message>
<wsdl:message name="GETBOOKNAMESResponse">
<wsdl:part name="GETBOOKNAMESReturn" type="xsd:string"/>
</wsdl:message>
<wsdlrmessage name="GETBOOKNAMESRequest">
</wsdl:message>
<wsdl:message name="SETBOOKCOSTRequest">
<wsdl:part name="BOOKNAME" type="xsd:string"/>
<wsdl:part name="BOOKCOST" type="xsd:double"/>
</wsdl:message>
<wsdlrportType name="BookInfo">
<wsdl:operation name="GETBOOKNAMES">
<wsdl:input message="impl:GETBOOKNAMESRequest" name="GETBOOKNAMESRequest"/>
<wsdl:output message="impl:GETBOOKNAMESResponse" name="GETBOOKNAMESResponse"/>
</wsdl:operation>
<wsdl:operation name="GETBOOKCOST" parameterOrder="BOOKNAME">
<wsdl:input message="impl:GETBOOKCOSTRequest" name="GETBOOKCOSTRequest"/>
<wsdl:output message="impl:GETBOOKCOSTResponse" name="GETBOOKCOSTResponse"/>
</wsdl:operation>
<wsdl:operation name="SETBOOKCOST" parameterOrder="BOOKNAME B00KC0ST">
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
367
<wsdl:input message="impl:SETBOOKCOSTRequest" name="SETBOOKCOSTRequest"/>
<wsdl:output message="impl:SETBOOKCOSTResponse" name="SETBOOKCOSTResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="DominoSoapBinding" type="impl:Booklnfo">
<wsdlsoap:binding style="rpc" transport="http://schemes.xmlsoap.org/soap/http"/>
<wsdl:operation name="GETBOOKNAMES">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="GETBOOKNAMESRequest">
<wsdlsoap:body
encodingstyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="urn:DefaultNamespace" use="encoded"/>
</wsdl:input>
<wsdl:output name="GETBOOKNAMESResponse">
<wsdlsoap:body
encodingstyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="urn:DefaultNamespace" use="encoded"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GETBOOKCOST">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="GETBOOKCOSTRequest">
<wsdlsoap:body
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="urn:DefaultNamespace" use="encoded"/>
</wsdl:input>
<wsdl:output name="GETBOOKCOSTResponse">
<wsdlsoap:body
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="urn:DefaultNamespace" use="encoded"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="SETBOOKCOST">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="SETBOOKCOSTRequest">
<wsdlsoap:body
encodingstуle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="urn:DefaultNamespace" use="encoded"/>
</wsdl:input>
<wsdl:output name="SETBOOKCOSTResponse">
<wsdlsoap:body
encodingstyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="urn:DefaultNamespace" use="encoded"/>
</wadl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="BookInfoService">
<wsdl:port binding="impl:DominoSoapBinding" name="Domino">
<wsdlsoap:address location="http://localhost"/>
</wsdl:port>
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
368
</wsdl:service>
</wsdl:definitions>
На приведенном листинге WSDL-файла выделены значения параметров, определенные в окне
свойств Web-службы. Обратите еще внимание, что т.к., язык LotusScript не чувствителен к регистру, то
значения имен операций и их параметров транслировались в WSDL в верхнем регистре. Это не является
ошибкой, и создаваемые на LotusScript Web-службы будут корректно работать. Однако сам язык XML
чувствителен к регистру, и поэтому кодирование Web-служб на Jave является предпочтительным.
Перед тестированием Web-службы проверим, что она создана пользователем с правами на запуск
ограниченных по возможностям агентов. Если это не так, то переподпишем запись дизайна Web-службы с
помощью ID-файла пользователя, обладающего такими правами. Эту операцию можно осуществить через
меню Design -> Sign. На первом этапе мы будем тестировать Web-службу под правами ее подписавшего.
Такой вариант запуска осуществляется, если на закладке Security tab окна свойств Web-службы опущен
флаг Run as web user.
Обратимся
теперь
службы?OpenWebService.
в
браузере
к
Web-службе
по
URL
вида
... имя_БД/имя_ Web-
Рис. 14.3 Обращение к Web-службе по URL вида ...?OpenWebService
На HTML-странице отобразится имя порта (Service port name), ссылка на WSDL-файл и список
доступных операций Web-службы.
Загрузим теперь IBM Rational Software Development Platform v 6. Далее для открытия Web services
explorer можно воспользоваться следующей последовательностью действий - вызвать меню File -> Import.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
369
Рис. 14.4 Первое окно мастера импорта
В первом окне мастера импорта следует выбрать в списке значение Web Service и кликнуть по
кнопке Next. При первом запуске может появиться окно с запросом на включение инструментов
разработки Web-служб.
Рис. 14.5 Запрос на включение инструментов разработки Web-служб
В этом окне нужно кликнуть по кнопке ОК, и затем во втором окне мастера импорта - по Finish. Это
вызовет загрузку Web services explorer.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
370
Рис. 14.6 Web services explorer
Теперь в правом верхнем углу заголовка окна нужно кликнуть по кнопке
WSDL Page и затем
кликнуть по заголовку WSDL Main в панели Navigator. Это изменит внешний вид Web services explorer на
следующий:
Рис. 14.7 Внешний вид Web services explorer при выбранном значении WSDL Main
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
371
Здесь в панели Actions вводим в редактируемое поле URL доступа к документу WSDL,
описывающему тестируемую Web-службу (например. http://hub/DBTestDAV.nsf/MyWS?WSDL), и кликнем по
кнопке Go. При успешном обращении к Web-службе внешний вид Web services explorer измениться на
следующий:
Рис. 14.8 Внешний вид Web services explorer после ввода URL доступа к WSDL
После этого, для вызова конкретной операции Web-службы необходимо выбрать ее либо из списка в
панели Actions, либо в дереве Web-службы, раскрыв ее в панели Navigator.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
372
Рис. 14.9 6 Внешний вид Web services explorer после выбора конкретной операции
При этом в панели Actions появляются поля для ввода значений параметров (если они имеются)
конкретной операции, и кнопка Go, клик по которой осуществляет вызов операции. Начнем тестирование
нашей Web-службы с операции GETBOOKNAMES, возвращающей список названий всех книг из текущей
БД. Клик по Go приведет к отображению возвращаемого значения в панели Status:
Рис. 14.10 Внешний вид панели Status после вызова операции
Если теперь в панели Actions кликнуть по ссылке Source, то это приведет к отображению значений
посылаемого запроса и возвращаемого Web-службой ответа:
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
373
Рис. 14.11 Внешний вид панели Status в режиме Source
Приведем значения запроса:
<?xml version="l.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://senemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance">
<SOAP-ENV:Body>
<ns0
:
GETBOOKNAMES
xmlns:ns0="urn:DefaultNamespace"
SOAP-
ENV: encodingstyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
и ответа:
<soapenv:Envelope
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSenemainstance">
<soapenv:Body>
<nsl:GETBOOKNAMESResponse
xmlns:nsl="urn:DefaultNamespace"
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<GETBOOKNAMESReturn
xsi:type="xsd:string">WebSphere,Lotus</GETBOOKNAMESReturn>
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
374
</ns1:GETBOOKNAMESResponse>
</soapenv:Body>
</soapenv:Envelope>
Протестируем теперь операцию GETBOOKCOST, введя в поле BOOKNAME одно из значений,
полученных на предыдущем этапе. Ответ может быть следующим:
<soapenv:Envelope
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSenema"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance">
<soapenv:Body>
<ns1:GETBOOKCOSTResponse
xmlns:ns1="urn:DefaultNamespace"
soapenv:encodingstyle="http://schemas.xmlsoap.org/soap/encoding/">
<GETBOOKCOSTReturn
xsi:type="xsd:double">1,2</GETB00KC0STReturn>
</ns1:GETBOOKCOSTResponse>
</soapenv:Body>
</soapenv:Envelope>
Протестируем теперь операцию SETBOOKCOST, определив корректные значения для полей
BOOKNAME и BOOKCOST (для последнего зададим дробное значение). Клик по Go выводит в панели
Status сообщение об ошибке. «IWAB0383E Error validating BOOKCOST». Это происходит из-за
некорректной реализации значений типа double в Web-службах на языке LotusScript в версии R 7.0.
Согласно спецификации консорциума W3C (http://www.w3.org/TR/xmlschema-2/#double) в качестве
разделителя дробной и целой части в значениях double может использоваться только символ точка, а в
Web-службах на языке LotusScript этот разделитель определяется в региональных настройках
операционной системы сервера, несущего БД с Web-службой. Более детально этот вопрос будет
рассмотрен в примере 5 настоящего параграфа. Сейчас же в панели Actions перейдем в режим Source
(кликнув по одноименной ссылке) и повторно вызовем Go. При этом, операция будет корректно
обработана.
Приведем форматы запроса:
<?xml version="l.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance">
<SOAP-ENV:Body>
<ns0:SETBOOKCOST
xmlns:ns0="urn:DefaultNamespace"
SOAP­
ENV: encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<BOOKNAME xsi:type="xsd:string">WebSphere</BOOKNAME>
<BOOKCOST xsi:type="xsd:double">10,23</BOOKCOST>
</ns0:SETB00KC0ST>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
и ответа:
<soapenv:Envelope
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2 001/XMLSchemainstance">
<soapenv:Body>
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
375
<ns1:SETBOOKCOSTResponse
xmlns:ns1="urn:DefaultNamespace"
soapenv:encodingstyle="http://schemas.xmlsoap.org/soap/encoding/">
<SETBOOKCOSTReturn
xsi:type="xsd:string">Yes</SETBOOKCOSTReturn>
</ns1: SETBOOKCOSTResponse?»
</soapenv:Body>
</soapenv:Envelope>
Если теперь обратиться к соответствующему документу в клиенте Notes, то мы увидим, что значение
поля Cost изменилось на ранее введенное в запросе, и изменения были выполнены под правами
подписавшего Web-службу.
Изменим теперь в клиенте Lotus одну из записей с информацией о книгах, присвоив полю BookName
значение, включающее русские буквы. Если теперь вызвать операцию GETBOOKNAMES, то в
возвращаемом значении текст, содержащий русские буквы, будет представлен в нечитаемом формате,
несмотря на выбор в свойствах Web-служб опции RPC/encoded. В примере 5 настоящего параграфа мы
увидим, что текст, содержащий русские буквы, корректно передается/принимается Web-службой, и
некорректное его отображение в Web services explorer вызвано, скорее всего, самим Web services explorer.
Пример 2. Модифицируем предыдущий пример таким образом, чтобы текст, содержащий русские
буквы, при передаче/возврате Web-службой еще раз кодировался по алгоритму BASE64. В стандартной
поставке Lotus/Domino присутствует файл Isxsd.lss, код которого может использоваться для этих целей.
Кроме этого данный файл предназначен для организации преобразования сложных типов данных в
рамках Web-служб в соответствии с их спецификацией.
Попутно изменим операцию GETBOOKNAMES таким образом, чтобы она возвращала названия книг
в виде массива строк. Еще добавим операцию SETBOOKNAME, которая будет менять название
конкретной книги на новое. Код Web-службы в этом случае может быть следующим:
%INCLUDE "lsxsd.lss"
Dim session As NotesSession
Dim db As notesdatabase
Dim stream As NotesStream
Dim tmp As STRINGARRAY_HOLDER
Dim tmp1 As XSD_DATATYPE_CONVERTER
Class BookInfo
Sub New
Set session = New NotesSession
Set db = session.Currentdatabase
Set stream = session.CreateStream
Set tmp = New STRINGARRAY_HOLDER
Set tmp1 = New XSD_DATATYPE_CONVERTER
End Sub
Function getBookNames () As STRINGARRAY_HOLDER
Dim doc As notesdocument
Dim nc As NotesDocumentCollection
Dim BookNames As String
Set nc = db.Search (|Form="Book"| , Nothing, 0 )
If nc.Count > 0 Then
Redim tmp.Value(nc.Count)
©InterTrust Co. Тел. (495) 9567928 http://www.inteiirust.ru
376
For i = 1 To nc.Count
Set doc =nc.GetNthDocument(i)
Call stream.Truncate
Call stream.WriteText(doc.BookName(0))
tmp.Value(i) = tmp1.notesStreamToBase64(stream)
Next
End If
Set getBookNames = tmp
End Function
Function setBookName(BookNameOld As String, BookNameNew As String) As String
Dim doc As notesdocument
Dim nc As NotesDocumentCollection
Call stream.Truncate
Set stream = tmp1.base64ToNotesStream(BookNameOld)
stream.Position = 0
BookNameOld = stream.ReadText()
Call stream.Truncate
Set stream = tmp1.base64ToNotesStream(BookNameNew)
stream.Position = 0
BookNameNew = stream.ReadText()
Set nc = db.Search (|Form="Book" & BookName="| & BookNameOld & |"|,Nothing, 0 )
setBookName = "No"
If nc.Count > 0 Then
Set doc =nc.GetNthDocument(1)
Call stream.Truncate
doc.BookName = BookNameNew
If doc.Save(True, False) Then
setBookName = "Yes"
End If
End If
End Function
End Class
Сохраним Web-службу и посмотрим, как в WSDL-документе изменился тип возвращаемого значения
операцией GETBOOKNAMES:
<wsdl:part name="GETBOOKNAMESReturn" type="impl:ArrayOf_xsd_string" />
Вызовем в Web services explorer операцию GETBOOKNAMES. Возвращаемое значение может быть
следующим:
<soapenv:Envelope
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance">
<soapenv:Body>
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
377
<ns1:GETBOOKNAMESResponse
xmlns:ns1="urn:DefaultNamespace"
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<GETBOOKNAMESReturn soapenc:arrayType="xsd:string[3] '' xsi:type="soapenc:Array">
<item xsi:type="xsd:string"/>
<item xsi:type="xsd:string">TABvAHQAdQBzAA==
</item>
<item xsi:type="xsd:string">VwBlAGIAUwBwAGgAZQByAGUA
</item>
</GETBOOKNAMESReturn>
</ns1:GETBOOKNAMESResponse>
</soapenv:Body>
</soapenv:Envelope>
Для тестирования операции SETBOOKNAME напишем код, выполняющий кодирование строки по
алгоритму BASE64, для получения значений входных параметров операции:
Dim session As New NotesSession
Dim db As notesdatabase
Dim stream As NotesStream
Dim tmpClass As New XSD_DATATYPE_CONVERTER
Dim tmpStr As String
Set db = session.Currentdatabase
Set stream = session.CreateStream
tmpStr = Inputbox$("Введите текст для кодировки", "BASE64", "")
Call stream.Truncate
Call stream.WriteText(tmpStr)
stream.Position = 0
tmpStr = tmpClass.notesStreamToBase64(stream)
tmpStr = Inputbox$("Перекодированный текст", "BASE64", tmpStr)
Разместим этот код, например, в акции формы, не забыв подключить %INCLUDE "Isxsd.lss" в объект
(Globals)\(Declarations) формы.
Если теперь в Web services explorer вызвать операцию SETBOOKNAME со следующим запросом:
<?xml version="l.О" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemes.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance">
<SOAP-ENV:Body>
<ns0:SETBOOKNAME
xmlns:ns0="urn:DefaultNamespace"
ENV: encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<BOOKNAMEOLD
SOAP-
xsi:type="xsd:string">TABvAHQAdQBzAA==</BOOKNAMEOLD>
<BOOKNAMENEW
xsi:type="xsd:string">HQQ+BDIESwQ5BCAA0gQ7BDgENQQ9BEIEIABXAG8AcgBrAFAAbABhAGMAZQA=</B00KNAMEN
EW>
</ns0:SETBOOKNAME>
</SOAP-ENV:Body>
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
378
</SOAP-ENV:Envelope>
то в результате выполнения операции получим, что документ, имевший ранее в поле BookName
значение «Lotus», изменил это значение на - «Новый клиент Workplace».
Пример 3. Модифицируем предыдущий пример таким образом, чтобы одна из операций Web-службы
возвращала комбинированный тип данных. Например, операция GETBOOK будет возвращать
информацию о книге в формате: название - строка, цена - число. Это будет достигаться созданием в коде
Web-службы нового класса и заданием типа возвращаемого значения в виде этого класса. Попутно
используем в рамках метода GETBOOK класс обработчика ошибок WS_FAULT для Web-служб из файла
Isxsd.lss. Код Web-службы в этом случае может быть следующим:
%INCLUDE "lsxsd.lss"
Dim session As NotesSession
Dim db As notesdatabase
Dim stream As NotesStream
Dim tmp1 As XSD_DATATYPE_CONVERTER
Dim tmp2 As Book
Class BookInfo
Sub New
Set session = New NotesSession
Set db = session.Currentdatabase
Set stream = session.CreateStream
Set tmp1 = New XSD_DATATYPE_CONVERTER
Set tmp2 = New Book
End Sub
Function getBook(BookName As String, MyFault As WS_FAULT)
As Book
Dim doc As notesdocument
Dim Database db
Dim BookNameConv As String
Call stream.Truncate
Set stream = tmp1.base64ToNotesStream(BookName)
stream.Position = 0
BookNameConv = stream.ReadText()
Set nc = db.Search (|Form="Book" & BookName="| & BookNameConv & | " | ,Nothing,0 )
If nc.Count > 0 Then
Set doc =nc.GetNthDocument(1)
Call stream.Truncate
Call stream.WriteText(doc.BookName(0))
tmp2.BookName = tmp1.notesStreamToBase64(stream)
tmp2.BookCost = doc.Cost(0)
Set getBook = tmp2
Else
Call MyFault.setFault(True)
Call MyFault.setFaultString("Book " & BookName & " not present in DB")
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
379
Set getBook = Nothing
End If
End Function
End Class
Class Book
Public BookName As String
Public BookCost As Double
End Class
Обратимся к WSDL-файлу созданной Web-службы:
<?xml version="l.0" encoding="UTF-8"?>
<wsdl:definitions
targetNamespace="urn:DefaultNamespace"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:apachesoap="http://xml.apache.org/xml-soap"
xmlns:impl="urn:DefaultNamespace"
xmlns:intf="urn:DefaultNamespace"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns :wsdl = "http://schemas.xmlsoap.org/wsdl/"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<wsdl:types>
<schema
. targetNamespace="urn:DefaultNamespace"
xmlns="http://www.w3.org/2001/XMLSchema">
<import
namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
<complexType name="BOOK">
<sequence>
<element name="BOOKNAME" type="xsd:string"/>
<element name="BOOKCOST" type="xsd:double"/>
</sequence>
</complexType>
</schema>
</wsdl:types>
<wsdl:message name="GETBOOKResponse">
<wsdl:part name="GETBOOKReturn" type="impl:BOOK"/>
</wsdl:message>
<wsdl:message name="GETBOOKRequest">
<wsdl:part name="BOOKNAME" type="xsd:string"/>
</wsdl:message>
<wsdl:portType name="BookInfo">
<wsdl:operation name="GETBOOK" parameterOrder="BOOKNAME">
<wsdl:input message="impl:GETBOOKRequest" name="GETBOOKRequest"/>
<wsdl:output message="impl:GETBOOKResponse" name="GETBOOKResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="DominoSoapBinding" type="impl:BookInfo">
<wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="GETBOOK">
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
380
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="GETBOOKRequest">
<wsdlsoap:body
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="urn:DefaultNamespace" use="encoded"/>
</wsdl:input>
<wsdl:output name="GETBOOKResponse">
<wsdlsoap:body
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="urn:DefaultNamespace" use="encoded"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="BookInfoService">
<wsdl:port binding="impl:DominoSoapBinding" name="Domino">
<wsdlsoap:address location="http://localhost"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Выделенный фрагмент в листинге соответствует комбинированному типу данных, определяемому
классом Book.
Если теперь в Web services explorer вызвать операцию GETBOOK со следующим запросом:
<?xml version="l.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance">
<SOAP-ENV:Body>
<ns0:GETBOOK
xmlns:ns0="urn:DefaultNamespace"
ENV:encodingstyle="http://schemas.xmlsoap.org/soap/encoding/">
S0AP-
<BOOKNAME
xsi:type="xsd:string">HQQ+BDIESwQ5BCAAOgQ7BDgENQQ9BEIEIABXAG8AcgBrAFAAbABhAGMAZQA=</BOOKNAME>
</ns0:GETBOOK>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
то в результате получим ответ:
<soapenv:Envelope
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns :xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi = "http://www.w3.org/2001/XMLSchemainstance">
<soapenv:Body>
<ns1:GETBOOKResponse
xmlns:ns1="urn:DefaultNamespace"
soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<GETBOOKReturn xsi:type="ns1:BOOK">
<BOOKNAME
xsi:type="xsd:string">HQQ+BDIESwQ5BCAAOgQ7BDgENQQ9BEIEIABXAG8AcgBrAFAAbABhAGMAZQA=
</BOOKNAME>
<BOOKCOST
xsi:type="xsd:double">12,56</BOOKCOST>
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
381
</GETBOOKReturn>
</ns1:GETBOOKResponse>
</soapenv:Body>
</soapenv:Envelope>
Если повторно протестировать операцию GETBOOK со значением параметра, не соответствующего
ни одной из записей в БД, то в результате можно получить два варианта ответов. Например, со
следующим запросом:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2 001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance">
<SOAP-ENV:Body>
<ns0:GETBOOK
xmlns:ns0="urn:DefaultNamespace"
SOAP-
ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<BOOKNAME
xsi:type="xsd:string">abcd</BOOKNAME>
</ns0:GETBOOK>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Будет возвращено значение:
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance">
<soapenv:Body>
<soapenv:Fault>
<faultcode>soapenv:Server.generalException</faultcode>
<faultstring>Book abcd not present in DB</faultstring>
<detail/>
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>
Или, другими словами, методы класса WS_FAULT корректно отработали, и ошибка отсутствия
документа в БД была перехвачена.
Однако, если тестировать GETBOOK с параметром:
<BOOKNAME xsi:type="xsd:string">abcde</BOOKNAME>
то в результате получим:
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2 001/XMLSchema" xmlns:xsi = "http://www.w3.org/2001/XMLSchemainstance">
<soapenv:Body>
<soapenv:Fault>
<faultcode>soapenv:Server.generalException</faultcode>
<faultstring>LotusScript did not run to completion.</faultstring>
<detail/>
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
382
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>
Последнее
происходит
из-за
того,
что
в
методе
XSD_DATATYPE_CONVERTER нет собственной обработки ошибок.
base64ToNotesStream
класса
Это можно проверить, создав акцию формы с кодом:
Sub Click(Source As Button)
Dim session As NotesSession
Dim stream As NotesStream
Dim tmpClass As New XSD_DATATYPE_CONVERTER
Dim tmpStr As String
On Error Goto ErrHandl
Set session = New NotesSession
Set stream = session.CreateStream
Call
stream.Truncate
tmpStr = Inputbox("l",
Set stream =
"2","TABvAHQAdQBzAA==")
tmpClass.base64ToNotesStream(tmpStr)
stream.Position = 0
tmpStr = stream.ReadText ()
tmpStr = Inputbox("l", "2", tmpStr)
ExitSub:
Exit Sub
ErrHandl:
tmpStr = Inputbox("l", "2", "Error " & Error$ & " " & Str(Err) &" on line " &
Cstr(Erl) )
Resume ExitSub
End Sub
Также следует не забыть подключить %INCLUDE "Isxsd.lss" в объект (Globals)\(Declarations) формы.
Тестирование этого кода со значением по умолчанию для переменной tmpStr выполнится без
ошибки. Однако, если в окне ввода значения для tmpStr указать - «abcde», то получим сообщение об
ошибке: «Error Illegal function call 5 on line 11».
Пример 4. Модифицируем предыдущий пример. Реализуем код Web-службы на языке Java. В рамках
Web-службы определим два метода. Первый будет возвращать названия всех книг, разделенных
запятыми, второй - книгу в виде объекта по ее названию.
Создадим новую Web-службу и определим в ее окне свойств следующие опции:
•
закладка Basics tab:
• поле Name - значение JavaWS;
• поле PortType class - значение Booklnfo;
•
закладка Advanced tab:
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
383
•
радиокнопки Programming model - значение RPC;
•
список SOAP message format - значение RPC/encoded;
•
поле Port type name - значение Booklnfo.
Остальные значения в окне свойств Web-службы оставим по умолчанию, закроем ее окно свойств и
перейдем в панель программного кода. В окне выбора языка программирования выберем значение Java.
Перейдем в объектно-событийной панели в панель кода и заменим в нем автоматически сгенерированный
код шаблона на следующий:
import lotus.domino.*;
import lotus.domino.types.*;
import Java.util.*;
import sun.misc.*;
public class Booklnfo
{
private Session session = WebServiceBase.getCurrentSession();
public Book getBook(String name) throws Exception
{
Book tmpBook = null;
try
{
AgentContext agentContext = session.getAgentContext();
Database db = agentContext.getCurrentDatabase ();
BASE64Decoder dec = new BASE64Decoder();
String tmpStr = new String(dec.decodeBuffer(name));
DocumentCollection dc = db.search("Form=\"Book\" & BookName=\"" + tmpStr
+"\"");
if (dc.getCount () > 0)
{
Document doc = dc.getNthDocument(1);
tmpBook = new Book();
tmpStr = new String(doc.getItemValueString("BookName"));
BASE64Encoder enc = new BASE64Encoder();
tmpStr = enc.encodeBuffer(tmpStr.getBytes());
tmpBook.setBookName(tmpStr);
tmpBook.setBookCost(doc.getItemValueDouble("Cost"));
}
else
throw new Exception("Book " + name + " not present in DB");
}
catch(NotesException e)
{}
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
384
return tmpBook;
}
public String getBooks() throws Exception
{
String tmpStr = new String(");
String tmpStr1 = new String(");
try
{
AgentContext agentContext = session.getAgentContext ();
Database db = agentContext.getCurrentDatabase ();
Document doc = null;
DocumentCollection dc = db.search("Form=\"Book\"");
if (dc.getCount () > 0)
{
int i;
BASE64Encoder enc = new BASE64Encoder();
for(i = 1; i <= dc.getCount () ; + + i)
{
doc = dc.getNthDocument(i);
tmpStr1 = doc.getItemValueString("BookName");
tmpStr1 = enc.encodeBuffer(tmpStr1.getBytes ());
tmpStr = tmpStr + tmpStr1;
if ( i != dc.getCount ())
{
tmpStr = tmpStr + ",";
}
}
}
else
throw new Exception("Books not present in DB");
}
catch(NotesException e)
{}
return tmpStr;
}
}
После этого кликнем в панели акций по кнопке New Class и заменим появившийся код на
следующий:
public class Book
{
private String bookName;
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
385
private double bookCost;
public String getBookName()
{
return
bookName;
}
public double getBookCost()
{
return bookCost;
}
public void setBookName(String name)
{
bookName = name;
}
public void setBookCost(double cost)
{
bookCost = cost;
}
}
Сохраним внесенные изменения через меню File -> Save. При необходимости, еще раз проверим в
окне свойств Web-службы значение поля PortType class с закладки Basics tab -должно быть Booklnfo.
Обратимся к WSDL-файлу.
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions
targetNamespace="urn:DefaultNamespace"
xmlns = "http://schemes.xmlsoap.org/wsdl/" xmlns:apachesoap="http://xml.apache.org/xml-soap"
xmlns:impl="urn:DefaultNamespace"
xmlns:intf="urn:DefaultNamespace"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<wsdl:types>
<schema
targetNamespace="urn:DefaultNamespace"
xmlns="http://www.w3.org/2001/XMLSchema">
<import
namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
<complexType name="Book">
<sequence>
<element name="bookCost" type="xsd:double"/>
<element name="bookName" nillable="true" type="xsd:string"/>
</sequence>
</complexType>
</schema>
</wsdl:types>
<wsdl:message name="getBooksResponse">
<wsdl:part name="getBooksReturn" type="xsd:string"/>
</wsdl:message>
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
386
<wsdl:message name="getBookResponse">
<wsdl:part name="getBookReturn" type="impl:Book"/>
</wsdl:message>
<wsdl:message name="getBookRequest">
<wsdl:part name="name" type="xsd:string"/>
</wsdl:message>
<wsdl:message name="getBooksRequest">
</wsdl:message>
<wsdl:portType name="BookInfo">
<wsdl:operation name="getBook" parameterOrder="name">
<wsdl:input message="impl:getBookRequest" name="getBookRequest"/>
<wsdl:output message="impl:getBookResponse" name="getBookResponse"/>
</wsdl:operation>
<wsdl:operation name="getBooks">
<wsdl:input message="impl:getBooksRequest" name="getBooksRequest"/>
<wsdl:output message="impl:getBooksResponse" name="getBooksResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="DominoSoapBinding" type="impl:BookInfo">
<wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="getBook">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="getBookRequest">
<wsdlsoap:body
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="urn:DefaultNamespace" use="encoded"/>
</wsdl:input>
<wsdl:output name="getBookResponse">
<wsdlsoap:body
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="urn:DefaultNamespace" use="encoded"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="getBooks">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="getBooksRequest">
<wsdlsoap:body
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="urn:DefaultNamespace" use="encoded"/>
</wsdl:input>
<wsdl:output name="getBooksResponse">
<wsdlsoap:body
encodingstyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="urn:DefaultNamespace" use="encoded"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
387
<wsdl:service name="BookInfoService">
<wsdl:port binding="impl:DominoSoapBinding" name="Domino">
<wsdlsoap:address location="http://localhost"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Как видно из приведенного листинга, в WSDL-файле имена операций и их параметры присутствуют
именно в том регистре, в котором они определены непосредственно в Java-коде Web-службы.
Тестирование JavaWS в рамках Web services explorer операции getBooks может вернуть следующий
ответ:
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance">
<soapenv:Body>
<ns1 :getBooksResponse
xmlns :ns1 = "urn: DefaultNamespace"
soapenv:encodingstyle="http://schemas.xmlsoap.org/soap/encoding/">
<getBooksReturn
xsi:type="xsd:string">ze7i++kg6uvo5e3yIFdvcmtQbGFjZQ==
,V2ViU3BoZXJ1
</getBooksReturn>
</ns1:getBooksResponse>
</soapenv:Body>
</soapenv:Envelope>
Тестирование операции getBook с запросом:
<?xml version="l.0" encoding="UTF-8"?>
<S0AP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http: //www.w3.org/2001/XMLSchema" xmlns:xsi = "http://www.w3.org/2001/XMLSchemainstance">
<SOAP-ENV:Body>
<ns0:getBook
xmlns:ns0="urn:DefaultNamespace"
SOAP-
ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<name
xsi:type="xsd:string">ze7i++kg6uvo5e3yIFdvcmtQbGFjZQ==</name>
</ns0:getBook>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
может вернуть ответ:
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance">
<soapenv:Body>
<ns1:getBookResponse
xmlns:nsl="urn:DefaultNamespace"
soapenv: encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<getBookReturn href="#id0"/>
</ns1:getBookResponse>
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
388
<multiRef
xmlns:ns2="urn:DefaultNamespace"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
id="id0"
soapenc:root="0"
soapenv:encodingstуle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns2:Book">
<bookCost
xsi:type="xsd:double">12.56</bookCost>
<bookName
xsi:type="xsd:string">ze7i++kg6uvo5e3yIFdvcmtQbGFjZQ==
</bookName>
</multiRef>
</soapenv:Body>
</soapenv:Envelope>
Если в качестве параметра запроса для getBook указать несуществующее в БД название книги, то
ответ должен быть следующим:
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance">
<soapenv:Body>
<soapenv:Fault>
<faultcode>soapenv:Server.generalException</faultcode>
<faultstring>java.lang.Exception: Book ze7 not present in DB</faultstring>
<detail/>
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>
Пример 5. В рамках этого примера используем для тестирования Web-службы обычное Javaприложение. В качестве объекта тестирования мы будем использовать Web-службу, разработанную в
примере 1 данного параграфа. Создадим в IBM Rational Software Development Platform v 6. новый Dynamic
Web проект. Это можно сделать в указанном ПО через меню File -> New -> Project.
Рис. 14.12 Первое окно мастера создания проекта
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
389
Далее в первом окне мастера создания проекта выбираем значение Dynamic Web Project и кликнем
по кнопке Next.
Рис. 14.13 Второе окно мастера создания Dynamic Web Project
Теперь во втором окне мастера создания Dynamic Web-проекта вводим имя проекта (например,
TestWS) в поле Name, и кликнем по кнопке Finish. Далее, встанем в виде Project Explorer на созданный
проект и вызовем правой кнопкой мыши контекстное меню, в котором выберем пункт New -> Class.
Рис. 14.14 Мастер создания Java-класса
В появившемся окне мастера создания Java-класса определим имя класса в поле Name (например,
ForWS) и кликнем по кнопке Finish. При этом откроется окно редактора Java-кода, в который загрузится
код заголовка создаваемого класса. Заменим код в окне редактора Java-кода на следующий:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
390
import Java.net.URL;
import Java.util.Vector;
import org.apache.soap.Constants;
import org.apache.soap.encoding.SOAPMappingRegistry;
import org.apache.soap.rpc.Call;
import org.apache.soap.rpc.Parameter;
import org.apache.soap.rpc.Response;
import org.apache.soap.transport.http.SOAPHTTPConnection;
public class ForWS
{
private String userName;
private String password;
private String myURL;
ForWS(String userName, String password, String myURL)
{
this.userName = userName;
this.password = password;
this.myURL = myURL;
}
private Call setConnection() throws Exception
{
Call myCall = new Call();
SOAPHTTPConnection connection = new SOAPHTTPConnection();
connection.setUserName(userName);
connection.setPassword(password);
myCall.setSOAPTransport(connection);
SOAPMappingRegistry smReg = new SOAPMappingRegistry();
String targetNamespace = "urn:DefaultNamespace";
myCall.setSOAPMappingRegistry(smReg);
myCall.setTargetObjectURI(targetNamespace);
myCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
return myCall;
}
public String getBookNames()
{
try
{
Call myCall = this.setConnection();
myCall.setMethodName("GETBOOKNAMES");
URL url = new URL(myURL);
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
391
String soapAction = myURL;
Response resp = myCall.invoke(url, soapAction);
Parameter ret = resp.getReturnValue();
return ret.getValue().toString();
}
catch (Exception e)
{
e.printStackTrace();
}
return "Error";
}
public String getBookCost(String BookName)
{
try
{
Call myCall = this.setConnection ();
myCall.setMethodName("GETBOOKCOST");
URL url = new URL(myURL);
String soapAction = myURL;
Vector myVec = new Vector ();
Parameter
theBookParam
=
java.lang.String.class, BookName, Constants.NS_URI_SOAP_ENC);
new
myVec.addElement(theBookParam) ;
myCall.setParams(myVec);
Response resp = myCall.invoke(url, soapAction);
Parameter ret = resp.getReturnValue();
return ret.getValue().toString();
}
catch (Exception e)
{
e.printstackTrace();
}
return "Error";
}
public String setBookCost(String BookName, Double BookCost)
{
try
{
Call myCall = this.setConnection();
myCall.setMethodName("SETBOOKCOST");
URL url = new URL(myURL);
String soapAction = myURL;
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
Parameter("BOOKNAME",
392
Vector myVec = new Vector();
Parameter
theBookParam
=
new
java.lang.String.class, BookName, Constants.NS_URI_SOAP_ENC);
Parameter("BOOKNAME",
myVec.addElement(theBookParam);
Parameter
theBookParam1
BookCost, Constants.NS_URI_SOAP_ENC);
=
new
Parameter("BOOKCOST",
Double.class,
myVec.addElement(theBookParam1);
myCall.setParams(myVec);
Response resp = myCall.invoke(url, soapAction);
Parameter ret = resp.getReturnValue();
return ret.getValue().toString();
}
catch (Exception e)
{
e.printstackTrace();
}
return "Error";
}
public static void main(String[] args)
{
String user =
обращение к Web-службе
"Doctor Notes/Org0"; //пользователь,
под правами которого идет
String password = "password"; //пароль пользователя
String myURL = "http://hub/abc.nsf/MyWS2?WSDL"; //URL Web-службы
ForWS myWS = new ForWS(user, password, myURL);
String tmp = myWS.getBookNames();
System.out.printIn(tmp);
//tmp = myWS.getBookCost("Новый клиент Workplace");
//System.out.println(tmp);
//tmp = myWS.setBookCost("Новый клиент Workplace", new Double (22.33));
//System.out.println(tmp);
}
}
Сохраним введенный код (например, через меню File -> Save). При самостоятельном тестировании
примера необходимо изменить значения переменных, отвечающих за имя/пароль пользователя и URL
Web-службы.
Для тестирования примера выполним код класса ForWS через меню Run -> Run As -> Java
Application. Если код был введен без ошибок, то в виде Console будет выведено примерно следующее:
WebSphere,Новый клиент Workplace
То есть операция GETBOOKNAMES Web-службы была успешно вызвана. Еще следует обратить
внимание на то, что русский текст был возвращен Web-службой корректно без дополнительного
кодирования значений по алгоритму BASE64, который в первом примере не использовался.
Раскомментируем в коде метода main следующие строки:
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
393
//tmp = myWS.getBookCost("Новый клиент Workplace");
//Systern.out.println(tmp);
Повторно протестируем код класса
сообщение об ошибке в виде Console:
ForWS.
В
результате
выполнения
получим следующее
WebSphere,Новый клиент Workplace
[SOAPException: faultCode=SOAP-ENV:Client; msg=For input string: "12,34";
targetException=java.lang.NumberFormatException: For input string: "12,34"]
at org.apache.soap.rpc.Call.invoke(Unknown Source)
at ForWS.getBookCost(ForWS.Java: 66)
at ForWS.main(ForWS.Java:108)
Error
Причина ошибки уже рассматривалась в первом примере, и она связана с некорректной реализацией
значений типа double в Web-службах на языке LotusScript в версии R 7.0.
Один из вариантов (не самый лучший) исправления этой ошибки состоит в изменении символа
разделителя целой и дробной части для значений типа double в региональных настройках операционной
системы сервера Domino, хранящего БД с тестируемой Web-службой. Для этого остановим сервер Domino.
Далее в настройках операционной системы изменим значение разделителя (для MS Windows Server 2003
это можно выполнить через следующую последовательность Start -> Settigs -> Control Panel -> Regional
and Language Options -> Regional Options -> Customize -> Numbers -> Decimal symbol) и снова
запустим сервер Domino.
Раскомментируем последние две строки метода main и опять запустим код класса ForWS на
выполнение. Это приведет к выводу в виде Console примерно следующего текста:
WebSphere,Новый клиент Workplace
12.34
Yes
Что говорит о корректном вызове всех трех операций Web-службы. Найдем в клиенте Notes
документ, у которого в поле BookName находится значение «Новый клиент Workplace». Открыв окно
свойств это документа, обнаружим, что в поле Cost установлено новое значение 22.33, и последнее
изменение было выполнено под правами подписавшего Web-службу.
Откроем тестируемую Web-службу в Domino Designer и поднимем в ее окне свойств на закладке
Security tab флаг Run as web user. Опять запустим на выполнение код класса ForWS. Теперь
соответствующий документ будет изменен под правами пользователя, осуществляющего соединение с
Web-службой или другими словами под правами пользователя с именем из переменной user из метода
main класса ForWS.
Перед тем как перейти к следующему примеру, вернем значение разделителя целой и дробной части
для чисел типа double в настройках операционной системы и перезагрузим сервер Domino.
Пример 6. Перепишем код Web-службы из примера 1 на язык Java и убедимся, что работа со
значениями double будет корректна независимо от типа разделителя целой и дробной части,
определенного в настройках операционной системы. Код Web-службы может быть следующим:
import lotus.domino.*;
import lotus.domino.types.*;
public class BookInfo
{
private Session session = WebServiceBase.getCurrentSession();
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
394
public String GETBOOKNAMES() throws Exception
{
String tmpStr = new String("");
try
{
AgentContext agentContext = session.getAgentContext();
Database db = agentContext.getCurrentDatabase();
DocumentCollection dc = db.search("Form=\"Book\"");
if (dc.getCount() > 0)
{
int i;
String tmpStr1 = new String("");
Document doc;
for(i = 1; i <= dc.getCount(); ++i)
{
doc = dc.getNthDocument(i);
tmpStr1 = doc.getItemValueString("BookName")
tmpStr = tmpStr + tmpStr1;
if ( i != dc.getCount())
{
tmpStr = tmpStr + ",";
}
}
}
else
throw new Exception ("Books not present in DB");
}
catch(NotesException e)
{}
return tmpStr;
}
public double GETBOOKCOST(String BOOKNAME) throws Exception
{
double tmpDbl = -1.0;
try
{
AgentContext agentContext = session.getAgentContext();
Database db = agentContext.getCurrentDatabase() ;
DocumentCollection
dc
=
db.search("Form=\"Book\"
BOOKNAME + " \ " " ) ;
if (dc.getCount () > 0)
{
©InterTrust Co.
Тел. (495) 9567928 http://www.intertrust.ru
&
BookName= \ " " +
395
Document doc = dc.getNthDocument(1);
trapDbl - doc.getItemValueDouble("Cost")
}
else
throw new Exception("Book " + BOOKNAME + " not present in DB");
}
catch (NotesException e)
{}
return tmpDbl ;
}
public String SETBOOKCOST(String BOOKNAME, double BOOKCOST)
throws Exception
{
String tmpStr = new String("");
try
{
AgentContext agentContext = session.getAgentContext();
Database db = agentContext.getCurrentDatabase();
DocumentCollection
dc
=
db.search("Form=\"Book\".
&
BookName=\""
+
BOOKNAME +"\"") ;
tmpStr = "No";
if (dc.getCount() > 0)
{
Document doc = dc.getNthDocument(1) ;
Double doubleObj = new Double (BOOKCOST);
doc.replaceItemValue("Cost",
if (doc.save(true, false))
doubleObj);
tmpStr = "Yes";
}
else
throw new Exception("Book " + BOOKNAME + " not present in DB");
}
catch(NotesException
e)
{}
return tmpStr ;
}
}
Запуск на выполнение класса ForWS из предыдущего примера приведет к тем же результатам, что и
со службой, реализованной на LotusScript. Однако результат текущего примера не зависит от типа
разделителя дробной и целой части для чисел типа double, что является еще одним доводом в пользу
реализации Web-служб на языке Java.
Пример 7. Реализуем вызов Web-службы исключительно в рамках технологий Note/Domino. Этого
можно достигнуть либо через Java-агенты, либо через интерфейс LS2J, позволяющий из кода на
LotusScript инициировать Java-сессию, создавать и оперировать в ней с Java-объектами, и возвращать
результаты Java-вычислений обратно в LotusScript. В рамках этого примера будем использовать
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
396
технологию LS2J. Для ее реализации создадим в БД, отличной от той, в которой хранится Web-служба,
библиотеку Java-кода с именем LibraryForWS (см. раздел 15.1).
Далее экспортируем в файловую систему рабочей станции из IBM Rational Software Development
Platform или загрузим с http://ws.apache.org/soap/ архивный файл soap.jar, реализующий классы,
необходимые для вызова и работы с Web-службой.
Теперь заменим код шаблона библиотеки LibraryForWS на код класса ForWS из примера 5 без
метода main. Вызовем окно Java-проекта библиотеки по кнопке Edit Project (см. Рис. 13.7) и осуществим
импорт архива soap.jar в рамки нашей библиотеки. Для этого по кнопке
, определим местоположение
директории (Base directory), в которой находится файл soap.jar. После этого, выбрав файл архива по
кнопке Add/Replace File(s), добавим его в проект библиотеки. Сохраним библиотеку LibraryForWS.
Создадим новую форму и добавим в объект (Globals)\(Options) код подключения библиотеки
LibraryForWS и интерфейса LS2J:
Use "LibraryForWS"
Uselsx "*javacon"
Добавим в форму акцию со следующим кодом на LotusScript:
Sub Click(Source As Button)
Dim mySession As JavaSession
Dim myClass As JavaClass
Dim myObject As JavaObject, myDouble As JavaObject
Dim retValue As String
Set mySession = New JavaSession ()
Set myClass = mySession.GetClass("ForWS")
myURL = "http://hub/abc.nsf/MyWS2?WSDL"
Set
myObject
myClass.CreateObject("(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V",
Notes/Org0", "password", myURL,)
=
"Doctor
retValue = myObject.getBookNames()
Messagebox retValue
retValue = myObject.getBookCost("Новый клиент Workplace")
Messagebox retValue
Set myClass = mySession.GetClass("java/lang/Double")
Set myDouble = myClass.CreateObject("(D)V", 55.54)
retValue = myObject.setBookCost("Новый клиент Workplace", myDouble)
Messagebox retValue
End Sub
Клик по данной акции в клиенте Notes должен последовательно вызвать три операции Web-службы,
и вывести результаты этих операций в диалоговых окнах Messagebox.
14.3 Операции с WSDL-файлом
Помимо уже рассмотренной операции показа WSDL-файла (меню Design -> Show WSDL или
одноименная акция), для Web-службы, загруженной в рабочую панель Domino Designer, допустимы
операции экспорта и импорта WSDL-файла. Этим операциям соответствуют пункты меню Design ->
Export WSDL и Design -> Import WSDL или одноименные акции рабочей панели.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
397
При выполнении операции экспорта WSDL-файла вызывается стандартный диалог выбора места
сохранения для экспортируемого файла.
Импорт WSDL-файла начинается стандартным диалогом выбора файла из файловой системы. Для
отображаемых в диалоге файлов используется маска по типу файла - *.wsdl. Однако это не мешает
вручную ввести имя корректного WSDL-файла в поле имени файла для открытия.
Если в качестве источника импорта был выбран корректный WSDL-файл, то это приведет к созданию
скелета программного кода классов Web-службы и ее операций. Кроме этого будут автоматически
определены ряд свойств Web-службы из ее окна свойств. Язык, на котором будет создаваться скелет
Web-службы (LotusScript или Java), необходимо определить перед операцией импорта в окне выбора
языка программной панели.
При выборе в качестве языка программирования Web-службы LotusScript, операция импорта WSDLфайла автоматически добавит библиотечный файл Isxsd.lss (%INCLUDE "Isxsd.lss"), и некоторые типы
данных из WSDL могут транслироваться с префиксом XSD_ (например, XSD_STRING). Для работы с
такими данными в файле Isxsd.lss имеются соответствующие классы и их компоненты (функции и
подпрограммы).
14.4 Особенности реализации Web-служб в Domino
В Domino Designer 7 Web-службы реализованы как элемент дизайна верхнего уровня, внешне очень
напоминающего агенты. Этот элемент дизайна помимо кода, реализующего его функциональность,
содержит в себе WSDL-документ, описывающий Web-службу и ее составляющие. Разработчик имеет
возможности создания Web-служб на основе существующего WSDL-файла, а также автоматического
формирования WSDL-файла исходя из кода и свойств Web-служб.
В терминологии Web-служб различают две сущности: провайдера (provider entity) и получателя
информации (requester entity). Lotus/Domino R 7 при своей реализации Web-служб ограничивается только
провайдерской частью.
Следующее ограничение касается протокола и метода запроса информации Web-служб. В
Lotus/Domino R 7 при обращении к реализованным на его платформе Web-службам допускается
использование только протокола SOAP поверх HTTP с методом POST последнего.
Для обращения к Web-службам Lotus Domino используются следующие URL:
• ...БД/web_служба?OpenWebService - при использовании метода POST вызывает Web-службу.
Если используется метод GET, то возвращается сводная информация о Web-службе (см. Рис. 14.3);
•
...БД/wеЬ_служба?WSDL - возвращает WSDL-документ, описывающий Web-службу.
14.5 Безопасность Web-служб
С точки зрения Lotus/Domino, Web-служба поддерживает те же средства безопасности, что и агент
(см. раздел 14.1.2). Для обеспечения дополнительных уровней безопасности Web-служб можно
использовать стандартные механизмы безопасности, применяемые при работе с XML (аутентификация,
ролевой доступ и т. д.). Это еще один довод для применения Java при реализации Web-служб, т.к.,
существует уже множество Java-классов, обеспечивающих работу указанных механизмов.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
398
15 Совместно используемый код БД - shared code
Ряд элементов дизайна БД объединен в Domino Designer под общим именем Shared Code
(совместно используемый код). Этот уровень в списке элементов дизайна одной БД «раскрываемый».
После его «раскрытия» в дизайн-панели Domino Designer появляются новые имена папок с однотипными
элементами дизайна. Некоторые элементы дизайна из папки Shared Code были уже рассмотрены нами в
предыдущих разделах (Agents, Web Services, Outlines, Subforms, Fields, Columns и Actions)
Подробному рассмотрению оставшихся элементов из папки Shared Code и посвящен настоящий раздел.
15.1 Библиотеки скриптов как совместно используемый код - script library
Если в рамках одной БД определенный код на LotusScript, Java или JavaScript неоднократно
используется в разных элементах дизайна, то есть смысл перенести его в библиотеку скриптов. Данное
действие уменьшает общий размер приложения и упрощает его модификацию. Под определенным кодом
здесь понимаются как исполнимый код (функции, подпрограммы), так и неисполнимый (описания классов,
назначение констант и т.д.). Использовать уже существующую библиотеку в рамках определенного
элемента дизайна можно с помощью оператора Use для LotusScript, для Java - посредством добавления
библиотеки скриптов в Java-проект по кнопке Edit Project, а для JavaScript - через пункт меню Create ->
Resource -> Insert Resource.
Для создания новой библиотеки скриптов необходимо открыть в дизайн панели Domino Designer
папку Shared Code\Script Libraries и воспользоваться одной из кнопок: New LotusScript Library, New
Java Library или New Javascript Library, размещенных в верхней части папки Script Libraries.
Аналогичного результата можно добиться через пункты меню Create -> Design -> Script Library ->
LotusScript Library/Java Library/JavaScript Library.
При создании библиотеки скриптов в рабочую панель Domino Designer загружается объектнособытийная панель и панель программного кода, соответствующие выбранному языку программирования.
Разработчик должен задать групповое имя для библиотеки скриптов. Последнее достигается в окне
свойств библиотеки скриптов, которое можно вызвать через меню Edit -> Properties.
Рис. 15.1 Закладка Info tab окна свойств библиотеки скриптов
Как видно из рисунка, у библиотеки скриптов в окне свойств присутствует единственная закладка.
Поле Title (заголовок) определяет групповое имя библиотеки скриптов, а поле Comment (комментарии)
используется для добавления комментариев к библиотеке скриптов. Значение из этого поля не влияет на
поведение библиотеки скриптов, а только отображается в одноименном столбце папки Script Libraries.
Для библиотек на Java на закладке присутствует флаг Compile Java code with debugging
information (компилировать Java код с использованием отладочной информации). Поднятый флаг может
использоваться для отладки кода таких библиотек в стороннем Java-отладчике. Подробно этот механизм
будет рассмотрен в разделе 18.9;
Для библиотек на LotusScript в объектно-событийной панели изначально присутствуют четыре
объекта:
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
399
•
(Options) (параметры) - предназначен для объявления неисполняемых операторов на уровне
объекта библиотека. Аналогично объекту форма (см. разделы 4.2.1 и 4.2.2);
•
(Declarations) (описания) - для объявления переменных и констант на уровне объекта библиотека;
•
Initialize (инициализация) - обработчик события по факту «загрузки» объекта библиотека. Обычно
в рамках библиотеки скриптов используется редко, возможно для первоначальной инициализации
переменных;
•
Terminate (завершение) - обработчик события по факту выгрузки объекта библиотека. Также в
рамках библиотеки скриптов используется редко, возможно для очистки памяти.
Свои функции и подпрограммы добавляются в библиотеку скриптов, как и в объекты формы. Один из
способов сделать это - ввести код функции на следующей за End Sub строке в Initialize или Terminate.
Пример 1. Создадим свою библиотеку скриптов на языке LotusScript. Определим для нее заголовок
(Title) со значением My_Average. В библиотеке определим собственную функцию, определяющую
среднеарифметическое значение двух величин.
Function my_avr(par1 As Double, par2 As Double) As Double
my_avr = ( par1 + par2 )/2
End Function
В форме определим три числовых поля а1, а2, аЗ. В акции формы зададим язык программирования
LotusScript. В объекте акции (Options) подключим нашу библиотеку скриптов оператором: Use
"My_Average". В объекте Click акции разместим код, который определяет среднеарифметическое
значение полей а1, а2, и вычисленное значение заносится в поле аЗ. Пример корректно работает в
режиме редактирования документа.
Sub Click(Source As Button)
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Set uidoc = workspace.CurrentDocument
Call uidoc.FieldSetText(
"a3",
Cstr( my_avr( Cdbl( uidoc.FieldGetText( "a1" ) ) ,
Cdbl( uidoc.FieldGetText( "a2" ) ) ) ) )
End Sub
Если в приведенном примере определить для библиотеки скриптов объекты Initialize и Terminate
(например, с помощью Messagebox), то первый (Initialize) «отработает» по первому клику на акции формы,
a Terminate - по факту выгрузки формы.
Перейдем к рассмотрению библиотек скриптов на языке Java. При выборе этого языка
программирования панель программного кода приводится к стандартному Java интерфейсу. В нижней
части панели программного кода появляются четыре уже привычные для Java кнопки: Edit Project
(редактировать проект), New Class (создать новый класс), Export (экспорт) и Compile (компилировать)
(подробнее см. раздел 13.1). В панель программного кода вводятся собственные для разработчика
описания классов, подключаются в случае необходимости сторонние классы, а затем библиотека
компилируется и сохраняется. Подключить существующую библиотеку в коде Java-агента или апплета
можно в окне редактирования Java-файлов проекта, вызываемого по кнопке Edit Project. При этом в поле
Browse надо выбрать значение Shared Java Libraries.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
400
Пример 2. Модифицированный пример 1 на Java. Т.к., в поставляемых с Lotus Domino классах Java
отсутствуют классы для работы с документами «переднего» плана (UI классы), то мы будем использовать
библиотеку в агенте, запускаемом из акции формы и обрабатывающем выделенные документы. В
выделенных документах БД присутствуют три числовых поля а1, а2, аЗ. Создадим свою библиотеку
скриптов на языке Java. Определим для нее заголовок (Title) со значением My_Average1. В библиотеке
определим собственную функцию, определяющую среднеарифметическое значение двух величин.
public class my_class_avr
{
static public
double my_avr(double par1, double par2)
{
return ( (par1 + par2)/2);
}
}
В вызываемый агент включим по кнопке Edit Project нашу библиотеку. Тело самого агента при этом
может быть следующим:
import lotus.domino.*;
public class JavaAgent extends AgentBase {
public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
// (Your code goes here)
DocumentCollection dc =
agentContext.getUnprocessedDocuments();
for(int i = 1; i <= dc.getCount(); i++)
{
Document doc = dc.getNthDocument(i);
Double
tmp1
=
Double(my_class_avr.my_avr(doc.getItemValueDouble("a1"), doc.getItemValueDouble("a2" ) ) ) ;
doc.replaceItemValue("a3", tmp1);
doc.save();
} catch(Exception e) {
e.printStackTrace();
}
{
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
new
401
}
Данный агент будет относительно корректно работать и в акциях формы, но только в режиме чтения
документа. Под относительностью здесь понимается то, что значения поля аЗ будет в БД изменяться, но
на экране этих обновлений не будет.
Пример 3. Модифицированный пример 1 на JavaScript. Создадим свою библиотеку скриптов на языке
JavaScript. Определим для нее заголовок (Title) со значением My_Average2. В библиотеке определим
собственную функцию, определяющую среднеарифметическое значение двух величин.
function my_avr2(par1, par2)
{
return ((parseFloat{par1) + parseFloat(par2))/2)
}
Далее подключим библиотеку My_Average2 на форму с помощью меню Create -> Resource -> Insert
Resource. В форме определим три числовых поля а1, а2, аЗ. В акции формы зададим язык
программирования Common JavaScript. В объекте onClick акции разместим код, который определяет
среднеарифметическое значение полей а1, а2, и вычисленное значение передается в поле аЗ. Пример
корректно работает в режиме редактирования документа.
var frm = window.document.forms[0];
frm.a3.value = my avr2(frm.a1.value, frm.a2.value);
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
402
16 Совместно используемые ресурсы БД - shared resource
Ряд элементов дизайна БД объединен в Domino Designer под общим именем Shared Resources
(совместно используемые ресурсы). Этот уровень в списке элементов дизайна одной БД «раскрываемый».
После его «раскрытия» в дизайн панели Domino Designer появляются новые имена папок с однотипными
элементами дизайна. Подробному рассмотрению данных элементов дизайна и посвящен настоящий
раздел.
16.1 Графические изображения как ресурсы - image resource
В случае, когда одно и то же графическое изображение в рамках текущей БД используется более
одного раза в различных элементах дизайна (формы, папки, аутлайны и т.п.) или Rich Text полях
документов, то есть смысл сохранить его в качестве общего графического ресурса. Это позволит помимо
сохранения дискового пространства упростить модификацию приложения. Последнее связано с тем, что
одной лишь операцией изменения содержимого графического ресурса - сразу изменяются все элементы
дизайна и/или документы, содержащие данный графический ресурс в виде ссылки.
Помимо добавления графических изображений в другие элементы дизайна (формы, виды и т.д.) в
Web-приложениях
можно
обращаться
к
таким
ресурсам
по
URL
типа
...БД/имя_pecypca?OpenlmageResource.
Для сохранения файлов графического изображения в качестве общего ресурса, необходимо открыть
в дизайн панели Domino Designer папку Shared Resources\Images и воспользоваться кнопкой New Image
Resource, размешенной в верхней части рабочей панели Domino Designer. При этом выдается
стандартный диалог выбора файла из файловой системы рабочей станции. В этом диалоге в качестве
типа файла разрешается использовать следующие форматы графики: GIF, JPEG и BMP. Причем,
последний формат при сохранении будет автоматически конвертирован к одному из первых двух.
В верхней строке папки элементов дизайна типа графических ресурсов (аналогичные кнопки есть и в
папках ресурсов типа таблицы каскадных стилей - Style Sheets и файловых ресурсов - File Resource)
отображаются пять кнопок:
•
New Image Resource (новый графический ресурс) - вызывает стандартный
диалог выбора файла из файловой системы. Выбранный в диалоге файл будет встроен в текущую БД
в виде графического ресурса;
•
Open File (открыть файл) - открывает выбранный ресурс с использованием
приложения, которое автоматически выбирает Designer (точнее в соответствии с типом ресурса и
реестром Windows);
Open With (открыть с помощью) - открывает выбранный ресурс с использованием
•
приложения, которое выбирает разработчик;
•
Refresh (обновить) - сохраняет изменения, произведенные разработчиком (точнее
повторно считывает ресурс с диска в БД);
•
станции.
Export (экспорт) - осуществляет экспорт ресурса из БД в файловую систему рабочей
Создать новый графический ресурс можно и через меню Create -> Design -> Image Resource. При
выборе в папке элементов дизайна определенного графического ресурса в главном меню Domino Designer
появляется новый пункт Resource, подпункты которого повторяют действия кнопок: Open File, Open With,
Refresh и Export. Кроме этого, в меню Resource присутствует пункт Resource Properties, выводящий
окно свойств файлового ресурса.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
403
Окно свойств графического ресурса состоит из семи закладок. Уникальными для Image Resource
являются первые две и последняя закладки. Остальные четыре идентичны одноименным закладкам окна
свойств других элементов дизайна верхнего уровня (см. раздел 3.1). Последняя закладка
Security
tab (параметры безопасности) содержит единственное поле-флаг Available to Public Access users
(разрешить доступ к графическому ресурсу пользователям с уровнем доступа Общедоступный). Поднятый
флаг предоставляет пользователям, даже с уровнем «Нет доступа», но с поднятым в ACL флаге Read
public documents (возможность читать общедоступные документы) получать доступ на отображение к
таким графическим ресурсам. Действие флага проявляется только в интерфейсе клиента Notes. Если в
общедоступном документе или элементе дизайна (форма, страница и т.д.) разместить «картинку» с
поднятым флагом Available to Public Access users, то эта «картинка» для Public Access users будет
отображаться в рамках клиента Notes. При опущенном флаге вместо картинки будет отображаться
красный прямоугольник. На Web-приложения флаг Available to Public Access users влияния не
оказывает. Перейдем к рассмотрению оставшихся закладок окна свойств графического ресурса.
16.1.1 Basics tab - основные свойства графического ресурса
Закладка
Basics tab (основные свойства графического ресурса) имеет следующий вид:
Рис. 16.1 Закладка Basics tab окна свойств графического ресурса
В правой части закладки размещена панель для предварительного просмотра «картинки».
Первая секция содержит стандартные поля Name (имя), Alias (алиас или псевдоним) и Comment
(комментарии). Последнее поле не влияет на поведение приложения. Значение этого поля еще
отображается и в одноименном столбце папки Shared Resources\lmages.
Секция Advanced (дополнительные возможности) предназначена для определения некоторых
специальных эффектов графического ресурса. Под специальными эффектами здесь подразумевается то,
что графическое изображение может быть композитным, и, в зависимости от определенных условий,
будет выводиться та, или иная часть «картинки».
Графический ресурс может быть композитным или составным как по горизонтали, так и по вертикали.
За первую возможность отвечает поле Images across (графическое изображение в ширину), а за вторую Images down (графическое изображение вниз).
«Картинки», составные по горизонтали, могут включать в себя от двух до четырех частей, равных по
размеру и разделенных вертикальной полосой из одного пикселя. Первая часть графического
изображения будет отображаться в обычном состоянии (т.е., при отсутствии действий пользователей),
вторая - при проходе через графическое изображение указателя мыши, третья - при выборе
графического изображения (данное действие проявляется при использовании «картинок», отображаемых
в строках аутлайна, см. раздел 9.2.1), и четвертая - при клике по «картинке». Если по смыслу не требуются
все четыре уровня составляющих графического изображения, то можно ограничиться двумя или тремя.
При этом, в любом случае число уровней необходимо внести в поле Images across.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
404
Как только в поле Images across внесено значение отличное от единицы, сразу же в секции
Advanced появляется дополнительное поле-флаг Web browser compatible (совместимость с Webбраузером). Если флаг поднят, то при отображении композитных графических изображений с помощью
URL ...?OpenlmageResource можно использовать дополнительный аргумент lmglndex=N. Число N задает
номер составляющей графического изображения, причем, первая часть «картинки» соответствует нулю.
Например, для вывода второй части графического изображения MY_IMG.JPG из базы TEST.NSF, лежащей
в
корне
хоста
INTTRUST.RU,
можно
использовать
URL
http://www.inttrust.ru/test.nsf/my_imq.ipg?OpenlmaqeResource&lmqlndex=1. Композитные
графические
изображения с опущенным флагом Web browser compatible отображаются в интерфейсе браузера
целиком (т.е., все составляющие как обычный графический ресурс), при этом на отображение не влияет
аргумент в URL Imglndex. Графические ресурсы с поднятых флагом Web browser compatible,
включенные в состав некоторых других элементов дизайна (например, форма/страница, но не строка
аутлайна), отображаются в Web-приложениях по частям. Это достигается использованием
дополнительных внутренних JavaScript функций. Следует правда отметить, что при использовании в Webприложениях композитных «картинок» с числом составляющих более двух, они отображаются не всегда
корректно. К сожалению, в каких контекстах и с какими значениями полей Images across можно
безбоязненно использовать такие графические изображения - в документации не сказано. По мнению
автора, добиться в Web-приложениях вывода различной графики, в зависимости от действий
пользователя, всегда можно с помощью обычных (не композитных) «картинок» и собственных JavaScript
функций.
Рис. 16.2 Внешний вид горизонтального композитного изображения
Поле Images down можно использовать для композитных графических изображений, созданных по
вертикали. Последние используются для вывода иконок, добавляемых на панель закладок клиентов Notes,
Domino Designer и Domino Administrator. Какая часть составного по вертикали графического изображения
будет выводиться в конкретный момент времени, зависит от установленной величины иконок,
определяемых в поле Bookmark icon size (размер иконок закладок) из окна User Preferences закладка
Basics. Обычно, композитные по вертикали изображения состоят из трех частей. Первая - будет
выводиться для больших иконок (значение Large из поля Bookmark icon size), вторая - для средних
(Medium) и последняя - для маленьких (Small). Наглядно увидеть использование композитных
графических изображений как по горизонтали, так и по вертикали можно в БД BOOKMARK.NSF.
Рис. 16.3 Внешний вид вертикального композитного изображения
Вернемся опять в секцию Advanced. Следующее поле-флаг Colorize grays (сбалансировать
«картинку» по оттенкам серого) доступно для графических ресурсов типа GIF. Если флаг поднять, то
цвета, используемые в палитре графического изображения и одновременно соответствующие системным
цветам по умолчанию из настроек операционной системы, будут заменены в графическом изображении
цветами, сбалансированными с текущими системными. Например, в «картинке» есть системный серый
цвет, а по текущим настройкам рабочей станции он сейчас соответствует фиолетовому. Тогда при
поднятом флаге Colorize grays системный серый цвет будет заменен на цвет, сбалансированный с
фиолетовым. Как сказано в документации, такая возможность предназначена для гармонизации цветов
графических изображений с текущими системными цветами.
В секции Advanced остался последний нерассмотренный флаг Needs refresh (требуется
обновление). Флаг может использоваться в случае, когда графическое изображение было открыто на
редактирование (например, с помощью кнопок Open File или Open With). После такого действия в папке
Shared Resources\Images напротив редактируемого графического ресурса появляется иконка
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
405
сигнализирующая о том, что графический ресурс возможно изменился в процессе редактирования.
Одновременно с этим в свойствах редактируемого графического ресурса автоматически поднимается
флаг Needs refresh. Флаг будет автоматически снят при выполнении операции обновления графического
ресурса (например, по кнопке Refresh). В случае, если изменений в графическом ресурсе не происходило,
или они не нужны, разработчик может принудительно опустить флаг Needs refresh в окне свойств
графического ресурса.
16.1.2 Web Properties - Web-свойства графического ресурса
Закладка
Web Properties (Web-свойства графического ресурса) имеет следующий вид:
Рис. 16.4 Закладка Web Properties окна свойств графического ресурса
На закладке присутствует единственная одноименная секция, в которой для редактирования
доступен только флаг Read Only (только для чтения). Поднятие флага блокирует редактирование
ресурсов при обращении к ним через Web с использованием механизма WebDAV (Web-based Distributed
Authoring and Versioning, подробнее см. документацию).
Поле Mime type (тип MIME-заголовка) для графических ресурсов заполняется автоматически и
недоступно для редактирования.
16.2 Файлы как ресурсы БД - file resource
В Domino Designer, начиная с версии 6, можно использовать как элемент дизайна присоединенные
непосредственно к самой БД файлы. В разделе 4.38 уже рассматривалось добавление таких ресурсов на
форму и страницу. В этом же разделе упоминалось, что хотя можно добавлять в БД файловые ресурсы
любых типов (например, файл Word, графический ресурс *.JPG, HTML-страницы и т.д.), однако, корректно
использовать в рамках формы/страницы можно только файловые ресурсы, имеющие прямое отношение к
Web. Кроме встраивания можно просто отображать такие ресурсы в Web через URL типа
БД/имя_pecypca?OpenFileResource.
Кнопки, отображаемые в верхней строке папки элементов дизайна типа файловых ресурсов, и
соответствующие пункты меню идентичны по функциональности одноименным кнопкам и пунктам,
рассмотренным в разделе, посвященном графическим ресурсам (см. раздел 16.1).
Окно свойств файлового ресурса практически идентично окну свойств графического ресурса. Из
отличий можно отметить:
• присутствие на закладке Basics tab поля Character set (набор символов), которое определяет
кодовую страницу данного файлового ресурса;
• доступность для редактирования поля Mime type с закладки Web Properties;
•
отсутствие на закладке Basics tab полей специфичных только для графических ресурсов (Images
across, Images down, Web browser compatible и Colorize grays).
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
406
16.3 Таблицы каскадных стилей как ресурсы - style sheets
В Domino Designer, начиная с версии 6, можно использовать как элемент дизайна присоединенные
непосредственно к самой БД файлы, содержащие таблицы каскадных стилей. В разделе 4.36 уже
рассматривалось добавление таких ресурсов на форму и страницу.
Кнопки, отображаемые в верхней строке папки элементов дизайна типа таблиц каскадных стилей, и
соответствующие пункты меню идентичны по функциональности одноименным кнопкам и пунктам,
рассмотренным в разделе, посвященном графическим ресурсам (см. раздел 16.1).
Окно свойств таблицы каскадных стилей практически идентично окну свойств файлового ресурса.
Отличие состоит только в недоступности для редактирования поля Mime type с закладки Web Properties.
16.4 Java-апплеты как ресурсы - applet resource
Для апплетов, которые неоднократно в рамках одной БД используются в разных элементах дизайна
(формы и страницы) или Rich Text полях документов, есть смысл сохранить их в качестве общего Javaапплет ресурса. Такой подход дает разработчику сразу два преимущества:
•
сокращается общий размер в байтах элементов дизайна или документов, куда осуществляется
«встраивание» апплета;
•
в случае необходимости модификации апплета, такая операция выполняется только в одном
месте.
Для сохранения файлов апплета в виде общего ресурса необходимо открыть в дизайн панели
Domino Designer папку Shared Resources\Applets и воспользоваться кнопкой New Applet Resource,
размешенной в верхней части рабочей панели Domino Designer. Клик по кнопке вызывает модальный
диалог Locate Java Applet Files (местоположение файлов Java апплета), используемый для определения
файлов, составляющих апплет. Аналогичное окно было подробно рассмотрено в контексте Java агентов
(см. Рис. 13.7). После определения файлов апплета и порядка их следования в проекте нажимаем в
модальном окне Locate Java Applet Files кнопку Ok. Это приводит к появлению еще одного модального
окна:
Рис. 16.5 Модальное окно определения имени общего Java-апплет ресурса
В единственное поле окна вводим имя, под которым будут сохранены файлы Java-апплет проекта,
как общий ресурс. Нажимаем Ok, и после этого в папке Shared Resources\Applets появляется новый
общий Java-апплет ресурс под введенным нами именем.
Стоя в папке Shared Resources\Applets на конкретном ресурсе, можно воспользоваться пунктом
меню верхнего уровня Resource. Он состоит из следующих подпунктов:
•
Resource Properties (свойства ресурса) - выводит окно свойств текущего Java-апплет ресурса;
•
Refresh (обновить) - выводит модальный диалог Locate Java Applet Files для текущего Javaапплет ресурса. Используется в случае необходимости модификации файлов проекта апплета, так и
порядка следования этих файлов;
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
407
• Export (экспорт) - выводит модальное окно для определения директории, в которую необходимо
осуществить экспорт файлов текущего Java-апплет ресурса.
Использование общих Java-апплет ресурсов осуществляется при встраивании апплета в элемент
дизайна или Rich Text полях документов. Для этого нужно после вызова меню Create -> Java Applet в окне
Create Java Applet кликнуть по кнопке Locate, и затем в окне Locate Java Applet Files в поле Browse
выбрать значение Shared Resources.
Окно свойств Java-апплет ресурса состоит из пяти закладок. Последние четыре идентичны
одноименным закладкам окна свойств других элементов дизайна верхнего уровня (см. раздел 3.1).
Рассмотрим подробнее первую закладку.
16.4.1 Basics tab - общие свойства Java-апплет ресурса
Закладка
Basics tab (общие свойства Java-апплет ресурса) имеет следующий вид:
Рис. 16.6 Закладка Basics tab окна свойств Java-апплет ресурса
Первая секция содержит редактируемые поля: Name (имя), Alias (алиас или псевдоним) и Comment
(комментарии). Последнее поле не влияет на поведение приложения, а только отображается в
одноименном столбце папки Shared Resources\Applets.
Во второй секции Applet Files (файлы апплета) перечислены составляющие файлы Java-апплет
проекта в той последовательности, в которой они были сохранены в апплет ресурсе. Это поле
информативное и редактированию не подлежит.
16.5 Ресурсы типа подключения к внешним источникам данных - data
connection resource
Data Connection Resources (DCR) представляет собой совместно используемый ресурс,
позволяющий разработчикам получать преимущества базовой функциональности DECS (Domino
Enterprise Connection Services) из среды разработки Designer IDE. DECS обеспечивает возможность связи
полей документа Domino с полями из внешних источников данных.
Для использования DECS при соединении с внешней системой в Domino версии 5 в БД DECS
Administrator необходимо было создать документ Connection, в котором определялись параметры
соединения с внешней системой, а также имя и пароль пользователя. Затем нужно было создать документ
Acivity. В Domino Designer, начиная с версии 6, DCR является эквивалентом документа Connection,
который раньше нужно было создавать в БД DECS Administrator.
Для работы DCR необходимо, чтобы на сервере Domino была установлена и выполнялась задача
DECS или LEI. DCR настраивается в рамках Domino Designer и является совместно используемым
ресурсом. DCR сохраняет время разработчиков, т.к. может быть повторно использован.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
408
Для создания DCR необходимо перейти в папку Shared Resources\Data Connections и
воспользоваться кнопкой New Data Connection Resource, расположенной вверху указанной папки
Аналогичного результата можно добиться через меню Create -> Design -> Data Connection.
При этом создается новый DCR, и сразу выводится его окно свойств. Для уже созданных DCR
получить доступ к его окну свойств можно через меню Design -> Design Properties.
Окно свойств DCR состоит из шести закладок. Последние четыре идентичны одноименным
закладкам окна свойств других элементов дизайна верхнего уровня (см. раздел 3.1). Рассмотрим
подробнее оставшиеся закладки.
16.5.1 Basics tab - основные свойства DCR
Закладка
Basics tab (основные свойства DCR) имеет следующий вид:
Рис. 16.7 Закладка Basics tab окна свойств DCR
Первая секция содержит стандартные поля Name (имя), Alias (алиас или псевдоним) и Comment
(комментарии). Последнее поле не влияет на поведение приложения. Значение этого поля еще
отображается и в одноименном столбце папки Shared Resources\Data Connections.
Секция Connectivity (параметры соединения) содержит следующие элементы интерфейса:
•
Class (класс соединения). В настоящее время реализован только один тип соединений с
реляционными БД - значение RDBMS;
•
Туре (тип внешнего источника данных). До версии R 7.0 включительно реализованы следующие
типы соединений DB2, Oracle, Sybase, ODBC и OLE DB. Далее мы будем рассматривать только
соединения с DB2;
•
User name (имя пользователя) и Password (пароль) - требуются для доступа к внешнему ресурсу;
•
Database (БД) - имя внешней БД.
Последняя секция закладки определяет объект, к которому будет осуществлено подсоединение.
Радиокнопки Object (объект) определяют тип объекта. На выбор предлагаются три значения: Table
(таблица БД), View (вид, т.е., виртуальная таблица в терминах RDBMS) и Procedure (хранимая
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
409
процедура). После выбора типа объекта (Table или View), для заполнения оставшихся полей секции
можно воспользоваться кнопкой Browse metadata (показ метаданных), которая выдает диалог:
Рис. 16.8 Модальное окно Browse External Metadata
Для значения Procedure имена хранимых процедур на каждое действие из: Open (открытие
документа), Update (изменение), Create (создание) и Delete (удаление) - можно выбрать по кнопке
Browse.
Рис. 16.9 Закладка Basics tab окна свойств DCR для хранимых процедур
16.5.2 Options tab - параметры DCR
Закладка
Options tab (параметры DCR) имеет следующий вид:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
410
Рис. 16.10 Закладка Options tab окна свойств DCR
Секция General Options (главные параметры) содержит следующие элементы интерфейса:
•
поле Maximum number of concurrent
соединений). По умолчанию значение равно 1;
connections
(максимальное
число
параллельных
•
флаг Block key field updates (запретить обновление ключевых полей). Поднятый флаг запрещает
изменять ключевые поля (т.е., те, которые используются для задания соответствия между внешним
источником и БД Domino);
•
флаг Only update changed fields (обновлять только измененные поля). Поднятый флаг
предотвращает изменение данных во внешнем источнике до тех пор, пока соответствующие данные
не будут изменены в Domino;
•
флаг Enable conflict detection (разрешить обнаружение конфликтов). Поднятый флаг
предотвращает изменение данных во внешнем источнике до тех пор, пока документ будет открыт в
Notes;
•
радиокнопки Space trimming (удаление пробелов) со значениями: None (нет) и Non-Key fields
(для неключевых полей);
•
поле-список Action on data mismatch (действия при нарушении типов данных) предлагает на
выбор следующие значения:
• Return error (возвращать ошибку);
• Allow precision lost (разрешить потерю порядка);
• Allow data truncate (разрешить «усечение» данных). Применение последних двух значений
зависит от конкретных типов данных, и может быть применено только к неключевым полям;
•
поле-список Action on missing record (действия при потере записи). Такая ситуация может
возникнуть, если нарушилась синхронизация с внешним источником. Например, во внешнем источнике
запись была удалена сторонним (т.е., не Notes) средством. Для разрешения этой ситуации
предлагаются следующие значения:
• Return error (возвращать ошибку);
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
411
• Ignore error (игнорировать ошибку);
• Create external record (создать внешнюю запись).
Секция Custom Settings (специальные настройки) контекстно зависима от типа внешнего источника
(поле Туре). Для DB2 секция содержит единственный флаг Data Journaling (ведение режима
«журналирования»).
16.5.3 Связывание полей с формы Domino с полями из таблицы внешней БД через DCR
После создания DCR ее можно использовать в рамках формы Domino для осуществления
взаимосвязи между полями формы и полями из внешнего источника данных. Для этого в свойствах поля
на закладке Field Info (см. раздел 4.3.1) необходимо поднять флаг External data source. При этом внизу
закладки появляется дополнительная секция:
Рис. 16.11 Закладка Field Info свойств поля с поднятым флагом External data source
По кнопке Browse можно осуществить выбор поля из внешнего источника для соответствия с полем
Domino. При этом вызывается модальное окно:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
412
Рис. 16.12 Модальное окно Browse External Data Sources
В этом окне можно выбрать DCR из существующих в поле Data Connection Resource, таблицу из
внешнего источника (поле Table) и, собственно, поле для связи (поле Fields).
Сначала необходимо определить ключевое поле для связи между Domino и внешним источником
данных. Это осуществляется выбором радиокнопки Key field (ключевое поле). У остальных полей формы
требуется выбирать радиокнопку Data field (поле с данными). Для полей с данными можно еще поднять
флаг Store data locally (сохранять данные локально). В этом случае данные из внешнего источника будут
не только отображаться в поле формы Domino, но и записываться в документе Domino при сохранении
документа в интерфейсе клиентов Notes и браузера.
Установку взаимосвязи полей формы Domino и полей из внешнего источника данных можно
рассматривать как аналог документа Activity из БД DECS Administrator.
Если все поля формы используют одну и ту же DCR для связи с внешним источником данных, то
можно установить DCR по умолчанию для формы. Это достигается на закладке Defaults tab (см. раздел
4.1.2) окна свойств формы.
Рис. 16.13 Закладка Defaults tab окна свойств формы с установленными значениями для DCR по
умолчанию
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
413
Выбрать DCR по умолчанию на закладке Defaults tab окна свойств формы можно аналогично уже
рассмотренным случаям через кнопку Browse.
16.5.4 Использование DCR
После того, как DCR создана и в форме Domino осуществлена взаимосвязь полей с внешним
источником данных, можно приступить к импорту данных из внешнего источника в БД Domino. Для этого в
свойствах БД на закладке Database Basics tab надо снять флаг Allow connections to external databases
using DCRs (см. раздел 2.3.1), затем в папке Shared Resources\Data Connections выбрать нужную DCR и
воспользоваться кнопкой Import external records (импортировать внешние записи), которая расположена
в верхней части папки Shared Resources\Data Connections. При этом появляется модальное окно выбора
формы Domino для импорта данных:
Рис. 16.14 Модальное окно Import External Records
После выбора нужной формы и клика по кнопке ОК появляется предупреждающее окно с запросом
на создание в текущей БД документов, содержащих значения только ключевых полей для соответствия
данных с внешним источником. Такие документы в терминологии Domino называются «окурками» (stub), не
следует их путать с «окурками», оставшимися после удаления документов.
Процедура создания документов-окурков с ключевыми полями по кнопке Import external records
аналогична одноименной процедуре, выполняемой по акции Initialize Keys из документа Activity БД DECS
Administrator. Соответственно второй вызов Import external records создаст второй экземпляр
документов-окурков.
После создания документов-окурков можно включить поддержку DCR в текущей БД. Это достигается
поднятием флага Allow connections to external databases using DCRs в окне свойств БД. Это аналогично
включению документа Activity из БД DECS Administrator. Теперь при работе с документом Domino
(например, открытие документа), созданным по форме с поддержкой DCR, данные Domino, связанные с
внешним источником данных, будут браться из указанного источника.
16.5.5 Ограничение DCR
В Domino, начиная с версии 6.5 по 7.0 включительно, механизм DCR не поддерживает:
•
обработку многозначных (multi-value) полей;
•
отслеживание ограниченного набора событий. Через БД DECS Administrator в документе Activity
можно выбрать события, которые обрабатывает задача DECS. В Activity представлен следующий
набор событий: Create (создание документа), Open (открытие), Update (обновление) и Delete
(удаление). С помощью DCR обрабатываются все четыре события без выбора.
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
414
17 Папка «Иное» - other
Переходим к рассмотрению следующей папки Other (иное). Папка предназначена для хранения
следующих типов элементов дизайна:
•
объект Database Script (общие
определенных событий на уровне БД;
скрипты
БД)
-
предназначен
для
задания
обработчиков
•
документ "About Database" Document (краткое описание БД);
•
документ "Using Database" Document (краткое описание процедуры использования БД);
•
иконка БД (Icon).
В БД, создаваемой «с нуля», первые три объекта (кроме Icon) не определены. Это отображается в
столбце Defined (определено) папки Other. У всех этих объектов (после того как они созданы) при
обращении к ним как к элементам дизайна верхнего уровня (см. раздел 3.1) на закладке
Design
(дизайн) присутствует единственное поле Prohibit design refresh or replace to modify (запретить
обновление или замещение дизайна из шаблона БД). Смысл поля ясен из названия. Перейдем к более
детальному рассмотрению оставшихся пунктов папки Other.
17.1.1 Общие скрипты БД - database script
Объект Database Script предназначен для определения собственных обработчиков некоторых
событий на уровне БД. С другой стороны, большинство составляющих Database Script представляют
собой события (Event) встроенного класса NotesUIDatabase. При открытии в папке Other объекта
Database Script в рабочую панель Domino Designer загружается объектно-событийная панель и панель
программного кода. При этом, в объектно-событийной панели присутствуют две группы объектов. Первая
группа типична для LotusScript объектов:
•
(Options) (параметры) - предназначен для объявления неисполняемых операторов на уровне
объекта Database Script. Аналогично объекту форма (см. разделы 4.2.1 и 4.2.2);
•
(Declarations) (описания) - предназначен для объявления переменных и констант на уровне
объекта Database Script;
•
Initialize (инициализация) - обработчик события по факту «загрузки» объекта Database Script.
Обычно в рамках общих скриптов БД используется редко, возможно для первоначальной
инициализации переменных;
•
Terminate (завершение) - обработчик события по факту выгрузки объекта агент из библиотеки.
Также в рамках библиотеки скриптов используется редко, возможно для очистки памяти.
Проверить последовательность выполнения событий можно с помощью функций MessageBox.
Подпрограмма Initialize выполняется при открытии БД, a Terminate - при выходе из БД.
Вторая группа объектов Database Script предназначена для определения собственных обработчиков
событий на уровне БД:
•
PostOpen - обработчик события, возникающего после открытия БД. Если в виде, который
открывается первым при открытии данной БД, определены обработчики событии QueryOpen и
PostOpen, то PostOpen из Database Script выполняется после них;
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
415
•
PostDocumentDelete - обработчик события, возникающего после удаления документов из БД.
Аналогично предыдущему обработчику, но возникает после события реального удаления документов;
•
QueryClose - обработчик события по факту выхода из БД. Если в виде, который открыт на момент
закрытия БД, определен одноименный обработчик на уровне вида, то он выполняется перед
обработчиком на уровне БД;
•
QueryDocumentDelete - обработчик события, возникающего перед удалением документов из БД.
Фактически происходит либо перед пометкой на удаление выделенных документов (аналог @команды [EditClear]), либо при копировании с удалением в буфер обмена (аналог [EditCut]). На
удаление документов агентами обработчик события QueryDocumentDelete влияния не оказывает.
Второй параметр в QueryDocumentDelete с именем Continue может использоваться для блокировки
удаления документов. Для этого Continue необходимо присвоить значение False;
•
QueryDocumentUndelete - обработчик события, возникающего перед снятием с документа
пометки об удалении. Под термином «пометка» здесь подразумевается обычная, а не мягкая отметка
об удалении (флаг Allow soft deletions см. раздел 2.3.7). Другими словами, если напротив документа
в виде стоит иконка мусорной корзины, то снятие этой пометки вызывает событие
QueryDocumentUndelete. Вторым аргументом Continue нашего события можно заблокировать
процедуру восстановления документа (Continue = False);
•
QueryDragDrop - обработчик события, возникающего перед операцией «перетаскивания»
документов в какую-либо папку. Третий параметр (Continue) обработчика события блокирует
процедуру drag&drop. Второй параметр (EntryName) можно использовать для определения имени
папки, в которую осуществляется «перетаскивание». Запрещается использование в теле обработчика
диалога с пользователем (например, функция MessageBox). Кроме простейших случаев (просто запрет
на «перетаскивание»), событие, по мнению автора, работает не вполне корректно. Попытка в теле
обработчика создать один новый документ, приводит к созданию непредсказуемого числа новых
документов. На форуме компании Iris (http://www-10.lotus.com/ldd/46dom.nsf) есть не совсем внятные
сообщения об ошибке в данном обработчике. По мнению автора, вместо события QueryDragDrop
всегда можно использовать событие PostDragDrop, которое работает корректно;
•
PostDragDrop - обработчик события, возникающего после операции «перетаскивания» документов
в какую-либо папку, но перед передачей фокуса элементам дизайна Notes. Обработчик содержит те же
аргументы, и с той же функциональностью, что и предыдущий обработчик QueryDragDrop;
• QueryDropToArchive - обработчик события, возникающего перед операцией перемещения
документов из текущей БД в архив. Третий параметр (Continue) обработчика события блокирует
процедуру перемещения документов в архив;
•
PostDropToArchive - обработчик
документов из текущей БД в архив.
события,
возникающего
после
операции
перемещения
В завершении настоящего параграфа хотелось бы отметить ряд фактов и привести один пример
использования обработчика событий из Database Script:
•
после создания/изменения любого обработчика событий из Database Script, для вступления в
силу этих изменений - необходимо закрыть текущую БД как в клиенте Notes, так и в Domino Designer.
Возможно, иногда придется закрыть оба клиента;
• разработчик
может
определить
в
рамках
Database
Script
свои
собственные
функции/подпрограммы, видимые на уровне этого модуля. Это выполняется так же, как и для формы.
Один из способов - ввести код функции на следующей за End Sub строке в Initialize или Terminate.
Пример. При фактическом удалении документов из БД будут удаляться и все связанные с ним
ответные и «ответ на ответ» документы. Это достигается помещением всех ветвей ответов в
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
416
предопределенную папку ($Trash), которая предназначена для хранения документов, помеченных к
удалению. Эту папку нужно предварительно создать и снять у нее флаг Show response documents in a
hierarchy (см. раздел 6.3.2). Данное действие необходимо для предотвращения конфликта, возникающего
при помещении в иерархическую папку ответных документов без своих родителей. Для сбора коллекции
ветвей ответов будет использоваться свойство Responses класса NotesDocument, и если быть совсем
точным, то это рекурсивная процедура PutAIIResponseslnFolder, взятая из примера к свойству Responses и
немного модифицированная автором. После сбора в папке ($Trash) всех ветвей ответов они также
принудительно удаляются. Приведем код двух используемых процедур.
Sub Postdocumentdelete (Source As Notesuidatabase)
Dim col As NotesDocumentCollection
Dim choice As String
Dim my_doc As NotesDocument
Dim db As NotesDatabase
Dim view As NotesView
Dim vc As NotesViewEntryCollection
choice = " ($Trash)"
Set col = Source.Documents
For j% = 1 To col.count
Set my_doc = col.GetNthDocument( j% )
Call PutAllResponsesInFolder( my_doc, choice )
Next
Set db = Source.Database
Set view = db.GetView( choice )
Set vc - view.AllEntries
Call vc.RemoveAll( True )
End Sub
Sub PutAllResponsesInFolder
( doc As NotesDocument, folderName As String )
Dim coll As NotesDocumentCollection
Dim curResp As NotesDocument
Set coll = doc.Responses
If Not ( coll Is Nothing ) Then
Set curResp = coll.GetFirstDocument
While Not ( curResp Is Nothing )
Call curResp.PutInFolder( folderName )
Call PutAllResponsesInFolder
( curResp, folderName )
Set curResp = coll.GetNextDocument
( curResp )
Wend
End If
End Sub
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
417
17.1.2 Документ с кратким описанием БД - about database
Документ About Database обычно используется для краткого описания предназначения данной БД.
Этот документ в клиенте Notes можно отобразить:
•
через меню Help -> About This Database;
•
в диалоге открытия существующей БД по кнопке About (см. раздел 2.5).
•
при открытии БД, указав в свойствах БД на закладке Launch (см. раздел 2.3.5) для поля When
opened in the Notes client значение Open "About database" document.
В интерфейсе браузера такой документ можно открыть с помощью URL ...БД/$about?OpenAbout.
Так же этот документ может выводиться при открытии БД, если установлены соответствующие свойства
БД с закладки Launch.
С точки зрения составляющих элементов дизайна более низкого уровня, документ About Database
может содержать практически все доступные для статичной страницы (Page) элементы дизайна.
Исключение составляет только слой и акции. Почти все допустимые для About Database объекты могут
быть созданы с помощью меню Create. Исключение составляют присоединенные файлы, которые
создаются через меню File -> Attach.
Документ About Database обладает еще и собственным окном свойств, которое можно вывести
через меню File -> Document Properties, при условии, что документ About Database находится в режиме
редактирования. Окно свойств документа About Database практически идентично окну свойств обычных
документов, находящихся в режиме редактирования (см. раздел 18.4). Отличия наблюдаются:
• на закладке Document Info (общая информация о документе), на которой присутствует
единственный флаг Render pass through HTML in Notes (исполнять код pass through HTML в клиенте
Notes). Если данный флаг поднят, то текст документа с установленным свойством Pass-Thru HTML
(см. раздел 4.4.4) будет обрабатываться и отображаться как HTML-код, а не статичный текст;
• на закладке Security (безопасность), на которой присутствует единственный флаг Available to
Public Access users (разрешить доступ к документу пользователям с уровнем доступа
«Общедоступный»). Поднятый флаг предоставляет пользователям, даже с уровнем «Нет доступа», но
с поднятым в ACL флагом Read public documents (возможность читать общедоступные документы)
получать доступ на отображение к документу About Database. Действие флага проявляется в
интерфейсе как клиента Notes, так и браузера.
17.1.3 Документ с кратким описанием процедуры работы с БД - using database
Документ Using Database обычно используется для краткого описания процедуры работы с данной
БД. Этот документ в клиенте Notes можно отобразить через меню Help -> Using This Database. В
интерфейсе браузера этот документ можно открыть с помощью URL ...БД/$help?OpenHelp. В остальном,
(как по составляющим, так и по окну свойств) документ Using Database идентичен документу About
Database.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
418
17.1.4 Иконка БД - icon
Иконка БД отображается в клиенте Notes на панели закладок (если БД там присутствует), а также на
прямоугольном значке БД, размещенном на рабочем пространстве Notes. В интерфейсе браузера иконка
БД может быть выведена по URL ...БД/$icon?Openlcon. Кроме этого, иконка БД может появляться в Webприложениях на генерируемой Domino странице при открытии БД (...БД?OpenDatabase). При открытии
иконки в рабочей панели Domino Designer выводится модальное окно Design Icon (разработка иконки):
Рис. 17.1 Модальное окно Design Icon
В этом окне слева размещены кнопки выбора инструментов для рисования, а внизу - выбор палитры.
По мнению автора, создавать иконки БД лучше всего в специализированных графических редакторах
(хотя бы MS Paint), и затем переносить иконку в окно Design Icon через буфер обмена по кнопке Paste
(вставить). В этом случае стоит не забывать, что размер иконки 32 х 32 пикселя, оставшаяся часть будет
обрезаться.
После определения в окне Design Icon иконки БД нажатием Ok сохраняем измененную картинку,
Cancel отменяет операцию.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
419
18 Приложения
18.1 Параметры архивирования БД
Получить доступ к параметрам архивирования текущей БД можно через окно свойств БД с закладки
Database Basics tab (см. раздел 2.3.1) по кнопке Archive Settings (параметры архивирования). При
нажатии на эту кнопку появляется модальное окно. В левой его части расположены закладки: Basics
(основная), Criteria (критерий отбора), Advanced (дополнительная) и Schedule (расписание), которые
переключают правую часть контента окна. Рассмотрим подробнее их содержимое.
18.1.1 Закладка Basics tab - основные параметры архивирования
Закладка Basics имеет следующий вид:
Рис. 18.1 Закладка Basics окна Archive Settings
Активной на закладке является только секция What Type of Archiving Should be Performed on this
Database? (какой тип архивирования будет применен к данной БД). Архивирование можно выполнять:
• через клиент Notes - радиокнопка Notes Client based to (клиент Notes базирующийся на). Далее
следует список, позволяющий определить, где же находится клиент Notes. По умолчанию
предлагается выбор Local (на локальном компьютере). Под «локальностью» здесь подразумевается
то, что архивирование будет выполнять клиент Notes либо через меню File -> Database -> Archive,
либо по расписанию - кнопка Schedule с закладки Advanced окна Archive Settings (будет
рассмотрена позднее в этом разделе);
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
420
• с помощью сервера - радиокнопка Domino server based on (сервер Domino базирующийся на) и
два поля типа список для выбора сервера источника БД и приемника архива. Данная радиокнопка
доступна только для серверных БД. В этом случае архивирование будет выполняться серверной
задачей Compact с ключами -а (архивирование и последующее сжатие исходной БД) или -А
(аналогично предыдущему ключу, но без сжатия БД).
18.1.2 Закладка Criteria - критерии отбора архивируемых документов
Вторая закладка окна Criteria имеет следующий вид:
Рис. 18.2 Закладка Settings окна Archive Settings
В списке секции Manage You Archive Criteria (управление критериями архивирования) можно
выбрать из двух предопределенных профилей архивирования Default for Last Modified (пo умолчанию,
исходя из срока последней модификации документов) и Default for Expired (по умолчанию для
«устаревших» документов). Включение выбранного профиля архивирования осуществляется по кнопке
Enable (разрешить), при этом напротив профиля отображается иконка «галочки». Одновременно может
быть включено несколько профилей архивирования.
Удалить, изменить или добавить новый профиль архивирования можно соответственно по кнопкам:
Delete (удалить), Edit (редактировать) и Add (добавить). Клик по последним двум кнопкам вызывает
модальное окно:
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
421
Рис. 18.3 Диалоговое окно Edit Archive Criteria
Секция Specify General Criteria Information (определение главной информации о критерии
архивирования) содержит:
• поле Descriptive name of these archive criteria settings (описательное название указанных
параметров архивирования), определяющее имя профиля архивирования. Значение этого поля
появляется после сохранения в списке секции Manage You Archive Criteria предыдущего окна и
определяет имя профиля архивирования;
• флаг Enable this criteria (включение этого профиля архивирования) - действует аналогично кнопке
Enable предыдущего окна.
Секция What Criteria Should be Used to Select Documents? (какой критерий будет использован для
отбора документов) содержит единственную кнопку Selection Criteria (выбор критерия), вызывающую
следующий диалог:
Рис. 18.4 Диалог Archive Selection Criteria
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
422
Первое поле-список определяет основной критерий отбора документов для архивирования и
содержит следующие значения:
• not accesed in more than (к которым не обращались более чем) - данная опция появляется в списке
только если в свойствах БД на закладке Advanced tab поднят флаг Maintain LastAccessed property
(см. раздел 2.3.7);
•
not modified in more than (которые не модифицированы более чем);
• with expiration date older than (с истекшим сроком хранения более чем). Установить свойство
«просроченности» документа можно программным путем, добавив в документ поле ExpireDate со
значением типа дата-время, когда этот срок соответственно истекает. Для некоторых баз (как сказано
в документации типа «дискуссия») пометить такие документы можно через меню Actions ->
Mark/Unmark Document as Expired;
• selected by user (выбираемые пользователем). При этом выборе становятся недоступными
остальные элементы интерфейса диалогового окна Archive Selection Criteria, и, кроме этого, на
закладке Advanced параметров архивирования необходимо опустить флаг Delete a document only
when the criteria can delete all responses as well (подробнее см. раздел 18.1.3);
• older than (старше чем). В этом случае отсчет «устаревания» документов определяется по дате
создания. Данная опция применима только при архивации БД в 7-й версии Notes/Domino.
Для всех перечисленных значений, исключая selected by user, можно определить во втором поле
срок наступления архивирования, и в последнем поле - единицы измерения этого срока, значения
которого: days (в днях), months (в месяцах) и years (в годах).
Кроме этого, в окне Archive Selection Criteria можно задать дополнительный критерий отбора на
основании видов и папок. Для этого необходимо выбрать радиокнопку Only in these views or folders
(только в этих видах или папках) и определить соответственно требуемые виды или папки в списке под
радиокнопками.
Для сохранения установленных
воспользуемся кнопкой ОК.
в окне Archive Selection Criteria критериев архивирования
Вернемся в диалог Edit Archive Criteria.
Секция What Should Happen to the Selected Documents? (что должно произойти с выбранными
документами) содержит следующие элементы интерфейса:
•
радиокнопка Copy documents into my archive database specified here, then clean up this
database (копировать документы в мою архивную БД и затем очищать текущую БД) задает режим, в
котором «устаревшие» документы копируются в архивную БД и затем удаляются из текущей. При этом
выборе становится доступна кнопка Archive Database (архивная БД), которая позволяет определить
имя файла архивной БД. Обратите внимание, что для каждого профиля архивирования может быть
выбрана своя архивная БД;
•
радиокнопка Just clean up this database without archiving (только «очистка» текущей БД)
аналогична предыдущей радиокнопке, исключая процесс переноса «устаревших» документов в
архивную БД.
Секция How do You Want to Clean up Documents in this Database? (как вы хотите «чистить»
документы в текущей БД) содержит следующие элементы интерфейса:
•
радиокнопка Remove archived documents from this database (удалять заархивированные
документы из текущей БД);
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
423
• радиокнопка Reduce this size of documents in this database (уменьшать размер документов в
этой БД). При этом выборе становится доступным следующий поле-список, предлагающий на выбор
одно из двух значений:
• Remove attachments, leave summary
содержимое полей с флагом SUMMARY);
(удалять
присоединенные файлы,
оставляя
• Remove attachments, leave summary and 40kb (удалять присоединенные файлы,
оставляя содержимое полей с флагом SUMMARY, а из RTF полей оставлять содержимое размером
до 40 Кбайт).
18.1.3 Закладка Advanced tab -дополнительные параметры архивирования
Закладка Advanced выглядит следующим образом:
Рис. 18.5 Закладка Advanced окна Archive Settings
На закладке присутствуют следующие элементы интерфейса:
• флаг Delete a document only when the criteria can delete all responses as well (удалять
документы только, когда по критерию отбора будут удалены все ответные на него документы).
Функциональность флага не поддерживается в случае, когда документы для архивирования
выбираются пользователем (значение selected by user из диалога Archive Selection Criteria, см. Рис.
18.4);
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
424
•
флаг Log all archiving activity into a log database (протоколировать процесс архивирования
соответствующий журнал). При поднятии флага становятся доступными:
• кнопка и поле, позволяющие определить местоположение файла БД, содержащего
протокол работы архивирования;
• флаг Include links to archived documents (включить ссылки на архивированые
документы), который в поднятом состоянии вносит ссылки на архивированные документы в БД
журнала архивирования.
18.1.4 Закладка Schedule tab - расписание локального архивирования
Закладка Schedule применима только к механизму локального архивирования (радиокнопка Notes
Client based to с закладки Basic, см раздел 18.1.1) и выглядит следующим образом:
Рис. 18.6 Закладка Schedule окна Archive Settings
Секция Archiving Schedule on Local Workstation (расписание архивирования локальной станции)
содержит следующие элементы интерфейса:
• флаг Schedule archiving (расписание архивирования) при поднятии делает доступными все
остальные элементы интерфейса закладки;
• список Run at (время запуска) определяет время, когда будет запускать процедура локального
архивирования;
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
425
• список On these days (в указанные дни) определяет дни недели, в которые будет запускаться
процедура локального архивирования;
Секция Perform Scheduled Archiving when Using (выполнять архивирование по расписанию с
использованием) содержит:
• радиокнопку Any location (любое место вызова). При выборе этого параметра настройки данной
закладки будут действительны для всех мест вызова из локальной адресной книги клиента Notes;
• радиокнопку Specific location (указанное место вызова). Выбор этой опции позволяет указать одно
или несколько мест вызова, для которых будут действительны настройки данной закладки;
• кнопку Reset to default (установить по умолчанию). Нажатие кнопки восстанавливает настройки
параметров расписания локального архивирования по умолчанию, а именно: поле Run at в значение
12:00, On these days - Tuesday (вторник) и радиокнопку в значение Any location.
18.2 Параметры реплицирования БД
Получить доступ к параметрам реплицирования текущей БД можно через меню File -> Replication ->
Settings или по кнопке Replication Settings с первой закладки окна свойств БД. При этом появляется
модальное окно. В левой его части расположены пять закладок: Basics (основные параметры), Space
Savers (область сохранения), Send (что отправлять), Other (дополнительные возможности) и Advanced
(расширенные возможности), которые переключают правую часть контента окна. Рассмотрим подробнее
их содержимое по закладкам.
18.2.1 Закладка Basics - основные параметры
Закладка Basics имеет вид:
Рис. 18.7 Закладка Basics окна параметров репликации
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
426
В ряде случаев все элементы интерфейса закладки Basics недоступны для изменения (из личного
опыта такое происходит, когда у текущей БД нет ни одной локальной реплики, присутствующей на
рабочем пространстве клиента Notes). Закладка Basics имеет отношение к локальным репликам БД, ряд
полей закладки пересекается с подобными полями с закладки Replication документа Location из личной
адресной книги.
Рис. 18.8 Закладка Replication документа Location личной адресной книги
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
427
Рис. 18.9 Страница Replication рабочего пространства клиента Notes
Первая секция How often replication occurs (как часто происходит репликация) закладки Basics
параметров репликации содержит следующие элементы интерфейса:
• флаг Scheduled replication is enabled (репликации по расписанию разрешены). Если опустить
данный флаг, то это автоматически снимает флаг On для данной БД на странице Replication рабочего
пространства клиента Notes. Другими словами, это исключает текущую БД из стандартного процесса
реплицирования по расписанию, инициированного клиентом Notes;
• флаг Replicate using schedule for priority databases (репликация использует расписание для
приоритетных БД). Данный флаг коррелирован с флагом Additional interval for high-priority
databases (дополнительный интервал реплицирования БД с высоким приоритетом). Приоритет
реплицирования определяется на закладке Other параметров реплицирования (поле Scheduled
replication priority: со значением High, см. раздел 18.2.4);
• кнопка Change Schedule (изменить расписание) позволяет с помощью диалогового окна
переопределить параметры реплицирования, определяемые в документе Location на закладке
Replication.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
428
Рис. 18.10 Модальное окно, вызываемое по кнопке Change Schedule
Возвращаемся опять на закладку Basics параметров репликации. Секция How much will be
replicated (объем реплицирования) содержит следующие элементы интерфейса:
• флаг Send documents to server (отправлять документы на сервер). Опущенный флаг блокирует
передачу документов из локальной реплики на сервер в процессе репликации;
• флаг Receive documents from server (принимать документы с сервера). Опущенный флаг
блокирует прием документов в локальную реплику с сервера в процессе репликации. Поднятый флаг
делает доступным следующее поле-список, в котором определяется как будут приниматься документы
с сервера. Допустимыми для поля-списка являются следующие значения:
• Full Documents (полные документы). Данный выбор
дополнительных ограничений на принимаемые с сервера документы;
не
накладывает
никаких
• Partial Documents (частичная передача документов). При этом значении можно ограничить
общий размер принимаемых документов и размер присоединенных к ним файлов. Ограничения
устанавливаются в следующих элементах интерфейса:
•
флаг и поле Truncate documents lager than XXX kb («усекать» документы с
размером более XXX кбайт);
•
флаг и поле Limit attachments size to XXX kb (ограничить размер присоединенных
файлов до XXX кбайт);
• Summary Only (только поля с флагом SUMMARY). Соответственно принимаются только
значения из полей документа с флагом SUMMARY;
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
429
• Smallest First (наименьшие документы - в первую очередь). Этот выбор позволяет, в
первую очередь, реплицировать самые малые по объему документы. При этом, можно прервать
процесс реплицирования, чтобы не получать документы большие по размеру.
Секция Which server is used for replication (какой сервер используется для репликации) содержит
единственное поле Preferred server (сервер предпочтительный для репликации), которое позволяет
установить последовательность предпочтений при выборе сервера для репликаций. Поле имеет смысл в
случае, когда реплика текущей БД присутствует на разных серверах. Поле содержит следующие типы
значений:
• Any available, try last successful first (любой доступный, в первую очередь, будет произведена
попытка реплицирования с сервером, с которым прошла последняя успешная репликация);
• Any available, try имясервера first (любой доступный, в первую очередь, будет произведена
попытка реплицирования с сервером с именем имя_сервера);
• имя_сервера (репликация будет только с указанным сервером).
На закладке Basics остался нерассмотренным единственный флаг Apply changes to all locations
(применить изменения этой страницы ко всем местам вызова из личной адресной книги), расположенный в
самом низу закладки. Поднятие флага позволяет распространить настройки страницы Basics с текущего
места вызова на все документы Location личной адресной книги.
18.2.2 Закладка Space Savers - что сохранять
Закладка Space Savers имеет вид:
Рис. 18.11 Закладка Space Savers окна параметров репликации
В секции Remove documents from the replica (удалять документы из текущей реплики) расположены
следующие элементы интерфейса:
• флаг и просто поле Remove documents not modified in last: XXX days (удалять документы, не
модифицировавшиеся в течении XXX дней). Поле XXX days имеет смысл, даже если не установлен
предыдущий флаг. Поле число дней в первую очередь определяет, когда из базы удалять «окурки»
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
430
(stub) документов, оставшиеся после удаления самих документов. «Окурки» нужны для
распространения удалений, произошедших в текущей версии, на другие реплики. Domino регулярно
удаляет «окурки», в первую очередь удаляются те из них, которые произошли в период более чем 1/3
от установленного значения XXX days. При установке флага Remove documents not modified in last
помимо удаления окурков, будет еще выполняться, собственно, удаление документов, которые не
изменялись в течение указанного времени. Такие удаления происходят без «окурков», и поэтому при
репликации эти удаления не распространяются;
•
флаг Receive summary and 40Kb of rich text only (получать только поля с флагом SUMMARY, а из
RTF полей оставлять содержимое размером до 40 Кбайт). Поднятый флаг «заставляет» реплику
принимать целиком только значения полей с флагом SUMMARY, а из RTF полей принимается до 40
Кбайт информации. Документ, при этом, принимает статус «усеченный». Такие документы не
подлежат редактированию, но могут быть восстановлены из базовой реплики, например, в режиме
чтения «усеченного» документа через меню Actions -> Retrieve Entire Document. Флаг присутствует
на закладке только для серверных реплик.
Параметры секции Receive only a subset of the documents (получать только подмножество
документов) полностью дублируются на закладке Advanced параметров реплицирования (см. раздел
18.2.5) и поэтому будут рассмотрены позднее в контексте закладки Advanced.
18.2.3 Закладка Send - что отправлять
Закладка Send имеет вид:
Рис. 18.12 Закладка Send окна параметров репликации
На ней размещены три флага:
•
Do not send deletions made in this replica to other replicas (не отправлять в другие реплики
информацию об удалении документов, произошедшем в текущей реплике);
•
Do not send changes in database title & catalog info to other replicas (не отправлять в другие
реплики изменения заголовка БД и категории из поля List in Database Catalog Categories с закладки
Design tab окна свойств БД текущей реплики, см. раздел 2.3.4);
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
431
•
Do not send changes in local security property to other replicas (не отправлять в другие реплики
изменения параметров локального шифрования, произошедшие в текущей реплике).
18.2.4 Закладка Other-дополнительные возможности
Закладка Other имеет вид:
Рис. 18.13 Закладка Other окна параметров репликации
На ней расположены следующие элементы интерфейса:
•
флаг Temporarily disable replication for this replica (временно запретить репликации для текущей
реплики);
•
три радиокнопки Scheduled replication priority: Low, Medium, High (приоритет при репликации по
расписанию, низкий, средний и высокий). Данные настройки используются в документах Connection
(соединение) для репликаций по расписанию между серверами;
•
поле Only replicate incoming documents saved or modified after: (реплицировать только
документы, сохраненные и модифицированные после) определенной даты и времени. Основное
предназначение поля разрешать проблемные ситуации, возникшие при репликациях. При очистке
истории репликаций и этого поля репликации подвергаются все документы, удовлетворяющие
формуле репликации;
•
флаг и просто поле CD-ROM publishing date (дата публикации БД на CD-ROM). Некоторые
организации распространяют свои БД на CD-ROM. Для того, чтобы обновление реплики у
пользователя не сканировало всю базу при первой репликации, можно поднять флаг и определить,
собственно, значение данного поля.
18.2.5 Закладка Advanced -дополнительные возможности
Закладка Advanced имеет вид:
©InterTrust Со. Тел. (495) 9567928 http://www.intertrust.ru
432
Рис. 18.14 Закладка Advanced окна параметров репликации
Секция Receive only a subset of information from other replicas (принимать только подмножество
информации из других реплик) содержит следующие элементы интерфейса:
•
два похожих по смыслу поля-списка When computer (компьютер текущий), Receives from
(компьютер, с которым реплицируется текущий) и кнопки
, которые позволяют добавить в
соответствующий список новые значения. Данные две строчки нужны в случае, когда параметры
реплицирования отличаются для различных реплик с указанных серверов;
•
флаг Documents in specified views or folders (документы, находящиеся в указанных видах или
папках) позволяет при его установке определить подмножество документов, входящих в
определенные папки и виды, которые будут получены в текущей БД в результате репликации. Для
задания конкретных видов и папок используется поле-список, расположенный под флагом Selected
documents;
•
флаг Documents by selection formula (документы, определяемые по формуле репликации).
Поднятый флаг позволяет определить формулу отбора документов, которые будут получены в
текущей БД в результате репликации. Для задания конкретной формулы отбора используется полесписок, расположенное под флагом Selected documents. Обратите внимание, что флаги Documents
in specified views or folders и Documents by selection formula работают как радиокнопки, т.е.,
поднятие одного флага влечет к снятию другого;
•
флаг Selected documents (выбранные документы). Флаг предназначен для создания реплики по
выделенным документам. Применяется только при репликации клиент - сервер. Другими словами,
можно создать такую частичную реплику на основании реплики, лежащей либо на сервере, либо на
клиенте. Соответственно нельзя использовать этот механизм в репликациях сервер - сервер.
Первоначально флаг напрямую недоступен для установки. Для создания частичной реплики по
выделенным документам нужно выбрать в БД источника несколько документов, и затем, с помощью
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
433
операции drag&drop, перенести их на закладку Replication рабочего пространства. Это вызовет
следующий диалог:
Рис. 18.15 Модальное окно создания новой реплики с репликацией выбранных документов
Диалог очень похож на аналогичный, используемый при создании обычной реплики. Из отличий
можно отметить наличие флага Extend replication to include entire database containing these documents
(расширенная репликация, включающая всю БД, содержащую указанные документы). Поднятие флага
приводит к обычной (т.е., не только выбранных документов) репликации.
После выполнения селективной репликации по выбранным документам в параметрах репликации БД
приемника и источника автоматически поднимается флаг Selected documents, причем у локальной
реплики его можно вручную опустить.
Вернемся опять на закладку Advanced окна параметров репликации. Секция Recive these elements
from other replicas (принимать указанные элементы из других реплик) следующие элементы интерфейса:
• флаги Design elements (элементы дизайна, т.е. формы, виды и т.п.), Agents (агенты), Replication
formula (формула репликации), Access control list (список управления доступом), Deletions
(удаления), Fields (поля) определяют элементы дизайна и параметры БД (например, список
управления доступом), которые нужно принимать при реплицировании;
•
кнопка Define (определить) становится доступной при установке флага Fields и выдает диалоговое
окно, где можно определить поля, которые будут приниматься при репликации.
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
434
Рис. 18.16 Окно для выбора реплицируемых полей
В поле Select fields to replicate (выбор полей для репликации) можно выбрать значение Custom
(определяемые пользователем), а в нижнем окне снять «галочки» с полей, которые Вы не хотите
принимать в текущей реплике в процессе репликации. С версии 6.5 по 7-ю включительно, такое действие
сопровождается побочными эффектами: автоматически поднимается флаг Documents by selection
formula, и, опять же, автоматически вводится следующая формула селективной репликации: «SELECT
(Type="Person":"Database")|((Type="Group")&(@lsUnavailable(GroupType)|(GroupType="0":"1")))», при этом
«затирается» предыдущее значение формулы селективной репликации, если таковая была введена. Если
такие действия не нужны по смыслу задачи, то необходимо самостоятельно изменить формулу и снять
соответствующий флаг. Указанное поведение признано IBM как ошибка.
18.3 Журнал репликаций
Получить доступ к журналу репликаций текущей БД можно через меню File -> Replication -> History
или по кнопке Replication History с первой закладки окна свойств БД. При этом появляется модальное
окно:
Рис. 18.17 Окно журнала репликаций БД
Окно имеет следующие элементы интерфейса:
•
окно с записями о прошедших репликациях, в котором можно перейти на конкретную запись;
©InterTrust Co. Тел. (495) 9567928 http://www.intertrust.ru
435
•
кнопка Сору (копировать) копирует записи в буфер обмена. В дальнейшем их можно вставить,
например, в документ Word;
•
кнопка Clear (очистить) удаляет текущую запись из журнала репликаций;
•
кнопка Clear All (очистить все) удаляет все записи из журнала репликаций;
•
кнопка Done (сделано) - аналог Ok, закрывает окно Replication History.
В журнале репликаций для одного приемника (сервера) сохраняется только последнее значение
истории реплицирования. При каждой последующей репликации сервер Domino обращается к журналу
репликаций и, при его наличии, выполняет процедуру реплицирования только тех документов, которые
были модифицированы, добавлены или удалены с момента последней репликации по журналу. Если же в
журнале записи о репликации с требуемым источником обнаружено не было, то ищется параметр Only
replicate incoming documents saved or modified after (реплицировать водящие документы, сохраненные
или измененные после определенного времени) из окна параметров репликации, и осуществляется
репликация только таких документов. И наконец, если это поле пусто, то идет проверка всех документов.
Поэтому удалять записи из журнала репликаций надо только в случае возникновения проблем в процессе
реплицирования.
Внутрикластерный репликатор сохраняет историю репликаций в своей памяти и «сбрасывает» ее в
журнал примерно раз в час.
18.4 Свойства документа
Документ, так же как и элементы дизайна имеет ряд свойств, которые могут быть определены или
наблюдаемы в окне его свойств. Для вывода окна свойств документа необходимо, стоя на нем в виде или
папке, воспользоваться пунктами меню File -> Document Properties.
В общем случае число и содержимое закладо
Download