本文へジャンプ

ソフトウェア Lotus Lotus Developer Domain 製品別技術情報 Lotus Notes/Domino 8 > 
   
 

IBM Lotus Notes 8 メール機能を Eclipse により拡張する

   
 
コンテンツ
プラグインの作成
CSI Viewsの拡張
Javaバックエンド・クラスへの記述
Lotus Notes 8クライアントへのプラグインのデプロイ
新規コントリビューションの実行
まとめ
ダウンロード
リソース
筆者について
ご意見ご要望をお寄せ下さい

Bob Balfe (balfe@us.ibm.com), Senior Software Engineer, IBM

レベル:中級

原文の掲載:2007年5月8日
原文はこちら (US)

[編集者のメモ: この記事で取り上げたLotus Notes 8の機能および環境は、ベータ・ソフトウェアに基づいています。記事の内容およびスクリーン・ショットは、製品版と異なる場合があります。]

Eclipseを使用してJavaコードを書き、IBM Lotus Notes 8クライアントを拡張しましょう。IBM Lotus Notesを自宅での個人の電子メールに使用して、また、メールを拡張してクライアントでもメール・ルールを手動で実行できるように新しいMail Rule Runner (メール・ルール実行機能)を追加しましょう。
この記事は、Eclipse PDE (プラグイン開発環境)を使用してJavaコードを書くことにより、IBM Lotus Notes 8クライアントを拡張する方法に焦点を当てます。特に、自宅で個人の電子メール用にIBM Lotus Notesを使用する方法について解説します。


この記事では、拡張、アクティビティー・セット、プラグイン、フィーチャー、および更新サイトなどのEclipseのコア・テクノロジーの使用法に重点を置きます。これらのテクノロジーを使用して、Eclipseベースの任意の製品に機能をデプロイできます。ここでは、IBM Lotus Notesクライアントに注目し、新しいMail Rule Runnerを追加してメールを拡張します。この機能を使用すると、クライアントでもメール・ルールを手動で実行できるようになります。

メモ:この記事では、自宅でのPOP3およびSMTPメールの1次クライアントとしてLotus Notesメールを使用します。この場合、不足する唯一の機能はメール・ルールです。ご存じのように、Lotus Notesのメール・ルールはSMTPサーバーで実行されるため、Lotus Domino SMTPサーバーがないとメールのソート機能は使用できません。このツールは完全ではありませんが、Eclipseを使用してLotus Notesを拡張する方法、およびLotus Notes Javaバックエンド・クラスを使用して、Lotus Notesデータにアクセスし操作する方法を示しています。

まず、Eclipseを使用してプラグインを作成するところから始めます。『ダウンロード』セクションにあるコードおよびサンプルは、基本のEclipseバージョン3.2.1を使用して作成されています。

この記事では、メール・ルールをローカルで実行するアクション(アイコン)としてLotus Notesメール・ビューに表示される新しいメニュー・オプションを作成します。ユーザーが「Run Mail Rules」ボタンをクリックすると、有効なすべてのメール・ルールが選択された状態でダイアログ・ボックスが開かれ、メール・ルールを実行するビューまたはフォルダーを選択するためのコンボ・ボックスが表示されます。「Run Mail Rules」ダイアログ・ボックスを図1に示します。(ぼかした領域は、個人情報がマスクされています。)

図1. 「Run Mail Rules」ダイアログ・ボックス


これは基本的な Eclipse SWTベースのダイアログ・ボックスで、SWTのGridLayoutを使用して、異なるUI要素を画面上に配置する方法が定義されています。

「Run」ボタンをクリックすると、進行状況を示すEclipseの標準ダイアログ・ボックスが表示されます(図2参照)。「Run in Background」ボタンをクリックすることにより、このダイアログ・ボックスをバックグラウンドで実行できます。ルールを実行したビューが開いている場合は、処理の終了後に「F9」を押してしてビューを更新します。あるいは、メール・ルールの処理が完了した後で現在の画面を更新するようこのツールを拡張することもできます。

図2. 「Run Mail Rules Job」の進行状況


プラグインの作成

