[編集者のメモ : この記事で取り上げたLotus Notes 8の機能および環境は、ベータ・ソフトウェアに基づいています。記事の内容およびスクリーン・ショットは、製品版と異なる場合があります。]
IBM Lotus Notes 8 は、多くの意味でまったく新しい世界といえます。新たなユーザー・エクスペリエンスは、おそらく誰もが認識できる更新でしょう。Lotus Notes 8はすぐに使用でき、ユーザーはより安心感を得られます。ユーザーの生産性を高めることに関心を持つアプリケーション開発者またはシステム管理者は、Lotus Notesで微妙な変化の1つである機能、つまりこれまでにない方法でユーザー・エクスペリエンスをカスタマイズする機能を活用できます。
これらの変更は、Lotus Notesの新しいアーキテクチャーによって可能になりました。特に新しいLotus Notesは、拡張できるように設計されたいくつかのプラットフォーム上に構築され、その利点を享受しています。この中心となるのがオープン・ソースのEclipseプラットフォームです。Eclipseは、各コンポーネントの独立性を保ち、容易なカスタマイズを可能にしながら、多くのコンポーネントがシームレスに連携して動作する環境を提供します。
IBM Lotus Expeditor V6.1は、アプリケーションを便利かつ簡単にユーザーのデスクトップに配布するために使用できる新しいプラットフォームです。Lotus Expeditorは、さまざまなフィーチャーをEclipseテクノロジーに追加し、拡張します。これらのフィーチャーには、インテリジェントなプロビジョニングおよび構成可能なユーザー・インターフェースが含まれます。また、Lotus Expeditorは、IBM Lotus Sametime 7.5およびLotus Notes 8 クライアントの基盤でもあります(図1参照)。
図1. IBM Lotusクライアントのアーキテクチャー

