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


465 100 4MB

Russian Pages 265

Report DMCA / Copyright

DOWNLOAD PDF FILE

Recommend Papers

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

  • 0 0 0
  • Like this paper and download? You can publish your own PDF file online for free in a few minutes! Sign Up
File loading please wait...
Citation preview

Разработка Web-приложений на основе Lotus Domino 4.6.x и Lotus eSuite DevPack 1.0 1

Предисловие Глубокоуважаемый читатель! Мы предлагаем вашему вниманию книгу, посвященную вопросам разработки Webприложений на базе программных продуктов компании Lotus Development Corporation, an IBM Subsidiary: Lotus Domino Server 4.6 и Lotus eSuite DevPack 1.0. , который является чуть ли не синонимом термина groupware - систем коллективной работы с документами, чрезвычайно популярен за рубежом и уже получил широкое распространение в России. С нашей точки зрения Notes - это целая совокупность технологий, таких как система управления документоориентированными базами данных, средства разработки приложений, включая WEB-приложения, электронная почта и агенты передачи почты, системы тиражирования и защиты данных, средства поддержки Internet-технологий. Notes предназначен прежде всего для решения задач автоматизации деловых процессов сотрудников предприятий и организаций. Приложения для деловых процессов ориентируются вокруг определения и координации деятельности людей, совместно выполняющих какую-либо работу. Эти процессы могут вовлекать большое количество людей в одной или даже нескольких организациях, которые часто при этом территориально разобщены: это могут быть сотрудники разных отделов, поставщики и покупатели, которым нужен одновременный доступ к совместно используемым данным и между которым циркулирует, как правило, большое количество разнородной и слабоструктурированной информации. При этом помимо внутренней информационной структуры документов важно то, как эти документы живут во времени и пространстве между людьми - участниками деловых процессов. Средой, в которой существуют и перемещаются эти документы, являются корпоративные сети Notes. Сети Notes аккумулируют в себе возможности существующих локальных и глобальных корпоративных сетей и дополняют их новым содержанием. А чтобы эти сети успешно эксплуатировались и расширялись, необходимы квалифицированные специалисты - сетевые администраторы, знакомые с продуктом Lotus Domino Server. В помощь им и адресована представляемая книга. Книга подготовлена ведущим сотрудником компании ИнтерТраст Н.Н. Ионцевым, сертифицированным специалистом (CLP Application Developer R.4 и CLP System Administrator R.4) и сертифицированным инструктором (CLI) по Lotus Notes. Она продолжает серию книг, посвященных продукту Lotus Notes различных версий и созданных специалистами компании ИнтерТраст.

• • •

Для разработчиков приложений и администраторов: Разработка приложений и администрирование в Lotus Notes 3.х. Н.Н. Ионцев, В.А. Панов, A.В. Данилин. 1995, 224 с. Для разработчиков приложений: Lotus Notes R. 4: разработка приложений, язык LotusScript, встроенные классы. Н.Н. Ионцев, В.К. Кулаков, В.А. Панов. 1996, 574 с. Для пользователей: Lotus Notes 4.х для пользователя. Н.С. Березина, Е.Н. Трубникова. 1997, 544 с.

Всех читателей, заинтересованных в более глубоком изучении практических вопросов администрирования и разработки приложений в Lotus Notes мы приглашаем в Авторизованный центр обучения Lotus Development Corp. компании ИнтерТраст (тел. (095)-956-7928). Разобраться с техническими вопросами эксплуатации программных продуктов компании IBM/Lotus Вам помогут специалисты Авторизованного центра технической поддержки Lotus Development Corp. компании ИнтерТраст (тел. (095)-956-7928). С уважением, Генеральный директор компании ИнтерТраст

А.А. Линев

© InterTrust Co. Тел. 956-7928

2 Разработка Web-приложений на основе Lotus Domino 4.6.x и Lotus eSuite DevPack 1.0

Предисловие авторов Книга, которую Вы держите в руках, посвящена вопросам разработки Web-серверов на основе программных продуктов компании Lotus Development Corporation, an IBM Subsidiary: Lotus Domino Server 4.6 и Lotus eSuite DevPack 1.0. Книга предназначена прежде всего разработчикам приложений для Lotus Notes, уже знакомым с архитектурой баз данных Notes, языком LotusScript и имеющим опыт создания продвинутых баз Notes. Если они хотят обеспечить доступ к своим приложениям не только из клиентов Notes, но и, по протоколу HTTP, из любых Web-броузеров, то для них будет интересен материал, посвященный вопросам разработки Web-приложений для Domino. Кроме того, в книге подробно рассмотрены вопросы конфигурирования Web-сервера Domino, включая поддержку SSL. По мнению авторов, хорошо знакомых с программой тестов для получения квалификации CLP Principal System Application Developer, содержание книги примерно на 90% охватывает программу теста Developing Domino Application for the Web (DDA) и примерно на 85% программу теста Domino Web Development and Administration (DWDA). Однако в первую очередь в книге внимание уделяется вопросам, представляющим практический интерес, а не подготовке к сдаче тестов. Вы можете быть удивлены, обнаружив, что первые три главы книги посвящены классическим вопросам, давно и хорошо известным разработчикам Web-приложений: протоколу HTTP, языку HTML и интерфейсу CGI. Но практика показывает, что без знакомства с этой «классикой» разработчик баз Notes не сможет создать продвинутых Web-приложений для Domino. Мы рассматриваем их настолько, чтобы при последующем рассмотрении Lotus Domino избежать повсеместных ссылок на дополнительную литературу, и не претендуем на полноту изложения этой «классики». К сожалению, мы оставляем практически без какого-либо рассмотрения и относительно новую «классику» - языки Java и JavaScript, знание которых необходимо для разработки сервлетов и при создании HTML-страниц, содержащих апплеты eSuite DevPack. Для тех же, кто давно знаком с разработкой Web-приложений на базе других программных продуктов, книга, вероятно, представит основной интерес в части, посвященной новому, интересному, и достаточно перспективному продукту - Lotus eSuite DevPack 1.0. Продукт представляет собой набор апплетов, которые «могут помещаться» в HTML-страницы, находящиеся на любых Web-серверах, включая и Lotus Domino. Интерфейс апплетов открыт, хорошо продуман и доступен из JavaScript. Апплеты в пределах HTML-страницы могут эффективно обмениваться информацией друг с другом, используя технологию InfoBus. Это далеко не простые апплеты, как может показаться из материалов рекламного характера о eSuite. У некоторых из этих апплетов количество параметров, свойств и методов измеряется сотнями. Гибкость и функциональные возможности этого «набора кубиков» достойны уважения. Книга родилась в стенах компании InterTrust Co. и ее учебного центра подготовки специалистов по продуктам компании Lotus как конспект лекций. Авторы отдают себе отчет в том, что книга не лишена недостатков, и имеют к себе претензии по стилю изложения и оформления материала. Ряд ее разделов хотелось бы улучшить, дополнить и снабдить более интересными примерами. Однако в условиях необычайно быстрого развития продукта, когда каждые три месяца появляются его новые версии, лучше скорее дать в руки читателей информацию в том виде, как она есть сейчас, чем отложить выпуск книги еще на один-два месяца. Книга подготовлена: гл. 4-8 - C. В. Будылев, гл. 1-3, 11.6, 11.10 - А.Е. Игнатов, гл. 9-10 и 11 (кроме 11.6, 11.10), а также «сборка» и общее редактирование всего материала - Н.Н. Ионцев. Авторы будут искренне рады Вашим замечаниям и предложениям по содержанию книги и любой информации технического характера по затронутым в книге вопросам. Направляйте их по e-mail: [email protected], [email protected], [email protected] или «оставляйте» на WWW-сервере компании http://www.inttrust.ru. С уважением, C. Будылев, А.Игнатов, Н. Ионцев.