他のプラグインと同様に、Eclipseプラグイン・ウィザードを使用した作成手順は簡単です。Eclipseは開発者のために多くの作業を行いますが、それはソフトウェア開発における一般的なことであり、ほんのスタート段階に過ぎません。このサンプルでは、私たちはEclipse 3.2.2を使用して、インストール済みのLotus Notes 8ベータ・クライアントをターゲット・プラットフォームとして指定しました。Lotus Notesは、すべてのマシンで常に同じ場所(c:\notes)にインストールすることをお勧めします。Eclipseでターゲット・プラットフォームを選択するには、「Window」-「Preferences」を選択します。次に、「Plug-in Development」->「Target Platform」を選択し、ターゲット・プラットフォームを指定します。Lotus Notesをターゲット・プラットフォームとして選択するようすを図3に示します。重要なのは、\framework\eclipseディレクトリーを選択することです。これはEclipseランタイムのルート・ディレクトリーです。この場合、ディレクトリーはc:\notes\framework\eclipseとなります。

図3. ターゲット・プラットフォームの指定


これで、Lotus Notesランタイムをプラットフォームとして選択したので、新しいプラグインを作成し、依存関係を設定し、コードを書くことができます。Lotus Notesをターゲット・プラットフォームにすることにより、Eclipse、Lotus Expeditor、Lotus Notes APIおよび拡張をすべて利用できるようになります。パッケージ・エクスプローラーで、右クリックし、「New」->「Project」を選択します。ここで、Eclipseプラグイン・プロジェクトを選択します。表示される「New Project」ウィザードの画面を図4に示します。

図4. 「New Project」ウィザード


「Next」をクリックし、プロジェクトに「com.ibm.notes.mail.utils」という名前を付けます。これが、後で作成するすべてのメール・ユーティリティー用の主な場所となります。ウィザードの残りの部分では、提示されたデフォルト値をそのまま選択できます。このプラグインに基づく既存のテンプレートを指定する画面が表示されたときは、テンプレート・オプションの選択を解除します。テンプレートは使用しないでください。

新規作成したプロジェクトをパッケージ・エクスプローラーで展開し、META-INFフォルダー内のMANIFEST.MFをダブルクリックします。

「Dependencies」タブに移動し(図5参照)、com.ibm.notes.java.java.apiバンドルを依存関係に追加します。これにより、すべてのLotus Domino Javaバックエンド・クラスにアクセスできるようになります。

図5. 「Dependencies」タブ


通常は、「インポートされたパッケージ」による方法で依存関係を定義します。インポートを使用することは、ここで行ったように開発者が特定のバンドルを指定するのではなく、OSGIフレームワークがパッケージのインポートと要求されたクラスを解決することを意味します。もし、指定されたバンドルがリネームまたは削除されると、依存関係が壊れ、実行時にクラスが解決されないでしょう。これに対し、使用する予定のすべてのパッケージをインポートすると、どのプラグインもこれらのパッケージを公開できます。プラグインのコードを記述した後、この依存関係を削除し、必要なパッケージだけを同じ画面でインポートできます。これで依存関係を指定したので、コーディングを開始できます。

上に戻る

CSI Viewsの拡張

新しいアクションをビューのツールバーに追加することにより、CSI Viewsを拡張します。Lotus Notes 8ベータでは、「Run Mail Rule」と書かれたボタンが表示されますが、製品版では正しいアイコンが表示されます。メール・アウトラインから「メール・ルール」アイコンのスクリーン・ショットを流用し、このアイコンを利用します。スクリーン・ショットを得るには、「Alt」+「PrtSc」キーを押します。アイコンをアイコン・フォルダーに保存し、mailrules.gifという名前を付けます。最終的に、アクションは図6のように表示されます。


図6. 「メール・ルール」アイコン


このアイコンを表示するために、Eclipseアクション・セットに拡張を定義します。これを行うには、ウィザードを使用してアクション・セットを追加するか、リスト1のコードを単にplugin.xmlにコピーします。plugin.xmlは、この時点で作成されていないことがあります。このような場合は、ウィザードを通じてplugin.xmlを作成できます(または、『ダウンロード』セクションのZIPファイルに含まれるplugin.xmlを使用します)。最初の拡張は、新規作成されたアクション・セットです。これは、メニュー、ツールバー・パス、ツール・ヒント、アイコン、および選択されたときに呼び出すアクションを定義します。2番目の拡張は、新しいアクション・セットをCSIViewsツールバーに関連付けます。CSI Viewsは必ずしもパブリックAPIではありませんが、Eclipse拡張として公開されているため、コードの記述対象として利用できます。これはactionSetPartAssociations拡張です。アクション・セットID (com.ibm.notes.mail.utils.actionSets)を、その内部に表示したいパートID (com.ibm.rcp.csiviews.CSIViewPart)とともに指定することにより、これらを関連付けます。これにより、アクション・セットをCSIViewPartに関連付け、コントリビューションをそのView partとともに表示することがEclipseフレームワークに伝えられます。