この構造により、Lotus Expeditorプラットフォームでの開発対象が可能になり、Lotus Notes 8で使用できます。さらに、これらのコンポーネントは変更することなく、Lotus SametimeおよびLotus Expeditorスタンドアロン製品でも再利用できます。また、業務で一度作成したアプリケーションおよびツールは、さまざまな環境で簡単にプロビジョニングすることができます。
この記事では、Lotus Notesクライアントに追加された2つのユーザー・インターフェース・コンポーネントのSideNoteとQuickNoteを取り上げます。2つのアプリケーションにより、ユーザーはクライアントのサイドバーまたはツールバーでメモを書き込むことができます。この記事では、独自のコンポーネントをEclipseプラグインを通じてこれらの場所に提供する方法を説明します。
最初に、Lotus Notes 8をインストールします。
次に、Eclipseをセットアップします。Eclipseは無料でダウンロードできます。Eclipseは、Lotus Notes環境とともに機能するようセットアップする必要があります。
Eclipse(US)
以下の手順は、Lotus Notes プログラムディレクトリーをデフォルト導入先 C:\Program Files\IBM\Lotus\Notes、Lotus Notes データディレクトリーをデフォルト導入先 C:\Program Files\IBM\Lotus\Notes\Data に、導入済みとして説明します。もし異なるディレクトリーに導入している場合は、ディレクトリーを読みかえてください。
Eclipse IDEを起動し、以下の手順にしたがってターゲット・プラットフォームを設定します。
- 「Window」->「Preferences」を選択します。
- 「Plug-in Development」を展開します。
- 「Target Platform」を選択します。
- 「Location」編集コントロールに「C:\Program Files\IBM\Lotus\notes\framework\eclipse」と入力します。
- 「Reload」ボタンをクリックし、「OK」をクリックします。
次に、追加のインストール済みJREを作成します。
- 「Window」->「Preferences」を選択します。
- 「Java」を展開します。
- 「Installed JREs」を選択します。
- 「Add」をクリックします。
- 「JRE name」にNotes JREの名前を入力します。
- 「JRE Home Directory」に「C:\Program Files\IBM\Lotus\notes\framework\rcp\eclipse\plugins\com.ibm.rcp.j2se.win32.<version number>」と入力します。 IBM Lotus Notes Beta 3 は、com.ibm.rcp.j2se.win32.x86_1.5.0.SR4-200705170110 と、なります。 (メモ : この操作により、ポップアップ・ボックスの下部にJARファイルが表示されます。)
次に、以下の手順にしたがって、新しいランタイム構成を作成します。
- 「Run」->「Run」を選択し、「Eclipse Application」を選択します。
- 右クリックして「New」を選択します。
- 名前を入力します(例: Notes)。
- 「Program to Run」で「Run a product」を選択し、「com.ibm.notes.branding.notes」を選択します。
- 「Runtime JRE」で「Notes JRE」を選択します。
- 「Arguments」タブで、「Program arguments」テキスト・ボックスに以下を入力します。
-personality com.ibm.rcp.platform.personality
-product com.ibm.notes.branding.notes
-debug
-console
「VM arguments」テキスト・ボックスに、以下の引数を入力します。
-Drcp.home=${notes.install}\framework
-Drcp.data=${notes.data}\workspace
-Drcp.install.config=user
-Dosgi.install.area=${notes.install}\framework\eclipse
-Dcom.ibm.pvc.osgiagent.core.logfileloc=${notes.install}\framework\rcp
-Dcom.ibm.pvc.webcontainer.port=0
-Declipse.pluginCustomization=${notes.install}\framework\rcp\plugin_customization.ini
-Declipse.registry.nulltoken=true
-Djava.protocol.handler.pkgs=com.ibm.net.ssl.www.protocol
-Djava.util.logging.config.class=com.ibm.rcp.core.internal.logger.boot.LoggerConfig
-Dosgi.hook.configurators.exclude=org.eclipse.core.runtime.internal.adaptor.EclipseLogHook
-Dosgi.framework.extensions=com.ibm.rcp.core.logger.frameworkhook
-Xbootclasspath/a:${notes.install}\framework\rcp\eclipse\plugins\${rcp.base}\rcpbootcp.jar;
次に、以下の手順にしたがって、ランタイム構成を完了させます。
- 「Variables」、「Edit Variables」、「New」の順にクリックします。
- 名前として「notes.install」を入力します。
- Lotus Notesをインストールしたパスを入力し、「OK」をクリックします。このパスは、スペースを含んでいてはいけません。 たとえば、C:\Program Files\Lotus\Notes (ProgramとFilesの間にスペースがあります)に、導入している場合、「notes.install」には、「C:\PROGRA~1\IBM\Lotus\Notes」にしなければなりません。
- 「Variables」、「Edit Variables」、「New」の順にクリックします。
- 名前として「notes.data」を入力します。
- データディレクトリーの値を入れ、「OK」を、クリックします。 この例では、「C:\PROGRA~1\IBM\Lotus\Notes\Data.」になります。
- 「Variables」、「Edit Variables」、「New」の順にクリックします。
- 名前として「rcp.base」を入力します。
- インストールされているcom.ibm.rcp.baseプラグインのバージョンを値として入力し「OK」をクリックします。 こうすれば、次のロケーションにいきます。「<notes install location>\framework\rcp\eclipse\plugins. There is a folder that looks like com.ibm.rcp.base_6.1.1.<date>」。 (たとえば、Lotus Notes Beta 3 は、com.ibm.rcp.base_6.1.1.200705170110 です。)
- 「OK」をクリックし、変数選択のダイアログ・ボックスで「Cancel」をクリックします(変数の選択で「OK 」をクリックすると、挿入ポイントに変数が追加されます)。
IDEからLotus Notesセキュリティーを有効にするには、2つの行のコメントをはずす必要があります。次の <notes install location>\framework\shared\eclipse\plugins\com.ibm.notes.branding_3.0.0.<version number>\notes_plugin_customization.iniで、以下の2行の先頭の「#」文字を削除することにより、コメントを外します。
com.ibm.rcp.security.auth/loginEnabled=true com.ibm.rcp.security.auth/loginConfigName=NOTES |
これで、「Run」または「Debug」を選択してLotus Notesを起動します。(「Run」->「Run」または「Debug」->「Debug」を選択してください。)
最後に、この記事で使用するコードをダウンロードし、新しいフォルダーで解凍します。これをEclipseにインポートするには、既存のプロジェクトをインポートしなければなりません。
- 「File」->「Import」を選択します。
- 「General」->「Existing Projects into Workplace」を選択し、「Next」をクリックします。
- 参照して、コードを解凍したフォルダーを選択し、「OK」をクリックします。
- 「Finish」をクリックし、インポート・プロセスを完了させます。
Lotus Notesは、Eclipse Rich Client Platform(RCP)およびIBM Lotus Expeditor上に構築されています。Lotus Expeditorを拡張は、Eclipseプラグインを作成し、Lotus Expeditorに含まれるプロビジョニングを使用してこれらのプラグインをデプロイすることによりできます。
プラグインは、1つの機能を提供するコンポーネントです。任意のプラグインは、それが従属する他のプラグインを定義することができるので、きめ細かいコンポーネント化とコードの再利用が可能になります。また、プラグインは、そのプラグインが従属するプラグインに対し、拡張ポイントを通じて機能を提供できます。
拡張ポイントの概念は、Eclipseがどのように動作するのかを理解する鍵となります。拡張ポイントにより、コンポーネントは他のプラグインに対して機能を提供するためのコントラクトを定義できます。提供側のプラグインは、XMLを通じて具体的な値を定義することにより、このコントラクトを実行します。文字列形式のキー・データ、またはキー・インターフェースをインプリメントするJavaクラス・ファイルの名前などが、これらの値となります。たとえば、Eclipseプラットフォームはメニュー項目を任意のメニューに追加する拡張ポイントを定義しています。提供側のプラグインは、最上位メニューのID、ユーザーに表示される名前、およびユーザーが項目をクリックしたときに実行されるアクションを定義したJava クラスの名前を与えます。拡張ポイントおよびEclipseフレームワークの詳細については、Eclipse Webサイトを参照してください。
Eclipse Webサイト(US)
Lotus Notesの拡張にも、同じメカニズムを使用します。次のセクションでは、サイドバーおよびツールバーへの機能提供に使用される拡張ポイントについて説明します。この手法を使用して拡張できる多くのコンポーネントの中から2つの例を紹介しますが、概念を説明する上で十分であり、Lotus Notesクライアントで関心の高い2つの場所へ機能を提供する際のテンプレートとして利用できます。
作業中に、テキストの一部を一時的に保存したいと思うことがよくあります。さまざまな手法で、この要望を解決できます。たとえば、デスクトップにテキスト・ファイルを作成し、保存したい情報を貼り付けます。ただし、これらのファイルを削除し忘れると、気付かないうちに、ランダムな名前のテキスト・ファイルが散乱した環境になってしまいます。
ここで説明するアプリケーションでは、異なる2つの方法を用いてこの問題を解決します。
SideNote はサイドバーに配置され、全体が大きな1つのテキスト・エリアで構成されています。これにテキストを貼り付けたり、入力することができ、テキストは削除されるまで保存されます。また、このデータはクライアント・セッションの間保持されているので、いつでも利用できます。SideNote は、すぐに参照できる場所に情報を貼り付けておきたいときに適しています。
QuickNoteは、同様の機能をツールバーから実行します。「QuickNote」ボタンをクリックすると、テキストを入力できる小さいテキスト・ウィンドウが表示されます。このテキストは、ハード・ディスク上のフォルダーに保存できます。後ほど、このテキストや、フォルダー内の他のテキスト文書をウィンドウに再ロードできます。QuickNoteは、テキストや情報を長期間保存し、必要なときに迅速にアクセスできるスクラップブックとして機能します。
Lotus Notesのサイドバーを使用すると、アプリケーションを簡単に追加できます。サイドバーは画面上の重要な場所にあり、常に利用可能です(図2参照)。
図2. SideNoteアプリケーション