© InterTrust Co. Тел. 956-7928

Разработка Web-приложений на основе Lotus Domino 4.6.x и Lotus eSuite DevPack 1.0 3

1. Введение в протокол HTTP Internet представляет собой множество объектов, связанных между собой гипертекстовыми ссылками. В одном объекте часто содержится информация о местонахождении другого, и на основании этой информации возможен переход от одного объекта к другому.

1.1.

Гипертекстовые ссылки и URL

Местонахождение объекта в Internet, его «адрес» определяет URL (Uniform Resource Locator – универсальный указатель ресурса). URL однозначно идентифицирует объект среди множества других объектов. Различают абсолютные и относительные URL.

1.1.1. URL для протокола HTTP Общий вид URL для протокола HTTP следующий: http://сервер:порт/путь?параметры. Рассмотрим его элементы.

Сервер Internet состоит из множества компьютеров, объединенных в сеть. Чтобы идентифицировать конкретный компьютер среди всех возможных, ему присваивают уникальный числовой адрес (так называемый IP-адрес). Адрес состоит из четырех чисел от 0 до 255 разделенных символом «.» (точка). Выглядит это следующим образом: 194.65.115.200. Однако использовать такой адрес достаточно неудобно. Ведь для этого приходится запоминать неинформативные последовательности чисел. Но для идентификации конкретного сервера в Internet используются также символьные имена следующего формата: хост.доменN.…домен3.домен2.домен1. В качестве домена первого уровня используется либо двухбуквенное обозначение страны (ru – Россия, uk –Англия и т.п.), либо трехбуквенное обозначение принадлежности сервера (com – коммерческая организация, org – некоммерческая организация, mil – военное учреждение, gov – правительственное учреждение, net – сетевой провайдер). В качестве домена второго уровня обычно используется название предприятия или организации. Для прокола http в домене обычно существует единственный хост www, что показывает, что данный сервер является World Wide Web сервером. Например: www.inttrust.ru, www.lotus.com.

Порт На одном и том же компьютеров могут одновременно работать несколько приложений, в том числе и WWW-серверов (например, Lotus Domino и Apache). Для определения, к какому именно приложению происходит обращение, служит порт. По умолчанию для протокола HTTP номер порта равен 80. Первые 1024 порта зарезервированы за стандартными протоколами, а остальные могут быть относительно свободно использованы.

Путь Путь к документу на WWW-сервере аналогичен пути к файлу в файловой системе. В качестве корневого каталога выступает сам сервер, а в качестве разделителей – символ “/”. Например: http://www.company.com/dir/subdir/doc.html.

1.1.2. Абсолютные URL Абсолютный URL содержит полное описание доступа к объекту. Он состоит из двух основных частей, идентифицирующих данный объект - протокола и пути - в формате протокол:путь. © InterTrust Co. Тел. 956-7928

Введение в протокол HTTP

4

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

Http Ftp

Описание

Формат mailto:пользователь@сервер mailto:пользователь@сервер?subject=тема mailto:пользователь@сервер?сс=копия mailto:пользователь@сервер?bсс=копия

Передача почтового сообщения Протокол передачи гипертекста Протокол передачи файлов

http://сервер:порт/путь?параметры ftp://пользователь:пароль@сервер/путь

В дальнейшем, говоря об URL, мы будем подразумевать, что речь идет о протоколе http.

1.1.3. Относительные URL Относительный URL содержит только путь к объекту относительно текущего объекта. Из URL текущего объекта берется протокол, сервер, порт и путь к текущему объекту. Далее к нему добавляется относительный URL. Предположим, что URL текущего (загруженного в броузер) документа следующий: http://www.inttrust.ru/a/b/c/f.html. Рассмотрим различные варианты относительных URL.

• • • •

Относительный URL начинается с символа «/» и имеет следующий вид: /d/e.html. результате URL будет указывать на документ http://www.inttrust.ru/d/e.html. Относительный URL не начинается с символа «/» и имеет следующий вид: d/e.html. результате URL будет указывать на документ http://www.inttrust.ru/a/b/c/d/e.html. Относительный URL начинается с символов «../» и имеет следующий вид: ../d/e.html. результате URL будет указывать на документ http://www.inttrust.ru/a/b/d/e.html. Относительный URL начинается с символов «../../» и имеет следующий вид: ../../d/e.html. результате URL будет указывать на документ http://www.inttrust.ru/a/d/e.html.

1.2.

В В В В

Протокол HTTP

1.2.1. Обзор протокола HTTP HTTP (HyperText Transfer Protocol) является протоколом прикладного уровня Internet, разработанным для передачи информации между WWW-сервером и клиентом (броузером). Взаимодействие происходит следующим образом. Броузер выдает запрос серверу на прием или передачу информации. Сервер обрабатывает данный запрос и возвращает броузеру результат обработки. Запрос

HTTP Результат запроса WWW-сервер

Клиент

Рис. 1.1 Протокол HTTP: запрос клиента и ответ сервера

© InterTrust Co. Тел. 956-7928

Разработка Web-приложений на основе Lotus Domino 4.6.x и Lotus eSuite DevPack 1.0 5

Сначала броузер устанавливает соединение с сервером по протоколу TCP/IP. Затем броузер отсылает на сервер запрос. Сервер обрабатывает запрос и возвращает броузеру результат операции. Затем броузер считывает с сервера данные. После этого соединение разрывается. Необходимо помнить, что WWW-сервер не хранит информацию о предыдущих запросах и при каждом новом запросе устанавливается новое соединение, а после выполнения запроса это соединение разрывается. В запросе броузера содержатся следующие поля.