リスト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バックエンド・クラスへの記述

作成した新しいアクション・クラスによってロジックへのエントリー・ポイントが得られたので、処理を実行するコードの開発を始められます。RunMailRulesクラスにはrun()メソッドがあります。ボタンがクリックされたときに、このメソッド内のコードが呼び出されます。ここでは、データベース、文書、およびビューなどのバックエンドのLotus Notesオブジェクトにアクセスするので、またUIスレッドに呼び出しを行うので、このメソッドで新規スレッドを生成します。Lotus Dominoオブジェクトへの他のアクセスと同様に、NotesThread.sinitThread()を呼び出すことにより、スレッドを初期化する必要があります。最後のブロックで、NotesThread.stermThread()を呼び出します。

コードは、メール・データベースと、そのデータベースに含まれるすべてのフォルダーおよびビューのリストを取得することから開始します。このリストを使用して、メール・ルールを実行するビューのドロップダウン・コンボ・ボックスを作成します。セッションの取得は、この演習の一番重要な部分です。リスト2のコードは、セッション、データベース・ハンドル、およびビューとフォルダーのリストを取得する方法を示しています。


リスト2. セッションの取得

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();

私たちは、テンプレート設計と保存済みデータを調べることにより、メール・ルール文書にリバース・エンジニアリングを実施する必要があったため、メール・ルール文書を利用して、ルールのさまざまな要素をJavaオブジェクトとして作成するクラスを持つとよいだろうと考えました。このクラスは、フィールド実装の詳細を抽象化し、プラグインの他の部分でそれを読みやすくします。MailRuleオブジェクトは、メール・ルール文書に含まれているアクション、条件、および例外のリストを保持します。これら(アクション、条件、および例外)はすべてメール・ルール文書から得られるので、このオブジェクトはDocumentオブジェクトによって初期化します。

このコードは、容易に拡張できるように構築されています。拡張性を念頭に置き、このコードは何回もリファクタリングされました。新しいアクション、例外、またはブール・ロジックを簡単に追加できます。プロジェクト全体のスクリーン・ショットを図7に示します。

図7. メール・ユーティリティー・プロジェクト


メインのutilsパッケージには、プラグインActivator、メインEclipse Job (ルールが処理されるときに標準Eclipse進行状況ダイアログ・ボックスに表示されます)、Mail Ruleオペレーション(ルール・ロジックの大部分が含まれます)、および特定の条件下でルールの処理を停止する例外クラスが含まれています。
この例では、モデルに関連するすべてをmodelsパッケージとしてまとめ、ダイアログに関連するすべてのクラスをdialogsパッケージとしてまとめました。Eclipseの多くのサンプルでは、コンテンツおよびラベル・プロバイダーのクラスをdialogsクラスのサブクラスとしていますが、私たちはこれらをそれぞれ固有のファイルに抽出することにしました。
上に戻る

Lotus Notes 8クライアントへのプラグインのデプロイ

次の手順では、新規作成したプラグインを1つのフィーチャーおよび1つの更新サイトとともにパッケージ化し、これをクライアントにデプロイします。Eclipseはプラグイン(またはバンドル)をEclipseフィーチャーにパッケージ化します。Eclipseのコントリビューターが作成した使いやすいウィザードにより、これを実行できます。最初に、新規プラグインを参照するフィーチャーを作成します。前と同様の方法で、新規プロジェクトを作成します。ただし今回は、「Feature Project」を選択します(図8参照)。

図8. 「New Feature」ウィザード


簡潔にするために、新規フィーチャーにはプラグインと同じ名前を付けますが、最後に「feature」という単語を追加します(例: com.ibm.notes.mail.utils.feature)。次のウィンドウで、使用するプラグインをリストから選択します。これで設定完了です。複数のプラグインを作成した場合は、このフィーチャーに含めるプラグインを選択します。後で、任意のプラグインをいつでも追加できます。

次に、クライアントが新規フィーチャーをインストールできるようにするために、Eclipse更新サイトが必要です。図8に示したものと同じ「New Project」ウィザード・ダイアログ・ボックスで、「Update Site Project」を選択します。サイトが作成された後、フィーチャーをこのサイトに追加します。site.xmlは基本であり、これをリスト3に示します。