サイドバー・アプリケーションは、展開、最小化、およびフロート化することができます。また、一度に複数のサイドバーを使用することもできます。たとえば、IBM Lotus Notes 8には、Lotus Sametimeの連絡先用、本日のスケジュール用、フィード・リーダー・アプリケーション用、およびアクティビティーのビュー用の各サイドバー・コンポーネントが含まれています。拡張ポイントのコントラクトを実行することにより、この場所に独自のコンポーネントを追加できます。
SideNoteはこのコントラクトを実行することで、テキスト・ボックスをサイドバーに追加します。ユーザーがアプリケーションを閉じると、アプリケーションに通知されます。SideNoteはこの機会を利用して、テキストをハード・ディスク上のファイルに保存します。ユーザーがSideNote を再び作成すると、SideNote はこのテキストを取得して表示します。
Eclipseの開発者は、複数の個別の拡張ポイントを通じて、任意のサイドバー・アプリケーションにメニュー・オプションを追加できます。SideNoteには、「Save as file」と「Load from file」という2つのメニュー・オプションがあります(図3参照)。
図3. SideNoteのメニュー・オプション

SideNoteをLotus Notesサイドバーに追加する方法を見ていきましょう。Eclipse統合開発環境(IDE)でcom.ibm.lotuslabs.ui.sidenoteプラグインを表示すると、そのキー・コンポーネントを見ることができます。これには、以下のものが含まれます。
- Plugin.xml - 機能を提供する拡張ポイントを定義します。
- MANIFEST.MF - 依存関係を定義します。
- Javaソース・ファイル - アプリケーションおよびアクションをインプリメントします。
最初に理解したいのはIViewPartの概念です。これは、Eclipseによって定義されたインターフェースで、画面上の長方形とほぼ等価です。Eclipseでは、表示されるものの大部分をIViewPartsが構成しています。たとえば、図5で線で囲まれた領域はすべてIViewPartsです。
図4. EclipseクライアントでのIViewParts