• • •

• • • • •

Метод запроса. Описывает, что необходимо сделать с объектом. URL объекта, с которым необходимо произвести соответствующую операцию. Версия протокола HTTP поддерживаемая броузером. Используется для предотвращения ошибок, связанных с применением сервером и броузером различных версий этого протокола. В ответе сервера содержатся следующие поля. Версия протокола HTTP, поддерживаемая сервером. Код статуса. Трехзначное число, содержащее результат выполнения запроса. Описание. Текстовая строка, содержащее краткое описания результата выполнения запроса. Информация о запрашиваемом объекте. MIME-заголовок запрашиваемого объекта.

MIME-заголовок (Multipurpose Internet Mail Extension) используются для указания типа объекта. Заголовок состоит из основного типа и расширения: тип/расширение. Тип определяет основной тип ресурса, а расширение описывает его более подробно. Например, тип может быть image (изображение), а расширение - gif (изображение в формате GIF), jpeg (изображение в формате JPEG) или tiff (изображение в формате TIFF). Приведем наиболее употребительные заголовки MIME. text/html text/plain image/gif image/jpeg video/mpeg

Документ HTML. Текстовый документ. Изображение в формате GIF. Изображение в формате JPEG. Видео в формате MPEG.

Код статуса имеет следующие группы значений. Код статуса

Описание

3xx

Информационная Запрос выполнен успешно Запрос перенаправлен

4xx

Ошибка броузера

5xx

Ошибка сервера

1xx 2xx

Дополнительная информация Зарезервировано Запрос был успешно обработан Требуются дополнительные действия Сервер не может выполнить запрос, потому что запрос содержит ошибки Запрос не содержит ошибок, но сервер не может его выполнить

1.2.2. Основные методы запроса для протокола HTTP Метод GET протокола HTTP запрашивает объект, URL которого задан в заголовке запроса. После исполнения запроса броузер получает запрошенный объект, тип которого задан в MIMEзаголовке.

© InterTrust Co. Тел. 956-7928

6

Введение в протокол HTTP

Метод HEAD используется аналогично методу GET, с той лишь разницей, что сервер не возвращает по данному запросу объект. Данный метод используется для проверки нахождения данного ресурса на сервере. Метод POST предназначен для передачи объекта на сервер. В результате выполнения такого запроса броузер передает серверу указанный объект. Сервер обрабатывает данный объект и может сохранить его в качестве ресурса или не сохранять. В случае сохранения сервер посылает броузеру ответный объект, которым подтверждает обработку запроса. Код статуса в этом случае имеет значение 201. В качестве ответного документа обычно выступает документ HTML. Если же сервер не сохраняет объект, то код статуса равен 204 – «нет содержимого».

© InterTrust Co. Тел. 956-7928

Разработка Web-приложений на основе Lotus Domino 4.6.x и Lotus eSuite DevPack 1.0 7

2. Введение в HTML Аббревиатура HTML расшифровывается как Hyper Text Markup Language – язык гипертекстовой разметки документов. С помощью HTML можно создавать гипертекстовые документы, не зависящие от программно-аппаратной платформы и от конкретной программы просмотра (броузера). Документ HTML представляет собой текстовый файл (обычно с расширением .html или .htm), который может быть создан и изменен в любом текстовом редакторе. В документе HTML описывается, какая информация (текст, графика, апплеты Java и т.п.) будет «видна» при просмотре этого документа в броузере, и, с помощью соответствующих элементов (тегов), задается, как будет «видна» эта информация (форматирование текста, размер шрифта и т.п.). Все дополнительные объекты (изображения, апплеты и т.п.) хранятся в отдельных файлах, а в документе HTML содержатся лишь ссылки на них. В данной главе дается введение в HTML, без привязки к конкретной версии, с той степенью подробности, которая необходима для понимания последующих глав книги. Для получения более подробной и развернутой информации о создании HTML-документов, обращайтесь к источникам [1-2, 5].

2.1.

Создание документов HTML 2.1.1. &-последовательности

Часто бывает необходимо внести в HTML-документ символ, который аналогичен используемому при форматировании текста, например кавычки. Некоторые WWW-сервера отказываются передавать символы из второй половины кодовой таблицы, то есть русские буквы. Тогда на помощь приходят &-последовательности. &-последовательность состоит из символа & и следующего за ним кода символа или последовательности символов. Например, ´ – символ с кодом 180, " – кавычки. &-последовательности пишутся только «маленькими» буквами. &-последовательность обязательно должно завершаться точкой с запятой. Примеры некоторых из существующих &-последовательностей. < - символ "" & - символ "&" " - двойные кавычки.

2.1.2. Теги Тег (tag) является элементом, с помощью которого производится форматирование документа. Тег – это некоторый текст, заключенный в угловые скобки, наподобие . Теги делятся на одинарные и парные. Если тег парный, то для каждого открывающего элемента необходим закрывающий . Для одинарного тега закрывающий тег не нужен. Теги могут содержать атрибуты, которые задают различные свойства для тега, наподобие . В каких случаях используются одинарные теги, а в каких двойные? Если вам необходимо произвести над документом однократное действие, например, вставить горизонтальную линию – используется одинарный тег . А если какое либо действие необходимо произвести над фрагментом документа, например, установить размер шрифта, тогда необходим двойной тег … .

© InterTrust Co. Тел. 956-7928

8

Введение в HTML

Необходимо помнить, что броузер игнорирует в документе символы перевода строки, множественные пробелы и неизвестные ему теги.

2.1.3. Структура документа HTML Простейший документ HTML выглядит следующим образом.

Заголовок

Тело документа

Рис. 2.1 Вид простейшего HTML-документа в броузере Документ заключен между парными тегами … . Между парными тегами … может быть расположена служебная информация о документе: заголовок, мета-теги и т.п. Внутри тегов … находится заголовок документа, который будет показан в заголовке окна броузера. Само же описание документа содержится внутри тегов ….

2.1.4. Комментарии Текст, помещенный между тегами



Можно также использовать JavaScript в поле $$Return, например, чтобы после нажатия на кнопку Submit «вернуться» в истории на два шага назад: "";

5.2.5. Псевдособытия HTML Attributes Псевдособытия HTML Attributes используются для вставки HTML-атрибутов в теги, генерируемые для соответствующих элементов дизайна Notes.

• • •

