IBM®
Перейти к тексту
    в России и странах СНГ [изменить]    Условия использования
 
 
   
    Главная страница    Продукты    Услуги и решения    Поддержка и загрузка    Мой профиль    
Перейти к тексту

developerWorks Россия  >  Lotus  >

Расширение почтовой системы IBM Lotus Notes V8 с помощью Eclipse

developerWorks
Опции документа

Опции документа, требующие включения JavaScript, не отображаются

Обсудить

Исходные тексты примера


Выскажите мнение об этой странице

Помогите нам улучшить содержание


Уровень сложности: средний

Боб Бэлф, старший инженер-программист, IBM

14.11.2007

Расширьте клиент IBM Lotus Notes V8 при помощи Java-кода, созданного в Eclipse. Используйте Lotus Notes дома в качестве почтового клиента и расширьте его возможности с помощью нового Mail Rule Runner, позволяющего пользователям вручную запускать на клиенте собственные правила.

Данная статья рассказывает о том, как расширить клиент IBM Lotus Notes V8, создавая Java-код в среде разработки Eclipse PDE. В частности, мы покажем, как использовать Lotus Notes в домашних условиях для работы с личной почтой.

Мы расскажем об основных технологиях Eclipse, в том числе о расширениях, наборах действий, плагинах, функциях и сайтах обновлений. Описанные технологии можно применять при развертывании некоторой функциональности для любого продукта на основе Eclipse. В данной статье основное внимание уделяется клиенту Lotus Notes и расширению почтовой системы при помощи нового Mail Rule Runner, позволяющего пользователям вручную запускать на клиенте собственные правила.

ПРИМЕЧАНИЕ: Дома мы используем почтовый клиент Lotus Notes в качестве основной клиентской программы для доставки сообщений по POP3 и SMTP. Не хватает единственной функции - почтовых правил. Как известно, почтовые правила в Lotus Notes работают на SMTP-сервере, и без SMTP-сервера Domino сортировать почту невозможно. Хотя данный инструмент несовершенен, он все же показывает, как можно использовать платформу Еclipse для расширения Lotus Notes, используя Java-классы Lotus Notes для доступа к данным Lotus Notes и управления ими.

Начнем с создания плагина с помощью Eclipse. Код и пример в разделе Загрузка были созданы с помощью базовой версии Eclipse 3.2.1.

Поделиться...

digg Отправить на Digg
del.icio.us Разместить на del.icio.us
Slashdot Разместить на Slashdot

Наша цель - создать новый пункт меню, показывающий представления почтовой системы Lotus Notes в виде действия (иконки), локально запускающего почтовые правила. Когда пользователь нажимает на кнопку Run Mail Rules (Запустить почтовые правила), появляется диалоговое окно, в котором выбраны все доступные почтовые правила, а затем выводится поле со списком, в котором можно выбрать представление или папку для которых следует выполнить указанные правила. На рисунке 1 показано диалоговое окно Run Mail Rules. Размытые области скрывают личную информацию.


Рисунок 1. Диалоговое окно Run Mail Rules
Диалоговое окно Run Mail Rules

Это окно представляет собой простое диалоговое окно Eclipse на базе SWT, в котором используется SWT GridLayout для определения расположения на экране различных элементов пользовательского интерфейса.

После нажатия на кнопку Run появляется стандартное диалоговое окно Eclipse с прогресс-индикатором; см. рисунок 2. Это диалоговое окно можно запустить в фоновом режиме, нажав на кнопку Run in Background. По завершении операции нажмите F9, чтобы обновить представление, если оно было открыто до запуска правил. Имеется очевидная возможность расширить данный инструмент таким образом, чтобы он обновлял текущие данные на экране по окончании работы с почтовыми правилами.


Рисунок 2. Индикатор выполнения Run Mail Rules Job
Индикатор выполнения Run Mail Rules Job

Создание собственного плагина

В большинстве случаев создание плагинов с помощью мастера Eclipse несложно. Хотя Eclipse выполняет за нас основную работу, но как всегда бывает при разработке ПО, это лишь начало. В данном примере мы использовали Eclipse 3.2.2, а в качестве целевой платформы указали клиент Lotus Notes V8 Beta. Мы предлагаем на всех машинах всегда использовать одно и то же место для установки Lotus Notes – c:\notes. Устанавливаем целевую платформу в Eclipse, выбрав Window - Preferences. Указываем целевую платформу, выбрав Plug-in Development - Target Platform. На рисунке 3 показан Lotus Notes, выбранный в качестве целевой платформы. Важно выбрать каталог \framework\eclipse. Это корневой каталог Eclipse runtime. В данном случае будет использоваться каталог c:\notes\framework\eclipse.


