本文へジャンプ

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

送信されたすべての情報は安全です。

  • 閉じる [x]

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


送信されたすべての情報は安全です。

  • 閉じる [x]

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

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

概要: [編集者のメモ: この記事で取り上げたLotus Notes 8の機能および環境は、ベータ・ソフトウェアに基づいています。記事の内容およびスクリーン・ショットは、製品版と異なる場合があります。]
Eclipseを使用してJavaコードを書き、IBM Lotus Notes 8クライアントを拡張しましょう。IBM Lotus Notesを自宅での個人の電子メールに使用して、また、メールを拡張してクライアントでもメール・ルールを手動で実行できるように新しいMail Rule Runner (メール・ルール実行機能)を追加しましょう。 この記事は、Eclipse PDE (プラグイン開発環境)を使用してJavaコードを書くことにより、IBM Lotus Notes 8 クライアントを拡張する方法に中心にご説明します。

日付:  2007年 5月 08日
レベル:  中級 この記事の原文:  英語
アクティビティー: 3572 ビュー
お気軽にご意見・ご感想をお寄せください: 


この記事では、拡張、アクティビティー・セット、プラグイン、フィーチャー、および更新サイトなどの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.nsf2560KBHTTP
NotesMailUtils.zip61KBHTTP

ダウンロード形式について


参考文献

学ぶために

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

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

議論するために

著者について

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

不正使用の報告のヘルプ

不正使用の報告

ありがとうございます。 このエントリーは、モデレーターの注目フラグが設定されました。


不正使用の報告のヘルプ

不正使用の報告

不正使用の報告の送信に失敗しました。


developerWorks: サイン・イン


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。 プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。 お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

表示名をお選びください

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

(半角英数字で3文字以上31文字以下にする必要があります)


「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


この記事を評価する

コメント

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Lotus
ArticleID=338449
ArticleTitle=IBM Lotus Notes 8 メール機能を Eclipse により拡張する
publish-date=05082007
author1-email=
author1-email-cc=

タグ

Help
このタグで、My developerWorks のすべてのタイプのコンテンツを見つけるために検索フィールドを使用します。

スライダーバーを使用することで、より多く(少なく)タグを表示します。

人気のタグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するトップのタグを表示します。

マイ・タグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するお客様ご自身のタグを表示します。

このタグで、My developerWorks のすべてのタイプのコンテンツを見つけるために検索フィールドを使用します。人気のタグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するトップのタグを表示します。マイ・タグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するお客様ご自身のタグを表示します。