Информация из HTML Attributes для формы «попадает» в HTML-атрибуты тега . Информация из HTML Attributes для Java-апплета «попадает» тег для отображения в броузерах, не поддерживающих Java, в качестве «альтернативного текста». Она вставляется непосредственно перед закрывающим тегом . Информация из HTML Attributes для полей используется в основном для указания размеров поля для ввода текста (в режиме редактирования). • Для полей всех типов, кроме Rich Text и Keywords, она «попадает» в HTML-атрибуты соответствующего полю тега . • Для поля типа Rich Text она «попадает» в HTML-атрибуты соответствующего полю тега . • Для поля типа Keywords она «попадает» в HTML-атрибуты соответствующего полю тега .

В Notes версии 4.5 HTML-атрибуты для полей можно было указывать в свойствах поля на закладке Options в поле Help description. Например, []. В Notes версии 4.6 эта информация игнорируется, если в событии HTML Attributes для данного поля что-то указано.

© InterTrust Co. Тел. 956-7928

52

Разработка форм для Web-приложений Domino

5.2.6. Поля и их HTML-аттрибуты. Обеспечение функционирования полей ключевых слов HTML-атрибуты для полей используются в основном для указания их размеров и свойств в режиме редактирования. В Notes версии 4.6 для полей имеется специальное событие для этих целей - HTML Attributes. В нем «в кавычках» указываются необходимые атрибуты. Для всех редактируемых полей Domino автоматически генерируются атрибуты "name=FieldName type=FieldType". Задание этих атрибутов «вручную» может привести к экзотическим последствиям. Для всех полей, кроме Rich Text и Keywords, могут использоваться атрибуты size и maxlength, например, "size=30 maxlength=40", где size - длина поля для ввода в символах, а maxlength - максимальная длина строки, которую можно ввести в это поле. Для полей типа Rich Text могут использоваться атрибуты rows, cols и wrap, например, "rows=5 cols=70 wrap=virtual", где rows - число строк в текстовой области (по умолчанию 7); cols - число колонок в текстовой области (в символах, по умолчанию 50); wrap=virtual - если указано, переводы строк будут вычисляться автоматически в зависимости от размеров окна, в противном случае сохраняются «авторские» переводы строки. Для полей типа Keywords (тип Dialog list, многозначное) может использоваться атрибут size, например, "size=3", где size - число вариантов значения, видимых одновременно. Поле такого типа транслируется в HTML как тег (список значений для выбора), если только у него не включена опция Allow values not in list. Если же эта опция включена, получается обычное редактируемое текстовое поле. Для создания конструкции, позволяющей выбирать значения из списка и вносить новые, рекомендуется использовать пару полей - обычное и типа Keywords, где при сохранении значение обычного поля добавляется к списку значений поля типа Keywords. Примеры кода HTML, сгенерированного Domino для полей различных типов. Пример 1. HTML-код, сгенерированный Domino для поля existtopic (keywords/multivalue/Dialog list) размером 3 строки, по умолчанию выбрано значение "Проверка А". Яблоки

Пример 2. HTML-код, сгенерированный Domino для поля Header (text) длиной 40 символов, значение "test - updatedby".

Пример 3. HTML-код, сгенерированный Domino для поля Body (Rich Text) высотой 5 строк и длиной 70 символов с виртуальным (динамическим) переносом строк. Это текст в поле Body

5.2.7. Поле $$Return Используется для замены стандартного подтверждающего сообщения, возникающего после нажатия на кнопку Submit. В этом поле может быть задан код HTML или формула для его вычисления. Если «написать URL в квадратных скобках», то он будет открываться немедленно после нажатия на кнопку Submit.

© InterTrust Co. Тел. 956-7928

Разработка Web-приложений на основе Lotus Domino 4.6.x и Lotus eSuite DevPack 1.0 53

Применение поля $$Return часто необходимо в пользовательских формах запросов (в том числе и $$Search), так как в этом случае URL запроса вычисляется на основе данных, которые пользователь заносит в поля формы. Пример 1. Формирование своего подтверждающего сообщения (текст + ссылка). "Документ был успешно сохранен



Переход на базу Дискуссии" Пример 2. Автоматическое возвращение в истории на два шага назад (JavaScript). "";

Отметим, что эффект, обеспечиваемый полем $$Return, может быть также достигнут "печатью HTML-кода" оператором Print из LotusScript в агенте, запускаемом по событию WebQuerySave (при сохранении).

5.2.8. Доступ к переменным CGI Имеется два способа получения значения CGI-переменной: 1. агентом на LotusScript, запускаемым «из броузера» (по URL типа ?OpenAgent или на события WebQueryOpen или WebQuerySave), с использованием свойства DocumentContext класса NotesSession; 2. созданием вычисляемого поля типа text с именем, совпадающим с именем нужной CGIпеременной, и именем этой переменной в качестве формулы. Однако для агентов, запускаемых на события WebQueryOpen или WebQuerySave, надежно работает только сочетание обоих способов: в документе должны присутствовать поля, имена которых совпадают с именами требуемых CGI-переменных, тогда с помощью агента на LotusScript можно работать с их значениями. Сказать точнее, автору известен единственный случай, когда в агенте, запускаемом на событие WebQueryOpen, удалось получить значение CGI-переменной Query_String, не имея в форме поля Query_String. Пример 1. Получение значения CGI-переменной REMOTE_USER и занесение ее значения в поле Effect агентом, запускаемым на событие WebQueryOpen (поле remote_user должно присутствовать в документе): Dim sess As New notessession Dim doc As notesdocument Set doc = sess.DocumentContext Dim remote As Variant remote = doc.remote_user(0) Call doc.ReplaceItemValue("Effect", remote) Call doc.Save(True, False)

Если Вы хотите только сохранить значение CGI-переменной в документе, не оперируя с ним (значением) до трансляции документа в HTML, то это можно сделать, создав поле с именем, совпадающим с именем нужной переменной (способ 2), например REMOTE_USER типа text/Computed со значением REMOTE_USER. Cписок CGI-переменных приведен в разделе 3.3.2. Пример 2. Агент на LotusScript (из журнала THE VIEW), который выводит все доступные во время его запуска CGI-переменные. Sub Initialize Dim sess As New NotesSession Set doc = sess.DocumentContext

© InterTrust Co. Тел. 956-7928

54

Разработка форм для Web-приложений Domino

Print "Display context variables
" Forall item In doc.items Print "
" & item.Name & ":" If Isempty(item.Text) Then Print "EMPTY" Else Print item.Text End If End Forall End Sub Результат его работы приводится на следующем рисунке.

Рис. 5.8 Результат работы агента, выводящего все доступные CGI-переменные.

5.2.9. События WebQueryOpen и WebQuerySave WebQueryOpen и WebQuerySave - единственные события, которые происходят в форме при работе из Web-броузера.