Рисунок 3. Указание целевой платформы
Указание целевой платформы

Теперь, когда мы выбрали в качестве платформы Lotus Notes runtime, можно создать новый плагин, установить взаимозависимости, а затем написать для них код. Сделав Lotus Notes целевой платформой, мы получили в распоряжение все API Eclipse, Lotus Expeditor и Lotus Notes, а также доступные расширения. Щёлкните правой кнопкой мыши в Package Explorer и выберите New - Project. Затем выберите Eclipse plug-in project. На рисунке 4 показан экран, который вы должны увидеть - мастер New Project.


Рисунок 4. Мастер New Project
Мастер New Project

Нажмите Next, а затем назовите проект com.ibm.notes.mail.utils. Здесь будут храниться все почтовые утилиты, которые вы, возможно, решите создать позднее. Все остальные значения, предлагаемые мастером, можно оставить по умолчанию. Когда вы доберётесь до окна с предложением создать плагин на основе существующего шаблона, отключите выбор шаблона и не используйте ни один из них.

Теперь развернем только что созданный проект в Package Explorer и дважды щелкнем по MANIFEST.MF в папке META-INF.

Выберите вкладку Dependencies, показанную на рисунке 5, и добавьте к зависимостям пакет com.ibm.notes.java.java.api. В результате вы получите доступ ко всем расположенным на сервере Java-классам Lotus Domino.


Рисунок 5. Вкладка Dependencies
Вкладка Dependencies

В общем, для определения зависимостей можно использовать метод Imported Packages. При использовании этого метода среда OSGI высвобождает импортированные пакеты и запрошенные классы, и нам не нужно указывать определенный пакет, как мы делаем здесь. Если указанный пакет был переименован или удален, зависимость будет нарушена, и классы не будут высвобождаться во время выполнения. В противном случае, если мы импортируем все пакеты, которые намерены использовать, они могут быть раскрыты любым плагином. После того, как код для плагина написан, зависимость можно удалить и импортировать только те пакеты, которые будут нам нужны на том же экране. Теперь, когда зависимости определены, можно начинать кодирование.



В начало


Расширение CSI Views

CSI Views расширяются добавлением нового действия на панель инструментов представлений. В бета-версии Lotus Notes V8 это действие выполняется кнопкой с текстом Run Mail Rule, а в финальном релизе используется соответствующая иконка. Можно позаимствовать скриншот иконки Mail Rules и использовать этот символ. Это можно сделать, нажав на клавиши Alt + PrtSc. Сохраняем иконку в папке с иконками и называем ее mailrules.gif. В результате панель будет выглядеть, как показано на рисунке 6.


Рисунок 6. Иконка Mail Rules
Иконка Mail Rules

Чтобы данная иконка отображалась, определим расширение для наборов действий Eclipse. Можно использовать мастеров и добавлять наборы действий, а можно просто скопировать код из листинга 1 в файл plugin.xml. Возможно, plugin.xml ещё не создан на данном этапе, поэтому для его создания можно воспользоваться мастером (или же использовать plugin.xml из ZIP-файла в разделе Загрузка). Первое расширение - это новый набор действий, который определяет меню, путь к панели инструментов, всплывающее описание, иконку и действия, выполняемые при её выборе. Следующее расширение связывает новый набор действий с панелью инструментов CSIViews. CSI Views - это необязательно общедоступные API, но, поскольку они развёртываются как расширения Eclipse, в них можно осуществлять запись. Это расширение actionSetPartAssociations. Можно связать их вместе, указав ID набора действий (com.ibm.notes.mail.utils.actionSets) вместе с ID части, в которой нужно его разместить: com.ibm.rcp.csiviews.CSIViewPart. Таким образом мы сообщаем среде Eclipse, что мы хотим, чтобы набор действий был связан с CSIViewPart и отображался в этой области просмотра (viewpart).


Листинг 1. Расширение CSI

<extension
     point="org.eclipse.ui.actionSets">
  <actionSet
        id="com.ibm.notes.mail.utils.actionSet"
        label="Mail Tools">
     <menu
           id="RunMailRules"
           label="Run Mail Rules">
     </menu>
     <action
           class="com.ibm.notes.mail.utils.actions.RunMailRules"
           icon="icons/mailrules.gif"
           id="com.ibm.notes.mail.utils.actions.RunMailRules"
           label="&Run Mail Rules"
           toolbarPath="actions/additions"
           tooltip="Run Mail Rules"/>
  </actionSet>