Lotus Notesでも、同じものが使用されています。私たちはSideNoteをサイドバー内のアプリケーションと呼んでいますが、これはIViewPartにほかなりません。具体的には、図6に示すように、私たちはSideNoteViewPartを作成しました。
図5. SideNoteプラグインのコード

このJavaクラスはアプリケーションの構築方法を認識しています。コントラクトの定義により、この部分が作成されるときにcreatePartControlメソッドが呼び出されます。このケースでは、1つのテキスト・コントロールを使用して利用可能なエリアを満たします。スクロール・バーを作成するフラグとテキストの折り返しを指定するフラグを渡します。Eclipseでは、多くのビジュアルなコンポーネントがSWT(Standard Widget Toolkit)と呼ばれるテクノロジーを使用して作成されます。SWT により、作成が容易になるとともに、異なるプラットフォームで利用可能になります。また、キーの特殊な組み合わせにも対応できます。たとえば、ユーザーがCtrl+Aを押したときに、すべてのテキストを選択するよう設計できます。最後に、廃棄時にその状態を保存するよう指示します。Eclipseでは、ビジュアルな要素を削除または閉じる必要があるときに、disposeが呼び出されます。
アプリケーションを作成した後は、それをプラットフォームに通知する必要があります。これは、plugin.xmlのorg.eclipse.ui.views拡張ポイントを通じて行います(図6参照)。
図6. SideNote view拡張ポイント

ビューにIDを割り当てます。通常、クラス名は固有なので、クラス名を使用することもできます。
これで機能を宣言できたので、他の拡張ポイントを使用して、この機能をユーザー・インターフェースに配置できます。このように機能ユニットとUI配置を分離することは、Eclipseでは一般的なテーマです。Lotus Expeditorプラットフォームでは、ビューをサイドバーに配置する拡張ポイントが定義されています。com.ibm.rcp.ui.shelfViews拡張ポイントに機能を提供し、これをSideNoteビューで指定します(図7参照)。shelfViews拡張ポイントには、以下のフィールドと値が含まれています。
- id: com.ibm.lotuslabs.sidenote.SideNoteViewPart
- view: com.ibm.lotuslabs.sidenote.SideNoteViewPart
- region: TOP
- showTitle: true
図7. SideNote