WebQueryOpen По умолчанию имеет значение @Command([ToolsRunMacro]; ""). В этом событии указывается один или несколько агентов, которые выполняются до того, как документ будет преобразован в HTML и отправлен в броузер. Изменения, вносимые в документ агентами на @формулах, не отображаются при первом открытии HTML-страницы, так как документ изменяется на сервере уже после того, как его HTML-версия была передана броузеру. Для того, чтобы произвести изменения в документе до его трансляции в HTML и передачи броузеру, нужно в агенте, написанном на LotusScript, воспользоваться свойством DocumentContext класса NotesSession. В Notes версии 4.5 вместо данного события использовалось специальное текстовое поле $$QueryOpenAgent. В качестве его значения указывается имя (одного) агента. В Notes версии 4.6 содержимое поля $$QueryOpenAgent игнорируется, если какие-то агенты указаны в событии WebQueryOpen. С помощью агента на LotusScript можно сформировать страницу для конкретного пользователя (или в зависимости от других доступных CGI-переменных), но при этом важно учесть, что для использования CGI-переменной в документе должно присутствовать поле с

© InterTrust Co. Тел. 956-7928

Разработка Web-приложений на основе Lotus Domino 4.6.x и Lotus eSuite DevPack 1.0 55

совпадающим с ней именем. Агент же должен иметь установки Run Manually From Actions Menu и Run once. Domino игнорирует вывод (Print), совершаемый агентом, запускаемым по событию WebQueryOpen. Пример. Увеличение счетчика обращений к документу (counter) на 1 и запись в поле Effect значения CGI-переменной REMOTE_USER. Поле remote_user должно присутствовать в документе. Sub Initialize Dim sess As New notessession Dim doc As notesdocument Set doc = sess.DocumentContext Dim remote As Variant Dim c As Variant, d As Variant remote = doc.remote_user(0) c = doc.counter(0) d = c+1 Call doc.ReplaceItemValue("Effect", remote) Call doc.ReplaceItemValue("counter", d) Call doc.Save(True, False) End Sub

WebQuerySave По умолчанию имеет значение @Command([ToolsRunMacro]; ""). В этом событии указывается агент, который выполняются перед тем, как документ будет сохранен в базе. Впрочем, документ может и не быть сохранен, если в нем присутствует поле SaveOptions со значением "0". В версии Notes 4.5 вместо данного события использовалось специальное текстовое поле $$QuerySaveAgent, а в качестве его значения указывалось имя агента. Примером использования такого агента могло бы быть создание других документов на основе информации из данного. Кроме того, такой агент может использоваться вместо поля $$Return для формирования подтверждающего HTML-сообщения - оно создается с помощью операций Print на LotusScript.

5.2.10. Computed Text Computed Text (вычисляемый текст) - новая возможность Notes версии 4.6, позволяющая вычислять по @-формуле фрагменты статического текста в форме и фрагменты текста в полях типа Rich Text. Использование Computed Text как вычисляемого статического текста в форме эквивалентно использованию полей типа Computed for display. Однако Computed Text в форме удобно использовать для вставки HTML-кода (как текст, «заключенный в квадратные скобки» или «написанный» стилем HTML). При использовании Computed Text в поле типа Rich Text его формулу после создания можно вновь отредактировать, выбрав в меню Hotspot/Edit Hotspot, а также можно изменить внешние атрибуты: тип рамки вокруг текста и его параметры (шрифт, выравнивание и т.д.). Вероятно, основное «достижение» Computed Text в полях типа Rich Text состоит в том, что пользователь, имеющий к базе уровень доступа ниже Designer, может «придать тексту некоторую вычисляемость», используя формулы наподобие "Hello "+@UserName.

© InterTrust Co. Тел. 956-7928

56

Разработка форм для Web-приложений Domino

5.2.11. $$-поля В Domino существует ряд специальных «двухдолларовых» полей, предназначенных для выполнения функций, присущих только Web-приложениям. Обычно для этих полей используется тип Text/Computed for display.

$$ViewBody На месте этого поля в форме отображается вид или папка, имя которой указанно в значении поля. В версии 4.6 аналогичного результата можно достичь, используя команду меню Create/Web element/Embedded View.

$$ViewList На месте этого поля в форме отображается стандартный навигатор folders. Значение поля игнорируется. В версии 4.6 аналогичного результата можно достичь, используя команду меню Create/Web element/Embedded Folders Pane.

$$NavigatorBody, $$NavigatorBody_n В качестве значения поля указывается имя навигатора или формула, вычисляющая имя навигатора. На месте этого поля в форме отображается соответствующий навигатор. В документе может быть несколько таких полей, различающихся только числом n. В версии 4.6 аналогичного результата можно достичь, используя команду меню Create/Web element/Embedded Navigator.

$$Return Используется для замены стандартного подтверждающего сообщения, возникающего после нажатия на кнопку Submit. В этом поле может быть задан HTML-код или формула для его вычисления. Если в качестве значения поля «написать URL в квадратных скобках», то этот URL будет открываться немедленно после нажатия на Submit. Отметим, что эффект, обеспечиваемый полем $$Return, может быть также достигнут из LotusScript «печатью HTML-кода» оператором Print в агенте, запускаемом на событие WebQuerySave.

$$HTMLHead В этом поле задается HTML-код или формула для его вычисления, добавляемый в тег Head. В поле обычно указывается мета-информация, например:



Может также даваться изображение для фона страницы () и определение основного окна вывода ().

© InterTrust Co. Тел. 956-7928

Разработка Web-приложений на основе Lotus Domino 4.6.x и Lotus eSuite DevPack 1.0 57

$$QueryOpenAgent В качестве значения поля указывается имя агента (в кавычках), который запускается перед открытием документа. Domino игнорирует вывод, генерируемый при этом агентом. В версии 4.6 для этих целей существует событие WebQueryOpen, в котором по умолчанию указана следующая формула: @Command([ToolsRunMacro]; ""). Имя агента задается вместо .

$$QuerySaveAgent В качестве значения указывается имя агента (в кавычках) который запускается «после нажатия кнопки Submit»: после проверки полей (validation), но перед сохранением документа. В версии 4.6 для этих целей существует событие WebQuerySave, в котором по умолчанию указана следующая формула: @Command([ToolsRunMacro]; ""). Имя агента задается вместо .

5.2.12. Способы внедрения HTML в конструкции Notes В продвинутых Web-приложениях в элементы дизайна Notes часто «напрямую» включают HTML-код. Чаще всего это делается для вставки графических изображений в формы, документы и виды, а также для конструирования страниц с фреймами.