</extension>
   
<extension point="org.eclipse.ui.actionSetPartAssociations">
    <actionSetPartAssociation                
        targetID="com.ibm.notes.mail.utils.actionSet">
        <part id="com.ibm.rcp.csiviews.CSIViewPart" />      
    </actionSetPartAssociation>
</extension>



В начало


Добавление информации в серверные Java-классы

Теперь, когда имеется точка входа в программную логику при помощи созданного вами нового класса действий (action class), можно приступать к написанию кода, который будет выполнять работу. Класс RunMailRules содержит метод run(); именно в нём вызывается наш код при нажатии на кнопку. Так как мы обращаемся к находящимся на сервере объектам Lotus Notes, например, к базам данных, документам и представлениям, и поскольку вызывается UI thread, новый поток создаётся в данном методе. Как и во всех случаях доступа к объектам Lotus Domino, нам понадобится инициализировать поток при помощи вызова NotesThread.sinitThread(). В заключительном блоке необходимо вызвать NotesThread.stermThread().

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


Листинг 2. Получение сессии Lotus Notes

Session session = null;
try{
	NotesThread.sinitThread();
		
	session = NotesFactory.createSessionWithFullAccess();
					
	DbDirectory dbdir = session.getDbDirectory(null);
					
	Database mail = dbdir.openMailDatabase();
					
	Vector views = mail.getViews();
	Enumeration vEnum = views.elements();
…

	View rules = mail.getView("(Rules)");
…
					
}finally{
	NotesThread.stermThread();

Поскольку нам пришлось анализировать документы Mail Rule, изучив устройство шаблона и хранимые данные, было бы полезно иметь класс, получающий документ и создающий различные элементы правила в виде Java-объектов. Данный класс абстрагируется от подробностей реализации и делает её более читаемой в других частях плагина. Объект MailRule содержит списки действий, условий и исключений, содержащихся в документе Mail Rule. Поскольку все вышеуказанное (действия, условия и исключения) берутся из документа Mail Rule, объекты инициализируются объектом Document.

Код структурирован таким образом, чтобы его можно было легко расширять. Код был несколько раз подвергнут рефакторингу с возможностью расширения. Добавлять новые действия, исключения и булеву логику несложно. На рисунке 7 приведено изображение всего проекта.


Рисунок 7. Проект Mail Utility
Проект Mail Utility

Основной пакет утилит содержит плагин Activator, основное задание Eclipse Job (отображается в стандартном диалоговом окне Eclipse с прогресс-индикатором при обработке правил), операцию Mail Rule (содержащую основную логику правил), а также класс исключений, прекращающий обработку правил при определенных условиях.

Мы стремимся хранить все, относящееся к модели, в пакете моделей, а любые связанные с диалогами классы - в пакете с диалогами. Во многих примерах Еclipse контент и классы провайдера показаны как подклассы класса диалогов, но мы предпочитаем извлекать их в их собственные файлы.



В начало


Развёртывание плагина на клиенте Lotus Notes V8

Следующий шаг - упаковать только что созданный плагин вместе с функцией (feature) и сайтом обновления (update site) для развёртывания на клиенте. Eclipse упаковывает плагины в функции Eclipse. Благодаря разработчикам Eclipse у нас есть ряд очень простых в использовании мастеров, позволяющих это сделать. Во-первых, нужно создать функцию, которая ссылается на новый плагин. Затем создаём новый проект, как мы это делали раньше, только теперь выбираем Feature Project, как показано на рисунке 8.


Рисунок 8. Мастер New Feature
Мастер New Feature

Для упрощения назовем нашу новую функцию так же, как и плагин, только добавим в конец слово feature; например, com.ibm.notes.mail.utils.feature. В следующем окне выберите из списка свой плагин, и вы готовы к действию. Если вы создали несколько плагинов, выберите те из них, которые будут включены в данную функцию. Позднее всегда можно будет что-либо добавить.

Теперь нам нужен сайт обновления Eclipse, чтобы клиент мог установить новую функцию. Из того же диалогового окна мастера New Project, как показано на рисунке 8, выберите Update Site Project. После того, как сайт будет создан, добавьте туда свою функцию. Site.xml несложен и приведён в листинге 3.


Листинг 3. Обновление site.xml

<?xml version="1.0" encoding="UTF-8"?>
<site>
   <feature url="features/com.ibm.notes.mail.utils.feature_1.0.0.jar" 
   id="com.ibm.notes.mail.utils.feature" version="1.0.0"/>
</site>

Прежде чем нажать на кнопку Build All, нужно очистить все проекты и перекомпилировать двоичные файлы. Выбираем Project - Clean из меню File. После нажатия на кнопку Build All наш сайт готов к развёртыванию. В ходе операции сборки сайта создаётся каталог функций и плагинов, в котором расположены скомпилированные функции и плагины. У нас есть плагин, функция и сайт обновления Eclipse. Единственное, что осталось сделать - включить инсталляцию функций в пользовательский интерфейс Lotus Notes V8.



В начало


Запуск нового дополнения

Начиная с бета-версии Lotus Notes V8 в клиенте не было пункта меню в Eclipse для установки новых функций. Если только администратор не отключил эту опцию, мы можем ее задействовать, внеся изменения в файл plugin_customization.ini в каталоге <notes directory>/framework/rcp.

Добавим эту строчку в файл <notes directory>/framework/rcp/plugin_customization.ini:

com.ibm.notes.branding/enable.update.ui=true

После перезапуска клиента Notes вы увидите новый пункт меню: File - Application - Install. Это стандартный интерфейс Eclipse для установки функций. В первом окне мастера выберите второй пункт ("Search for new features to install"). Нажмите Next, и перед вами появится окно, где нужно будет указать размещение только что созданного сайта обновления Eclipse. Нажмите кнопку Add Folder Location, а затем перейдите в каталог, содержащий созданный ранее файл site.xml. Окно будет выглядеть как на рисунке 9.


Рисунок 9. Установка Feature
Установка Feature

Нажмите на кнопку Finish и примите все предлагаемые значения. Вас спросят, хотите ли вы установить плагин, несмотря на то, что он не подписан. Это происходит из-за того, что в Lotus Notes имеется функция верификации подписи: подпись проверяется перед установкой чужих плагинов. Поскольку мы не подписывали плагины, подписей у них нет. Как только новые функции будут установлены, появится сообщение с предложением перезапустить Lotus Notes. После перезапуска во всех представлениях почты появится новая кнопка.

В противном случае мы можем воспользоваться основанным на NSF сайтом обновления для пользователей Lotus Notes V8. Можно просто скопировать NSF-файл из раздела Загрузка данной статьи в каталог данных Lotus Notes. Когда откроется база данных, вы увидите диалоговое окно Eclipse с прогресс-индикатором, отображающим процесс установки функций Mail Tools. По окончании инсталляции перезапускаем Lotus Notes, после чего функция становится доступной.



В начало


Заключение

Мы продемонстрировали, как можно использовать Eclipse для расширения клиента Lotus Notes. С помощью базовых SWT-виджетов пользовательского интерфейса Eclipse мы создали полностью кроссплатформенное решение проблемы. При использовании данной методики ваши дополнения располагаются отдельно от Lotus Notes NSF и NTF; это означает, что ваш код не будет затронут при переходе на Lotus Notes V8. Наконец, мы показали, как можно наилучшим образом адаптировать существующие навыки работы с Java API Domino к новой модели плагина. Серверные Java API легко совмещаются с архитектурой Lotus Notes/Domino. В данной статье показано, как легко расширить среду Eclipse при помощи пользовательского кода и плагинов, учитывая её гибкость, а также надёжность приложений Lotus Notes.




В начало


Загрузка

ИмяРазмерМетод загрузки
mail_utils.nsf2816KBHTTP
NotesMailUtils.zip54KBHTTP
Информация о методах загрузки


Ресурсы

Научиться

Получить продукты и технологии

Обсудить


Об авторе

Боб Бэлф (Bob Balfe) - технический руководитель по Portal Managed Client в группе IBM Lotus Expeditor. Большую часть из пятнадцати лет, которые Боб посвятил разработке ПО, он занимался технологиями Lotus и Domino. В настоящее время Боб работает над очередным релизом Lotus Expeditor.




Выскажите мнение об этой странице


Пожалуйста, найдите минутку и заполните форму, чтобы повысить уровень сервиса.



ДаНетНе знаю
 


 


12345
 


В начало


IBM обладает всеми авторскими правами касательно информации, расположенной на developerWorks. Использование информации приведенной на этом ресурсе без явного письменного разрешения от IBM или первоначального автора запрещены. Если Вы желаете использовать информацию с developerWorks, пожалуйста воспользуйтесь регистрационной формой для того, чтобы связаться с нами запрос на использование материалов developerWorks Россия.

    IBM в России Конфиденциальность Контакты