これで、このツールはLotus Notesのサイドバーに表示されます。
次に、SideNoteメニューに追加したアクションについて見ていきましょう。このアクションとは、現在のテキストをファイルに保存する機能とファイルからテキストをロードする機能です。
plugin.xmlで、最後の拡張ポイントに機能を提供します。今回使用するのはorg.eclipse.ui.viewActionsポイントで、これによって、いくつかのアクションを1つの特定のview partに割り当てられます。この拡張ポイントにより、作成したビューを拡張できるだけでなく、追加される内容をまったく認識していないビューも拡張できます。つまり、Lotus Notesにすでに存在するサイドバーにアクションを追加し、これらのコンポーネントの機能を拡張できます。SideNoteプラグインがこれらのアクションをどのように追加するのかを図8に示します。viewActions拡張ポイントに、以下のフィールドと値を含めます。
- id: com.ibm.lotuslabs.ui.sidenote.actions
- targetID: com.ibm.lotuslabs.ui.sidenote.SideNoteViewPart
図8. SideNoteのviewActions拡張ポイント
targetIDに他のビューのIDを設定することで、そのアプリケーションにアクションを提供できます。たとえば、Lotus Notes内のLotus SametimeビューのIDを使用すると、そのコンポーネントを任意の方法で拡張できます。
これらの割り当てができたので、図9に示すようにアクションを定義します。以下のフィールドと値をviewActions 拡張ポイントに含めます。
- class: com.ibm.lotuslabs.ui.sidenote.internal.actions.SaveAsFile
- enablesFor: *
- id: com.ibm.lotuslabs.ui.sidenote.internal.actions.1.SaveAsFile
- label: Save As File
- menubarPath: additions
- tooltip: Save Side Note text as file
図9. SideNoteに提供されたアクション

これらの拡張ポイントは、アクションのラベルを定義し、メニューからアクションが選択されたときに実行するコードをプラットフォームに指示します。このケースでは、拡張ポイントのコントラクトは、クラスがIViewActionDelegateであることが必要です。このインターフェースの最も重要な部分はrun()メソッドであり、これがアクションを実行します。これらのアクションを可能にする鍵となるのは、SideNoteViewPartのgetText()メソッドおよびsetText()メソッドです。保存およびロード用のrun()メソッドは、これらのメソッドを使用して必要なアクションを実行します。
たとえば、SaveAsFileクラスはテキストを取り出し、ユーザーにファイルの選択を可能にし、そのファイルにテキストを書き込みます(リスト1参照)。
リスト1. ファイルへのテキストの書き込み
SideNoteViewPart part;
public void run(IAction arg0) {
if(part!=null) {
final String text = part.getText();
FileDialog dialog = new FileDialog(PlatformUI.getWorkbench().
getDisplay().getActiveShell(), SWT.SAVE);
dialog.setText("Save Side Note as:");
dialog.setFilterExtensions(new String[] { "*.txt", "*.*" });
final String path = dialog.open();
if(path!=null) {
// new job to write to file
Job write = new Job("Saving Side Note") {
protected IStatus run(IProgressMonitor arg0) {
writeToFile(path, text);
return Status.OK_STATUS;
}
};
write.schedule();
}
part.setFocus();
}
}
|
ツールバーは、Lotus Notesで拡張できるもう1つの場所です。QuickNoteツールバーには、小さなテキスト・ボックスを表示するボタンがあり、図10に示すように、このテキスト・ボックスにメモを書き込むことができます。
図10. QuickNoteツールバー

テキストを入力した後、メモ用に指定されたフォルダーにテキストを保存できます。後で、図11に示すドロップダウン・アイコンをクリックすることにより、テキストを再ロードできます。
図11. QuickNoteメニュー

com.ibm.lotuslabs.ui.toolbars.quicknoteプラグインは、QuickNoteアプリケーションに機能を提供します。これはcom.ibm.lotuslabs.uiプラグインに依存するため、Eclipseワークスペースにはこの両方のプラグインが必要です。ベースUIプラグインは分離されているため、複数のフィーチャーに機能を提供できます。このケースでは、QuickNoteは単純なテキスト・ボックスをこのプラグインで使用します。
サイドバー・アプリケーションと同様の方法で、拡張ポイントを通じてツールバー・アプリケーションをユーザー・インターフェースに追加できます。今回は、com.ibm.rcp.ui.controlSets拡張ポイントを使用します。図12に示したメニューからわかるように、この1つのポイントにより、プラグインがLotus Notesクライアント内の複数の場所(ツールバー、ステータス・バー、およびコントロール)に機能を提供できます。
図12. QuickNote controlSets拡張ポイント