Заключение HTML-кода в квадратные скобки Это наиболее удобный способ для вставки короткого HTML-кода. Он позволяет размещать в одной строке объекты Notes и код HTML. Пример 1. Указание размеров редактируемых полей. Код вставляется в Help description в свойствах поля на закладке Options. Пример 2. Для полей типа text (размер поля для ввода / максимальная длина вводимой строки). [] Пример 3. Для полей типа keywords (число видимых одновременно вариантов выбора). [] Пример 4. Для полей типа Rich Text (размеры поля для ввода / способ переноса строк). [] Пример 5. Ссылка на графический файл. [] Пример 6. Горизонтальная линия. [] Пример 7. Сочетание текста и HTML в одной строке. [] Bold text here [] Пример 8. Создание hotspot'ов «вокруг» кода HTML. Это может быть необходимо, например, при замене стандартных акций для управления видом. URL для них вычисляется динамически, поэтому нельзя использовать предопределенные [...]. []

© InterTrust Co. Тел. 956-7928

58

Разработка форм для Web-приложений Domino

Назначение абзацу стиля HTML Можно создать стиль текста с зарезервированным названием HTML. Абзацы, «написанные этим стилем», будут без интерпретации вставляться Domino в генерируемый HTML-код.

Назначение абзацу атрибута Pass-Thru HTML Абзацы с таким атрибутом будут без интерпретации вставляться Domino в генерируемый HTML-код. По сравнению с предыдущим способом основное неудобство данного заключается в том, что стиль текста «виден» в строке статуса, а чтобы «посмотреть», установлен ли атрибут Pass-Thru HTML, нужно открыть пункт меню Text.

Поле с именем HTML Если в документе присутствует поле с именем HTML, Domino передает в броузер только содержащийся в нем текст - все остальное игнорируется.

Включение в свойствах формы флага Treat document contents as HTML Во многом аналогично использованию поля HTML. Весь видимый текст из документа без обработки передается броузеру как HTML-код. Аналогичное свойство имеется для видов.

Поле $$HTMLHead Содержимое поля передается в броузер как HTML-код между тегами и .

Событие HTML Attributes Позволяет добавить HTML-аттрибуты в некоторые теги. Рассматривалось в разделе 5.2.5.

5.3.

Web-элементы для форм 5.3.1. Embedded Navigator

Embedded Navigator - навигатор Notes, встроенный в форму. Он создается командой меню Create/Web element/Embedded Navigator. В одну форму можно вставить несколько навигаторов, в том числе вычисляемых по @-формуле. В Notes версии 4.5 подобное было реализовано с помощью специальных полей $$NavigatorBody и $$NavigatorBody_n. В качестве значения поля указывается имя навигатора или @-формула, вычисляющая имя навигатора. На месте такого поля в форме отображался соответствующий навигатор. В документе можно быть создано несколько таких полей, различающихся только числом n. Такой способ тоже работает и в версии 4.6.

5.3.2. Embedded View Embedded View - вид Notes, встроенный в форму. Создается командой меню Create/Web element/Embedded View. В форме может быть только один Embedded View, содержащий вид, имя которого задано явно или вычислено по @-формуле. В Notes версии 4.5 для достижения подобного использовалось поле $$ViewBody. В качестве значения поля указывалось имя вида или @-формула, вычисляющая имя вида. На месте этого поля в форме отображался соответствующий вид. В версии 4.6 этот способ тоже работает.

© InterTrust Co. Тел. 956-7928

Разработка Web-приложений на основе Lotus Domino 4.6.x и Lotus eSuite DevPack 1.0 59

5.3.3. Embedded Folder Pane Embedded Folder Pane - стандартный навигатор Folders, встроенный в форму. Создается командой меню Create/Web element/Embedded Folder Pane. В форме может быть только один Embedded Folder Pane. В Notes версии 4.5 для этих целей использовалось поле $$ViewList, на месте которого отображался навигатор Folders. В 4.6 этот способ тоже работает.

5.3.4. File Upload Control File Upload Control - элемент для присоединения файлов к документу в базе Notes из броузера. Для того, чтобы создать такой элемент, нужно выбрать из меню Create/Web Element/File Upload Control. В Notes версии 4.5 аналогичный результат достигался путем создания Action Hotspot с формулой @Command([EditInsertFileAttachment]). Для File Upload Control Domino генерирует тег , например:

В броузере элемент выглядит как поле с кнопкой Browse. В этом поле пользователь броузера выбирает или вводит путь к файлу. Чтобы удалить присоединенный файл из документа в базе Notes, используя броузер, нужно в режиме редактирования пометить его для удаления и сохранить документ.

5.4.

Формы-шаблоны

5.4.1. Формы-шаблоны для видов Такие формы должны иметь имена $$ViewTemplateDefault или "$$ViewTemplate for viewname", где viewname - имя вида. В каждой форме необходимо поле $$ViewBody. Наличие формы "$$ViewTemplate for viewname" перекрывает использование $$ViewTemplateDefault для вида viewname. Соответствующая форма будет открываться при обращении из броузера к виду данной базы, а тело вида будет отображаться на месте поля $$ViewBody. Используется этот прием в основном для замещения стандартных акций, которые Domino генерирует по умолчанию, а также для отображения на одной странице дополнительных навигаторов и ссылок. Применяя такую форму, удобно задать и фоновое изображение для вида. Заметим, что последнее можно достичь и «приписаванием» к названию вида текста наподобие [], но это «будет заметно» в Notes.

5.4.2. Формы-шаблоны для навигаторов Такие формы должны иметь имена $$NavigatorTemplateDefault или "$$NavigatorTemplate for navname", где navname - имя навигатора. В каждой форме необходимо поле $$NavigatorBody. Наличие формы "$$NavigatorTemplate for navname" перекрывает использование $$NavigatorTemplateDefault для навигатора navname. Соответствующая форма открывается при обращении к навигатору navname, а навигатор отображается на месте поля $$NavigatorBody. Формы-шаблоны для навигаторов обычно используются для отображения на одной странице вида и дополнительных ссылок.

5.4.3. Формы-шаблоны для поиска Форма с именем $$Search заменяет стандартную форму для формирования поисковых запросов по базе (search.htm). Использование «своей» поисковой формы может оказаться

© InterTrust Co. Тел. 956-7928

60

Разработка форм для Web-приложений Domino

неудобным в базе, в которой незарегистрированный пользователь не имеет права создавать документы. Форма с именем $$SearchTemplateDefault или "$$SearchTemplate for viewname", где viewname - имя вида, применяется для изменения способа оформления результатов поиска. В форме необходимо наличие поля $$ViewBody. По сравнению со страницей, которая генерируется по умолчанию, у такой не будет показываться количество найденных документов и текст запроса, а так же будет отсутствовать конструктор уточняющего запроса. Форма с именем $$SearchSiteTemplate используется для изменения способа оформления результатов поиска в базе SearchSite. По сравнению со страницей, которая генерируется по умолчанию, у такой не будет показываться количество найденных документов и текст запроса, а так же будет отсутствовать конструктор уточняющего запроса.