リスト3. Update 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」ボタンをクリックする前に、すべてのプロジェクトをクリーニングし、バイナリーを再ビルドするとよいでしょう。「File」メニューから、「Project」->「Clean」を選択します。「Build All」ボタンをクリックすると、サイトはデプロイの準備が整います。サイトのビルド・オペレーションにより、フィーチャーとプラグイン用のディレクトリーが生成され、コンパイルされたフィーチャーおよびプラグインがこのディレクトリーに保存されます。これで、プラグイン、フィーチャー、およびEclipse更新サイトが得られました。唯一残っている作業は、Lotus Notes 8ユーザー・インターフェースでフィーチャーのインストールを有効にすることです。
上に戻る

新規コントリビューションの実行

Lotus Notes 8ベータでは、新規フィーチャーをインストールするEclipseメニュー・オプションがクライアントにありません。システム管理者がこのプリファレンスを無効にしていない限り、<notes directory>/framework/rcpディレクトリーでplugin_customization.iniを編集することにより、このオプションをオンにできます。

<notes directory>/framework/rcp/plugin_customization.iniファイルに、次の行を追加してください。

com.ibm.notes.branding/enable.update.ui=true
Lotus Notesクライアントを再起動すると、新規メニュー・オプションが表示されます。「ファイル」->「アプリケーション」->「インストール」を選択します。これは、フィーチャーをインストールするための標準Eclipseインターフェースです。ウィザードの最初のウィンドウで、2番目のオプション(「インストールする新規フィーチャーを検索」)を選択します。「次へ」をクリックします。作成したEclipse更新サイトのロケーションを指定するウィンドウが表示されます。「フォルダー・ロケーションの追加」ボタンをクリックし、前に作成したsite.xmlファイルが含まれるディレクトリーに移動します。図9のようなウィンドウが表示されます。

図9. フィーチャーのインストール


「終了」をクリックし、残りのプロンプトをすべて受け入れます。プラグインが署名されていないにもかかわらず、それをインストールするかどうかを確認されます。これは、Lotus Notesが署名を検証する機能を持ち、外部からのプラグインをインストールするときに署名をチェックするためです。プラグインには署名しなかったので、プラグインは署名を持っていません。新規フィーチャーがインストールされると、Lotus Notesの再起動を求められます。再起動後、すべてのメール・ビューに新規ボタンが表示されます。

別の方法として、私たちはLotus Notes 8ユーザー用にNSFベースの更新サイトを用意しました。この記事の『ダウンロード』セクションに示されているNSFファイルをLotus Notesデータ・ディレクトリーにコピーするだけで準備できます。このデータベースを開くと、「メール・ツール」フィーチャーがインストールされるようすが標準Eclipse進行状況ダイアログ・ボックスに表示されます。インストールが完了し、Lotus Notesを再起動すると、アクションが利用可能になります。

上に戻る

まとめ

この記事では、Eclipseを使用してIBM Lotus Notesクライアントを拡張する方法を説明しました。基本のEclipse SWTユーザー・インターフェース・ウィジェットを使用し、問題に対するクロスプラットフォームの完全なソリューションを作成しました。この方法により、Lotus Notes NSFおよびNTFからコントリビューションを分離できるだけでなく、IBM Lotus Notes 8へのアップグレードの際にコードへの影響も回避できます。最後に、新しいプラグイン・モデルで既存のLotus Domino Java APIスキルを活用する方法を説明しました。JavaバックエンドAPIを使用すると、IBM Lotus Notes/Dominoアーキテクチャーへの接続を容易に得られます。この記事では、Eclipseフレームワークの柔軟性とLotus Notesアプリケーションの実証済みの手法により、カスタム・コードおよびプラグインを用いて簡単に拡張する方法を解説しました。


ダウンロード

名前 サイズ ダウンロード方法
mail_utils.nsf 2816KB HTTP(US)
NotesMailUtils.zip 54KB HTTP(US)
ダウンロード方法について (US)


参考文献

学ぶために

製品や技術を入手するために

  • Eclipseをダウンロードできます。
    Eclipse (US)

議論するために



筆者について

Bob Balfeは、IBM Lotus ExpeditorチームのPortal Managed Clientのテクニカル・リーダーです。15年を超えるソフトウェア開発の経験があり、その大半をLotusおよびDominoテクノロジーに費やしてきました。現在は、Lotus Expeditorの次のリリースに取り組んでいます。


上に戻る