クライアントの一番上付近のツールバーまたは一番下付近のステータス行にスペースを確保するには、toolBar項目またはstatusLine項目の1つを追加します。このケースでは、toolBarコンポーネントを作成します。このスペースを埋めるために、1つのコントロールを作成し、ツールバーに割り当てたIDをこのコントロールに関連付けます(図13参照)。具体的には、コントロール要素のtoolbarPath(com.ibm.lotuslabs.quicknote.bar)をtoolBar要素のIDに一致させます。
図13. QuickNote control拡張ポイント

クラスの値は、これをツールバーの作成に必要なJavaコードに結び付けます。この拡張ポイントでは、このクラスは ISContributionItemインターフェースをインプリメントするというコントラクトになっています。QuickNoteContributionクラスがこのコントラクトを実行します。
ISContributionItemの中心となるのはfill()メソッドです。このケースでは、独自のボタンを指定されたツールバーに配置する必要があります。ボタンは2つ追加します。最初のボタンはQuickNoteというラベルを持ち、com.ibm.lotuslabs.uiプラグインからポップアップ・テキスト・ボックスを表示します。2番目のボタンは、イメージをともなうボタンの作成方法を示します。イメージはドロップダウン・アイコンです。このボタンがクリックされると、メニューを表示することによって応答します。
このメニューは、QuickNoteフォルダーの内容を読み取ることにより生成されます。このフォルダーは、ユーザーが同じメニューから選択します。この同じフォルダーを使用して、テキスト・ポップアップ・ボックスで取得したメモが保存されます。
Lotus Notesユーザー環境に効果的なコンポーネントを配置することを始める際に、この記事で説明した例が役に立つでしょう。Eclipseの柔軟性により、希望するさまざまなものをこれらの場所に配置し、ユーザー・エクスペリエンスを拡張できます。また、この記事ではLotus Notes用のSideNoteおよびQuickNoteを構築しましたが、Lotus Expeditorプラットフォームで作成したアプリケーションは、いずれも複数のクライアントで再利用できます。
アプリケーションを構築した後は、ユーザー用にそれをデプロイする必要があります。「Composite Application Tutorial II: Eclipse Compoent」チュートリアルに、詳細な説明が記載されています。
次の記事では、製品に含まれているnotes.jarライブラリーを使用して、Lotus Notesデータをこの環境に統合し、活用する方法について説明します。すぐに始めたい場合は、Notes/Domino 8 Forumのこのエントリーが役に立つでしょう。
| ファイル名 | サイズ | ダウンロード形式 |
|---|---|---|
| notes_extensions.zip | 26 KB | HTTP |
学ぶために
- developerWorks Japan: Lotus: Lotusの日本の技術情報サイトです
- developerWorks: Lotus(US) : Lotusの英語の技術情報サイトです
- SideNoteおよびQuickNoteの簡単なデモをご参照ください。
SideNoteおよびQuickNoteの簡単なデモ(US) - developerWorksの記事 「IBM Lotus Notes/Domino 8の新機能」 をお読みください。
- developerWorksの記事 「IBM Lotus Notes 8 の新しい不在通知機能」 をお読みください。
- 「IBM Lotus Notes and Domino V8 Reviewer's Guide.」をお読みください。
IBM Lotus Notes and Domino V8 Reviewer's Guide(US) - developerWorksの記事 「IBM Lotus Expeditorでの簡単なWeb Services Resourceの構築とデプロイ」(※現在リンク切れ中) をお読みください。
- developerWorksの記事 「Creating collaborative components for IBM Lotus Expeditor Property Broker.」(US) をお読みください。
- developerWorksの記事 「Creating an update site for your IBM Lotus Sametime Connect plug-ins.」(US) をお読みください。
製品や技術を入手するために
- Eclipse をダウンロードできます。
Eclipse(US)
議論するために
- ディスカッション・フォーラム(US)にご参加ください。
- developerWorks Lotus Team ブログ(US)にご参加ください。>