5.4.4. Формы-шаблоны обработки ошибок в Domino Для оформления сообщений об ошибках в конкретной базе в соответствии с необходимым вам стилем применяются формы со следующими зарезервированными названиями.

• • • •

$$ReturnDocumentDeleted - подтверждение успешного удаления документа. $$ReturnAuthenticationFailure - сообщение о том, что такой пользователь с таким паролем не зарегистрирован на сайте. $$ReturnAuthorizationFailure - сообщение о том, что данный пользователь не имеет достаточно прав для выполнения данной операции. $$ReturnGeneralError - выдается на любую другую ошибку.

Однако следует земетить, что замена стандартных сообщений об ошибках часто делает эти сообщения менее информативными. Например, для следующей ошибки Error 500 HTTP Web Server: Lotus Notes Exception - Special database object cannot be located

будет известно только то, что она относится к типу General Error.

© InterTrust Co. Тел. 956-7928

Разработка Web-приложений на основе Lotus Domino 4.6.x и Lotus eSuite DevPack 1.0 61

6. Разработка видов, навигаторов и карт-изображений для Web-приложений Domino 6.1.

Виды

Domino транслирует для броузера вид Notes в таблицу HTML, по умолчанию не более чем из 30 строк. Такое «количество строк по умолчанию» задается в общей адресной книге в документе Server в секции HTTP Server, в поле Lines per view page. Для конкретного URL, указывающего на вид, максимальное количество строк таблицы задается параметром Count в самом URL. Стандартные кнопки позволяют "пролистывать" вид в обоих направлениях, раскрывать/сворачивать все категории и создавать поисковый запрос для полнотекстового поиска по данной базе. Для стандартных операций со видом используются следующие формулы: пролистнуть вперед - @DbCommand("Domino";"ViewNextPage"); пролистнуть назад - @DbCommand("Domino";"ViewPreviousPage"); раскрыть все категории - @Command([ViewExpandAll]); свернуть все категории - @Command([ViewCollapseAll]); поиск - @Command([ViewShowSearhBar]). Следует отметить, что содержимое колонки с ответными документами (с «включенной» опцией Show responses only) отображается в том же столбце таблицы, в которую Domino преобразовал вид, что и следующая видимая колонка вида. При этом, несмотря на то, что на каждый ответный документ в виде выделяется отдельная строка, Domino не использует для HTML-аналога этой строки параметр colspan для объединения столбцов. В результате текст, соответствующий в виде ответному документу, может располагаться «в несколько строк узким столбцом», несмотря на то, что справа от него может быть свободное место. Бороться с таким эффектом можно путем размещения в виде сразу за колонкой с ответными документами одной широкой колонки, которая была бы последней видимой колонкой в виде.

6.2.

Навигаторы и карты-изображения

Карты-изображения (Image Map) позволяют получить эффектный (в смысле внешнего вида) набор гипертекстовых ссылок. Суть в том, что на одном графическом изображении выделяются несколько активных зон, каждая из которых является гипертекстовой ссылкой. Преимущество карты-изображения состоит в том, что один «большой» файл «скачивается» значительно быстрее, чем несколько «маленьких» с таким же суммарным размером. Недостатком карты-изображения для разработчика в первую очередь является неудобство внесения изменений в единый графический файл вместо замены «одного маленького». Использование векторно-объектной графики навигаторов Notes теоретически снимает эту проблему. Но поскольку редактор, используемый в Notes для создания навигаторов, достаточно примитивен, его возможностей может не хватить для создания чего-то «действительно красивого». А если вы хотите сделать так, чтобы графические кнопки «подсвечивались» при наведении на них курсора мыши, то и Image Map вам уже не подойдет. Недостатком карты-изображения для пользователя является невозможность воспользоваться ее встроенными ссылками до того, как изображение полностью загрузится в броузер. Кроме того, альтернативный текст для Image Map броузеры MSIE 3.02 и 4.0 не

© InterTrust Co. Тел. 956-7928

62

Разработка видов, навигаторов и карт-изображений для Web-приложений Domino

