|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
IBM Lotus Notes 8 メール機能を Eclipse により拡張する |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bob Balfe (balfe@us.ibm.com), Senior Software Engineer, IBM 原文の掲載:2007年5月8日
この記事では、拡張、アクティビティー・セット、プラグイン、フィーチャー、および更新サイトなどの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となります。
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拡張
Javaバックエンド・クラスへの記述作成した新しいアクション・クラスによってロジックへのエントリー・ポイントが得られたので、処理を実行するコードの開発を始められます。RunMailRulesクラスにはrun()メソッドがあります。ボタンがクリックされたときに、このメソッド内のコードが呼び出されます。ここでは、データベース、文書、およびビューなどのバックエンドのLotus Notesオブジェクトにアクセスするので、またUIスレッドに呼び出しを行うので、このメソッドで新規スレッドを生成します。Lotus Dominoオブジェクトへの他のアクセスと同様に、NotesThread.sinitThread()を呼び出すことにより、スレッドを初期化する必要があります。最後のブロックで、NotesThread.stermThread()を呼び出します。コードは、メール・データベースと、そのデータベースに含まれるすべてのフォルダーおよびビューのリストを取得することから開始します。このリストを使用して、メール・ルールを実行するビューのドロップダウン・コンボ・ボックスを作成します。セッションの取得は、この演習の一番重要な部分です。リスト2のコードは、セッション、データベース・ハンドル、およびビューとフォルダーのリストを取得する方法を示しています。 リスト2. セッションの取得
私たちは、テンプレート設計と保存済みデータを調べることにより、メール・ルール文書にリバース・エンジニアリングを実施する必要があったため、メール・ルール文書を利用して、ルールのさまざまな要素を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
「Build All」ボタンをクリックする前に、すべてのプロジェクトをクリーニングし、バイナリーを再ビルドするとよいでしょう。「File」メニューから、「Project」->「Clean」を選択します。「Build All」ボタンをクリックすると、サイトはデプロイの準備が整います。サイトのビルド・オペレーションにより、フィーチャーとプラグイン用のディレクトリーが生成され、コンパイルされたフィーチャーおよびプラグインがこのディレクトリーに保存されます。これで、プラグイン、フィーチャー、およびEclipse更新サイトが得られました。唯一残っている作業は、Lotus Notes 8ユーザー・インターフェースでフィーチャーのインストールを有効にすることです。
新規コントリビューションの実行Lotus Notes 8ベータでは、新規フィーチャーをインストールするEclipseメニュー・オプションがクライアントにありません。システム管理者がこのプリファレンスを無効にしていない限り、<notes
directory>/framework/rcpディレクトリーでplugin_customization.iniを編集することにより、このオプションをオンにできます。
まとめこの記事では、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アプリケーションの実証済みの手法により、カスタム・コードおよびプラグインを用いて簡単に拡張する方法を解説しました。 ダウンロード
参考文献学ぶために
製品や技術を入手するために
議論するために
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||