показывают вообще, а Netscape Communicator 4.04 показывает только при наведении курсора мыши на ссылку. Примером хорошего применения карты-изображения может быть интерактивная карта города, из которой можно открывать карты районов, «кликая» на них мышью. Генерируя HTML, Domino преобразует навигаторы Notes в карты-изображения, но при этом имеются три недостатка. 1. При обращении к навигатору некоторое время расходуется на преобразование его объектно-векторной графики в растровое изображение. 2. Если в используемом изображении больше 16 цветов, его палитра может заметно изменится при просмотре в броузере. Кроме того, «не сглаживается» текст (вероятно, ради быстроты преобразования) и не поддерживается анимация GIF89a. 3. В свойствах активной области навигатора нельзя указать для нее альтернативный текст. Если навигатор Notes имеет небольшие размеры и точная цветопередача вам не критична, навигатор можно рекомендовать к использованию. В том же случае, когда недостатки применения навигатора существенны, вам придется создать необходимый графический файл и фрагмент HTML-кода для карты-изображения. При подготовке HTML-кода для карты-изображения вам может сослужить «добрую службу» редактор, используемый в Notes для создания навигаторов. Технология такова. 1. Подготовленное изображение поместите в Graphic Background навигатора (можно с помощью File/Import). 2. Поверх изображения «расставьте» нужные активные области (hotspot'ы). 3. Выберите для hotspot'ов в качестве действия Simple action(s)/Open URL и укажите нужный URL. Если URL пока не неизвестен, вместо него можно указать любой идентификатор, позволяющий Вам опознать эту ссылку в HTML-коде и впоследствии заменить нужным URL. 4. Открыв после всего этого навигатор в броузере, остается получить и сохранить HTMLкод этой страницы. В нем будет присутствовать необходимый Image Map. Так значительно быстрее, чем «вручную вбивать» координаты областей в HTML-код. Остается привести пример HTML-кода для карты-изображения.









Выглядит же эта карта-изображение в броуэере следующим образом (фрейм слева).

© InterTrust Co. Тел. 956-7928

Разработка Web-приложений на основе Lotus Domino 4.6.x и Lotus eSuite DevPack 1.0 63

Рис. 6.1 Набор ссылок, организованный в Image map (фрейм слева) Отметим, что в Notes версий 4.5 многие элементы навигаторов не работали в при просмотре броузером, а наличие у навигатора Graphic Background было для Domino обязательным.

© InterTrust Co. Тел. 956-7928

Разработка Web-приложений на основе Lotus Domino 4.6.x и Lotus eSuite DevPack 1.0 65

7. Разработка агентов для Web-приложений Domino В Notes агенты используются для автоматизации выполнения многих задач, например создания документов, отправки почты, поиска, архивирования устаревших документов. Существует несколько способов активации (запуска) агентов: по расписанию, при «вставке» документов в базу из буфера обмена, при поступлении новой почты, при создании или модификации документов. Пользователь может также запустить агента, «кликнув» мышкой на кнопке, hotspot’у или акции формы или вида с формулой @Command([ToolsRunMacro]) или URL с операцией ?OpenAgent. Однако агенты Notes обычно ориентированы больше на работу с ними с клиентского места Notes, чем из Web-броузера. Поэтому для выполнения одной и той же задачи как из клиента Notes, так и из броузера, чаще приходится использовать два набора агентов, каждый из которых специализирован для одного интерфейса. Основная причина такого разделения - различия в способах взаимодействия агента с пользователем в разных средах. В Notes агент может запрашивать и получать информацию от пользователя в различных диалоговых окнах и изменять значения полей непосредственно в открытом в клиенте Notes документе. Единственный же способ передать информацию клиенту броузера (без применения JavaScript) создать и загрузить в броузер HTML-страницу. При этом разработчик Web-приложения может внести агентом изменения в текущий документ или перед тем, как по этому документу сервером будет сгенерирован и передан в броузер HTML-код (агент на событие WebQueryOpen), или после того, как данные HTML-формы будут переданы из броузера на сервер, но перед тем, как документ будет сохранен сервером (агент на событие WebQuerySave). Агенты для пользователей Web чаще всего пишутся на LotusScript или Java, поскольку «простые действия» Notes недоступны в Web-приложениях, а @-формулы не позволяют возвращать информацию пользователю.

7.1.

Агенты с опцией Run agent as Web User

Notes всегда осуществляет контроль прав доступа запускаемого и выполняемого агента. Агент, запускаемый пользователем Notes «вручную», имеет такие же права доступа, как и запустивший его пользователь. Права агента, выполняемого сервером по расписанию или событию, определяются правами создателя или последнего редактора этого агента (того, кем подписан агент). Один из вариантов агентов, доступных пользователям Web-броузеров - агенты с опцией Run agent as Web User.

Рис. 7.1 Свойства агента. Закладка Design

© InterTrust Co. Тел. 956-7928

Разработка агентов для Web-приложений Domino

66

Чтобы такой агент мог быть запущен сервером, создатель или последний редактор агента (тот, кем агент подписан) должен иметь на сервере права на выполнение агентов. Хотя пользователи броузеров не имеют ID-файлов, Domino способен аутентифицировать их. Поэтому при выполнении такой агент обладает правами не его создателя, а запустившего его пользователя броузера.

7.2.

Агенты - аналоги программ CGI

Поведение агента, запускаемого на сервере Domino из web-броузера, очень похоже на поведение CGI-програмы, запускаемой на «обычном» HTTP-сервере. Во-первых, такие агенты могут «печатать» операторами Print языка LotusScript HTML-код, который по завершении работы агента передается броузеру. Если же операторов Print в агенте нет, по окончании его работы в броузер посылается «подтверждающее сообщение» Agent done. Во-вторых, агентам, запускаемым из броузера, доступны переменные CGI. В данном разделе мы рассмотрим только агенты, запускаемые на сервере Domino из броузера «вручную» по команде @Command([ToolsRunMacro]) или по URL с операцией ?OpenAgent. Агенты, запускаемые по событиям WebQueryOpen и WebQuerySave будут рассмотрены в следуюших разделах главы. Пример 1. Агент AddBook, создающий по информации из CGI-переменных вспомогательный документ в базе и посылающий в броузер подтверждающее сообщение. Агент запускается по вычисляемому в hotspot’е URL наподобие http://host/DbName/AddBook?OpenAgent&UNID, где параметр UNID задает универсальный идентификатор документа, из которого запущен агент. Sub Initialize Dim sess As New NotesSession Dim doc,element As NotesDocument Dim dateTime As NotesDateTime Dim db As NotesDatabase Dim c,c1,d As Variant Set db=sess.CurrentDatabase Set dateTime = New NotesDateTime( "Today" ) Set element=New NotesDocument( db ) Set doc = sess.DocumentContext ‘Получение строки запроса (в данном случае вида ?OpenAgent&UNID) c = doc.Query_String(0) ‘Получение UNID документа из строки запроса c1 = Right(c, 32) ‘Получение IP-адреса пользователя d = doc.Remote_Addr(0) ‘Формирование полей документа и его сохранение Call element.ReplaceItemValue("Date", dateTime) element.UNID = c1 element.IP = d element.Form = "Element" Call element.Save(True, False) ‘Выдача подтверждающего сообщения в броузер Print "Книга добавлена в корзину
" Print c1 Print "" Print d End Sub Пример 2. Агент для обработки данных, получаемых из формы методами POST и GET. HTML-код формы, использующейся для сбора информации.

© InterTrust Co. Тел. 956-7928

Разработка Web-приложений на основе Lotus Domino 4.6.x и Lotus eSuite DevPack 1.0 67 test page - post and get methods










Агент WebQR получает информацию из формы и отправляет в броузер подтверждающее сообщение о полученной информации. Sub Initialize Dim s As New NotesSession Dim db As NotesDatabase Set db = s.CurrentDatabase Dim note As NotesDocument Set note = s.DocumentContext Dim RM As String Dim QS,QSD As String Dim CT As String Dim RC, RCD As String RM = note.Request_Method(0) Print "

Request_Method="+RM+"" If ( 0 = Strcompare(RM, "GET", 1) ) Then ' Метод GET - аргументы в Query_String QS = note.Query_String(0) QSD = decode((QS)) Print "

Query_String="+QS+"" Print "

Decoded Query_String="+QSD+"" End If If ( 0 = Strcompare(RM, "POST", 1) ) Then ' Метод POST - аргументы в Query_String и REQUEST_CONTENT QS = note.Query_String(0)

© InterTrust Co. Тел. 956-7928

68

Разработка агентов для Web-приложений Domino

QSD = decode((QS)) Print "

Query_String="+QS+"" Print "

Decoded Query_String="+QSD+"" CT = note.Content_Type(0) Print "

Content_Type="+CT+"" RC = note.Request_Content(0) RCD = decode((RC)) Print "

Request_Content="+RC+"" Print "

Decoded Request_Content="+RCD+"" End If End Sub Функция decode, обрабатывающая получаемые строки. Function decode(content As String) As String ' Декодирование "URL-encoded" строки Dim answer, achar, hexdigits As String Dim pos, max, charval As Integer On Error Goto errhandle max = Len(content) pos = 1 answer = "" While ( pos