XPagesはIBM Lotus Notes/Domino(以下、Lotus NotesはNotes、Lotus DominoはDominoと表記します)のバージョン8.5から登場した、Domino上で動作するWebアプリケーションを開発するための技術です。Webアプリケーション開発用にXPageという新しい設計要素がNotesアプリケーション内に追加され、Domino DesignerのXPage専用エディタ上でコントロールをドラッグ&ドロップしながら画面デザインを行うことが可能になり、Webアプリケーションの開発効率が格段に向上しました。また、タイプアヘッドや画面の部分更新といったAJAX技術をプロパティの設定だけで利用することもでき、Web2.0スタイルのアプリケーションを簡単に開発することが可能となりました。XPagesの概要およびアプリケーション開発手順についてさらに詳しく知りたい方は、こちらの記事(概要、開発手順)を参照してださい。
このように、従来のDominoにおけるWebアプリケーション開発のスタイルを大きく変える技術として注目されるXPagesですが、先日リリースされたバージョン8.5.1では更なる進化を遂げました。バージョン8.5からの既存機能の強化や改善に加えて、XPagesランタイム環境のパフォーマンスおよびスケーラビリティの向上、また開発環境であるDomino Designerのパフォーマンスが飛躍的に向上するなど、より強力で使いやすい開発プラットフォームとなりました。さらには、XPagesをNotesクライアントでも使用することができる「XPages in the Notes Client」や、コンポジット・アプリケーションのコンポーネントやiWidgetとしてXPagesを利用するための新しい設計要素「コンポーネント」など、XPages技術の適用範囲をさらに広げる新機能もバージョン8.5.1から追加されています。本稿では、この2つの新機能をピックアップして、その概要を紹介します。
バージョン8.5では、XPagesで開発したアプリケーションはWebブラウザからアクセスすることが前提でした。Notesクライアントからアクセスした場合は、XPageではなく従来どおりのフォームやビューが表示されるようになっていました。そのため、WebブラウザからだけでなくNotesクライアントからのアクセスもサポートするためには、XPageによる見栄えやロジックの開発と平行して、今までと同じようにフォームやビューによる見栄えやロジックも開発する必要がありました。こうした二重開発の労力を減らすべく、バージョン8.5.1から登場した機能が「XPages in the Notes Client」です。その名の通り、Notesクライアントからアクセスした場合でもXPageを表示させることが可能となりました(図1)。これにより、XPagesはWebアプリケーションのためだけの開発技術ではなくなり、XPagesでアプリケーションを開発すればWebブラウザとNotesクライアントの両方に対応することができるようになりました。
図1. NotesクライアントでXPageを表示(ディスカッション・データベースの例)
Notesクライアント上でXPageを表示させるための設定は非常に簡単です。NotesクライアントもしくはDomino Designerから、アプリケーションのプロパティを表示して「起動」タブを開くと、Notesクライアントからアクセスした場合の起動設定として「指定されたXPageを開く(標準クライアント)」というオプションが新しく選択できるようになっています(図2、図3)。このオプションを選択して、起動時に開きたいXPageを指定しておけば、Notesクライアントからアクセスした際、そのXPageが最初に表示されるようになります。なお、起動オプションにも記述されているとおり、XPageは標準クライアント(スタンダード版)のみでのサポートとなります。基本クライアント(ベーシック版)からアクセスした場合には、デフォルトのビューが代わりに表示されます。スタンダード版とベーシック版の違いについてはこちらを参照してください。
図2. Notesクライアント上で表示したアプリケーションのプロパティの「起動」タブ
図3. Domino Designer上で表示したアプリケーションのプロパティの「起動」タブ
XPages in the Notes Clientのアーキテクチャーについて少し紹介します。まず比較のために、Webブラウザからアクセスする際のアーキテクチャー(フロー)を図4に示します。XPagesの実行環境であるXPagesランタイムがDominoサーバー上にあり、ブラウザからWebコンテナを通じてXPageにアクセスすると、XPagesランタイムがNSFからXPageやカスタムコントロールなどの設計情報を取得して処理を行い、ブラウザに表示するHTMLデータを返します。サーバーサイドの処理は基本的にDominoサーバー上で行われます。
図4. Webブラウザからアクセスする際のアーキテクチャー
一方、図5がXPages in the Notes Clientのアーキテクチャーです。図4のWebブラウザからのアクセス時との大きな違いは、XPagesランタイムおよびWebコンテナがNotesクライアント上にあるという点です。Dominoサーバー上にあるNSFにアクセスした際には、サーバー上のNSFからXPage設計情報などを取得し、Notesクライアント上のXPagesランタイムで処理が実行されます。サーバーサイドの処理はDominoサーバー上では行われず、Notesクライアント上で行われることになります。これはオフラインでの利用も考慮にいれたアーキテクチャーになっており、ローカルにあるNSFやレプリカにNotesクライアントからアクセスした場合でも、同様の流れでXPageを表示することが可能となっています。
図5. XPages in the Notes Clientのアーキテクチャー
アーキテクチャーの章で紹介したように、XPages in the Notes ClientではNotesクライアント上にあるXPagesラインタイムでXPageに関連した処理が実行されます。そのためXPageの実装によっては、ローカルにある他のデータベースにアクセスしたり、さらにはローカルファイルシステムにアクセスしたりすることも可能になってしまいます。悪意のあるコードがこうした操作を行うことができないようするために、従来のNotesアプリケーションで利用されている操作制御リスト(ECL)によるセキュリティモデルがXPages in the Notes Clientでも採用されています。例えば、@DbColumnなど他のデータベースを読み込む機能がある関数がXPageの中で実行される場合には、図6のように実行セキュリティ警告の画面が表示され、実行を許可するかどうかをユーザーに確認させます。また、@関数や標準のサーバーサイドJavaScriptを使用しているときだけでなく、サーバーサイドJavaScriptからjava.io.Fileなどのファイル操作を行うJavaのクラスが呼び出された際にも、ECLが適用されてセキュリティ警告が表示されるようになっています。XPages in the Notes Clientにおけるセキュリティについてさらに詳しく知りたい方は、Domino Designer Wikiの記事を参照してください。
図6. @DbColumn関数がXPages in the Notes Clientで実行されるときの実行セキュリティ警告
Webブラウザからアクセスする場合には、従来のDomino Webアプリケーション同様、最初にNSFにアクセスした際に認証画面が表示されるようになっていました。XPages in the Notes Clientの場合には、認証ダイアログは基本的には表示されず、NotesクライアントにログインしているユーザーのIDでXPageにアクセスします。
XPages in the Notes Clientに関連したアプリケーション開発Tipsを2つご紹介します。
編集した文書を保存せずに閉じようとしたときにダイアログで通知する
従来のNotesアプリケーションでは、Notesクライアント上で文書を編集して保存せずに閉じようとすると、「文書が変更されています」というメッセージのダイアログによって通知されるようになっていました。バージョン8.5ではXPageにこうした機能はありませんでしたが、バージョン8.5.1でXPages in the Notes Client機能の登場とあわせて、同様のダイアログを表示するかどうかをプロパティで設定できるようになりました。新しく追加されたプロパティは、XPageおよびカスタムコントロールの「enableModifledFlag」および「modifiedMessage」です。
- enableModifildFlag … 「true」をセットしておくと、ページを閉じたり、ページ遷移を伴う操作をしたりする際に、そのページ内にある編集用コントロールの入力値が変更されていれば、変更されていることを通知するダイアログを表示する。デフォルト値は「false」(ダイアログを表示しない)。
- modifiedMessage … ダイアログに表示されるメッセージを文字列で指定。必須ではない。enableModifledFlagが「true」の場合のみ有効。(※Notesクライアント上では、ページ遷移の場合はこのメッセージが表示されますが、ページを閉じる操作を行った場合はこのメッセージは表示されず、デフォルトのメッセージが表示されます。)
Domino Designer上でXPageもしくはカスタムコントロールを開き、エディタ上で背景のXPageおよびカスタムコントロール部分を選択した状態で、プロパティビューの「すべてのプロパティ」タブを選択すると、「基本」カテゴリの中にこの2つのプロパティが表示されます(図7)。ここでenableModifledFlagをtrueに設定するだけで、そのXPage上での編集に対してダイアログによる通知が行われるようになります。この設定はXPages in Notes Clientの場合だけではなく、Webブラウザからアクセスした際にも適用されます(図8、図9)。
図7. XPageのenableModifiedFlagおよびmodifiedMessageプロパティ
図8. NotesクライアントでのenableModifiedFlagによるダイアログ表示
図9. WebブラウザでのenableModifiedFlagによるダイアログ表示
enableModifiedFlagは、基本的にはそのXPageおよびカスタムコントロール内の編集用コントロールすべてに適用されます。変更しても通知したくないコントロールがある場合には、そのコントロールの「disableModifiedFlag」プロパティをfalseにすると、そのフィールドを編集しても変更通知の対象にならなくなります。さらに詳しく知りたい方は、NotesおよびDomino Designerのヘルプ(Lotus Domino Designer XPage および Eclipse ユーザーガイド > Lotus Notes クライアントでの XPages の使用 > ユーザーに XPages の変更を保存するようプロンプトを出す)を参照してください。
アクセスしているクライアントによって表示を切り替える
XPages in the Notes Clientによって、1つのXPagesアプリケーションをブラウザからでもNotesクライアントでも共通で使用できるようになりました。しかし、ブラウザ用とNotesクライアント用で実装を少し変えたいという場合もあるでしょう。その場合には、@関数の「@ClientType」が利用可能です。この@関数は、Notesクライアントからアクセスしている場合は”Notes”、Webブラウザからアクセスしている場合は”Web”という文字列を返します。これにより、例えばサーバーサイドJavaScriptで以下のようなコードを書くことが可能です。
リスト1. NotesクライアントとWebブラウザで別々の処理を行うサーバーサイドJavaScriptの例
if (@ClientType() == "Notes") {
// Notesクライアントの場合の処理
return true;
} else if (@ClientType() == "Web") {
// Webブラウザの場合の処理
return false;
}
|
この@ClientTypeだけでクライアント判定の機能としては十分なのですが、XPageをソースモードで編集することが多い上級者の方にとっては、サーバーサイドJavaScriptが多くなるとあちこちで同様の判定を行う必要が出てソースが長くなってしまうため、もっと簡単に記述できる方法を好まれるかもしれません。そのような場合、以下のリスト2のようにソース内にXMLを記述する方法もあります。この例はラベルを表しており、通常デザイン画面で配置するラベルは<xp:label>というタグで定義され、Webブラウザでアクセスしたときに利用される属性が定義されています。ここではさらにその子要素として手動で<xp:label.rcp>という要素を追加して、Notesクライアントでアクセスしたときに利用する属性値(valueは表示する文字列、renderedは表示するかしないか)を上書きしています。この方法はLotus Instructor Community Courseware wikiにあるXPageの新機能紹介モジュールでも少し紹介されていますので、ご興味ある方は参照してください。
リスト2. XPageのソース内でNotesクライアントとWebブラウザで別々の設定を行ったラベルのソース例
<xp:label id="label1" value="Webブラウザ" rendered="false">
<xp:label.rcp value="Notesクライアント" rendered="true"></xp:label.rcp>
</xp:label>
|
バージョン8.5.1から、新しく「コンポーネント」という設計要素がコンポジット・アプリケーションのカテゴリの下に追加されました(図10)。コンポジット・アプリケーションのカテゴリにあることから分かるように、XPageで作成したアプリケーションをコンポジット・アプリケーションのコンポーネントとして利用するための設計要素です。また、コンポジット・アプリケーションだけではなく、IBM Mashup Center(以下Mashup Center)やIBM Lotus Connectionsで使用されているiWidgetとしても利用することが可能です。このコンポジット・アプリケーションとiWidgetの2つで共通しているのは、複数コンポーネントを1つの画面内で組み合わせ、データを送受信して連携することができるという点です。「コンポーネント」設計要素でもこのデータ連携を実現するために、「イベント」という名前でデータ送受信のためのインターフェースを定義することができるようになっています。(※イベントの「送信」については、「パブリッシュ」や「発行」といった用語も使われます。コンポジット・アプリケーションでは「パブリッシュ」、Mashup Centerでは「送信」を使うのが一般的ですが、本稿では「送信」に統一して紹介します。)
図10. 新しい設計要素「コンポーネント」
以下では、XPagesアプリケーション開発手順を紹介したdeveloperWorks記事で紹介されている経費記入帳アプリケーションをベースに、具体的に「コンポーネント」を作成し、コンポジット・アプリケーションのコンポーネントやiWidgetとして使用する手順を紹介していきます。完成版は本稿の末尾のサンプルリンクからダウンロード可能ですのであわせてご覧ください。
コンポーネントの作成には、Domino Designerのアプリケーション・ビューで、「コンポーネント」を右クリックし「新規コンポーネント」を選択します。新規コンポーネントの名前を入力してOKボタンを押すと、コンポーネントが作成されます(図11)。ここでは「tableComponent」という名前にします。
図11. 新規コンポーネントの作成
コンポーネントが作成されると、コンポーネントの定義画面が表示されます(図12)。まず指定しなければならないのは、「ソース」セクションの「使用するXPage」の「ビューモードの場合」の部分です。この部分は、コンポーネントの中に埋め込んで表示したいXPageの名前を指定します。この設定だけで、指定したXPageを表示するコンポーネントの作成は完了です。
図12. コンポーネントの定義画面: ソースに使用するXPageの指定
ここまでの設定では、コンポーネントの中にXPageをただ埋め込んだだけです。これだけでもコンポジット・アプリケーションやiWidgetで利用することは可能ですが、データ連携を行うことができません。データ連携を行いたい場合には、インターフェースとなる「イベント」を定義する必要があります。
イベントのインターフェース定義は先ほどの図12のコンポーネント定義画面の下のほうにある「イベント」セクションで行います。イベントの定義では、イベントの名前、やり取りするデータ型(文字列、数値、ブール値、JSONから選択可能)、そして受信用のイベントなのか送信用のイベントなのかを指定します。ここでは、文字列を受信する「newItemData」イベント(図13)と、文字列を送信する「selectedTableData」イベント(図14)を追加します。
図13. 受信用のイベントの定義
図14. 送信(発行)用のイベントの定義
イベントの定義が完了したら、今度はこのイベントを元にデータを受信、送信するためのロジックを実装します。
イベント受信の際のロジックは、XPageおよびカスタムコントロールの「イベント」ビューに新しく追加された「コンポーネント(受信)」部分で実装します。「コンポーネント(受信)」の下にある「New Event…」の部分をクリックすると、イベント名を入力するダイアログが表示されます(図15)。先ほどのインターフェース定義で設定したイベント名とここで指定するイベントの名前は対応していて、同じ名前のイベントが呼び出されるようになっています。ここでは図13で定義したイベント名であるnewItemDataを名前に指定します。
図15. 受信用のイベントの名前を設定
newItemDataイベントを作成したのち、ボタンのonclickイベント実装などのときと同様に、クライアントサイドもしくはサーバーサイドのJavaScriptやシンプルアクションによってロジックを実装します(図16)。ここではリスト3に示すように、Symphony SpreadsheetからCSV形式文字列データを受け取り、それをパースして項目編集フィールドに値をセットするというロジックをサーバーサイドJavaScriptで実装します。受信したデータの値を取得するには 「context.getSubmittedValue()」メソッドを使用しています。
図16. newItemDataイベント受信時のロジックを実装
リスト3. newItemDataイベント受信時のサーバーサイドJavaScriptロジック例
/* CSVデータを受け取り、項目編集フィールドの値にセット*/
var csvData = context.getSubmittedValue();
var csvLines = csvData.split("|"); // Mashup Center 用。行区切りが「|」
var arrayData = csvLines[csvLines.length -1].split(","); // 最終行のみ処理
for (index in arrayData) {
arrayData[index] = arrayData[index].trim();
}
try {
// 日付フィールド値のセット(日付)
if (arrayData[0].match(/^\d+$/)) {
// Symphony Spreadsheet 連携用
var calendar = java.util.Calendar.getInstance();
calendar.setTime(new java.util.Date(0));
calendar.add(java.util.Calendar.DATE,
java.lang.Integer.parseInt(arrayData[0]) - 25569);
getComponent("date1").value = calendar.getTime();
} else if (arrayData[0].match(/^\d{1,2}\/\d{1,2}\/\d{2,4}$/)) {
// Mashup Center のデータビューア連携用
var dateFormat = new java.text.SimpleDateFormat("MM/dd/yyyy");
getComponent("date1").value = dateFormat.parse(arrayData[0]);
} else {
getComponent("date1").value = "";
}
// 科目フィールド値のセット(文字列)
getComponent("account1").value = arrayData[1];
// 摘要フィールド値のセット(文字列)
getComponent("memo1").value = arrayData[2];
// 金額フィールド値のセット(数値)
getComponent("amount1").value = java.lang.Integer.parseInt(arrayData[3]);
} catch (e) {
println(e)
}
|
なお、本サンプルでは使用していませんが、クライアントサイドJavaScriptでロジックを実装することも可能です。クライアントサイドJavaScriptのロジックはサーバーサイドJavaScriptよりも先に呼び出されるため、受信したデータに対してクライアントサイドで前処理を行い、その結果をサーバーサイドJavaScriptに渡すことができます。例えば、リスト4の例では受信したCSV文字列データの末尾に受信日時を追加し、それをサーバーサイドJavaScriptに渡しています。受信したデータの値は thisEvent.value というコードで取得できます。returnされた値がサーバーサイドJavaScriptに送られます。
リスト4. イベント受信時のクライアントサイドJavaScriptロジック例
return thisEvent.value + "," + new Date(); |
イベント送信(発行)時のロジックの方法は2通りあります。1つ目は、バージョン8.5.1から新しく追加されたクライアントサイドのシンプルアクションを使用する方法です。ボタンなどのコントロールで、クライアントサイドのイベントとして「コンポーネント・プロパティの公開」シンプルアクションを選択して、イベントのインターフェース定義で指定したイベント名、実際に送信するデータの値と種類(データ型)を指定します(図17)。また、ビューの列の値を送信したい場合は「ビュー列の公開」というシンプルアクションも利用可能です。
図17. クライアントサイドのシンプルアクション「コンポーネントプロパティの公開」
もう1つは、クライアントサイドJavaScriptの中でイベント送信用のメソッド「XSP.publishEvent(“イベント名”, “データ”, “データ型”)」を呼び出す方法です。ここではこちらの方法を使用して、ビューで選択された行のデータをCSV形式のデータで送信するようなロジックを実装してみます。
実装の前にtable.xspを少し編集します。まず、ビューの「日付」列に、行を選択できるようにチェックボックスを表示させます。次に、イベント送信を起動するための「ボタン」コントロールと、クライアントサイドJavaScriptを<script type=”text/javascript>タグで埋め込むための「出力スクリプト」コントロールをtable.xspに配置します(図18)
図18. ボタンコントロールと出力スクリプトコントロールの配置
追加したボタンのonclickイベントでは、ビューの選択された行のデータをCSV形式の文字列にして、セッション変数であるsessionScope.selectedTableDataに格納しておきます(リスト5)。そして、このsessionScope.selectedTableDataの値をイベント送信するようなクライアントサイドJavaScriptを、出力スクリプトコントロールの中で実装します(リスト6)。あとは、ボタンをクリックしたときにこの出力スクリプト部分が毎回更新されてイベント送信が実行されるように、onclick時の部分更新の対象を出力スクリプトコントロール部分に指定します(図19)。
リスト5. ボタンのonclickイベントのサーバーサイドJavaScriptロジック
// 選択された行の文書データを元にCSVデータを作成してセッション変数に保持
sessionScope.selectedTableData = "日付,勘定科目,摘要,金額\\n";
var viewPanel = getComponent("viewPanel1");
var noteIDArray = viewPanel.getSelectedIds(); // 選択行の文書のNoteIDを取得
for (i=0; i<noteIDArray.length; i++) {
var noteId = noteIDArray[i];
var doc = database.getDocumentByID(noteId);
// 日付フィールド
var rowData = doc.getItemValueDateTimeArray("date").get(0) + ",";
// 勘定科目フィールド
rowData += doc.getItemValueString("account") + ",";
// 摘要フィールド
rowData += doc.getItemValueString("memo") + ",";
// 金額
rowData += doc.getItemValueInteger("amount") + "\\n";
sessionScope.selectedTableData += rowData;
}
|
リスト6.イベント送信時のクライアントサイドJavaScriptロジック例
XSP.publishEvent("selectedTableData",
"#{javascript:sessionScope.selectedTableData}", "string");
|
図19. ボタンの onclickイベントで出力スクリプトを部分更新
以上でイベントの送受信に関する実装は完了です。
作成した「コンポーネント」をコンポジット・アプリケーションで利用してみます。ここでは、バージョン8.5.1から追加されたSymphony Spreadsheet コンテナと連携するコンポジット・アプリケーションを作成します。なお、ここではコンポジット・アプリケーションの概要については本稿では紹介しませんが、詳しく知りたい方はdeveloperWorksのコンポジット・アプリケーション概要記事を参照してください。
まず、「ブランクの複合アプリケーション」テンプレートを元に空のコンポジット・アプリケーションを作成し、コンポジット・アプリケーション・エディター(CAE)で開きます。XPageで作成した「コンポーネント」は、NSFコンポーネントとして追加することが可能です。「コンポーネントの追加」メニューから「NSFコンポーネントの追加」を選択し、Notes URLの指定でオブジェクトの種類として「コンポーネント」を選んで、今回作成したデータベースのtableComponent.componentを選択します(図20)
図20. 作成したtableComponent.componentをNSFコンポーネントとして追加
次に作成したtableComponentのコンポーネントと、Symphony Spreadsheetコンテナを横並びに配置します。Symphony Spreadsheetコンテナ側は、図21のようにデータ受信用とデータ送信用の範囲を設定します。Symphony Spreadsheetコンテナの使い方についてはdeveloprWorksのコンテナ・フレームワーク紹介記事を参照してください。
図21. Symphony Spreadsheetコンテナ側の設定
配置が完了したら、ワイヤリングを行います。tableComponentコンポーネントのワイヤリングのインターフェースとしては、イベントのインターフェースで定義したイベント受信用の「newItemData」と、イベント送信用の「selectedTableData」の2つが表示されます。それぞれ、先に設定したSymphony SpreadsheetコンテナのitemData、tableDataインターフェースとワイヤリングします(図22、図23)
図22. ワイヤリング(1): データ受信用の「newItemData」イベント
図23. ワイヤリング(2): データ送信用の「selectedTableData」イベント
以上でコンポジット・アプリケーションが完成です。保存してNotesクライアントで実行すると、Symphony Spreadsheet側で入力した値がXPageコンポーネントの入力フィールドに反映され、ビューで行を選択して「データの送信」ボタンを押すと、Symphony Spreadsheetにデータが送信されてデータが表示されます(図24)。
図24. 完成した「コンポーネント」を使ったコンポジット・アプリケーション
「コンポーネント」には他にも「パラメータ」という属性を定義できます。パラメータは、配置したコンポーネント毎に設定できるプリファレンスの役割を果たすものです。Domino Designerに戻り、コンポーネント設計要素を開くと、2つ目のタブに「パラメータ」というタブがあります。ここで、プリファレンスとして使いたいパラメータの名前、データ型、初期値、ラベルなどを定義します(図25)。ここでは、ビューの部分を表示するかどうかを設定する「showViewPanel」パラメータと、項目編集の入力パネルを表示するかを設定する「showInputPanel」パラメータを、共にブール値として定義します。
図25. パラメータの定義
このパラメータの値は、サーバーサイドJavaScriptの中で「context.getComponentParameter(“パラメータ名”)」というメソッドによって取得することができます。例えば、定義した「showViewPanel」パラメータを使ってビューが埋め込まれている表のセルの表示・非表示を切り替えるには、図26のように表のセルの「表示」属性をパラメータの値で動的に計算するようにします(リスト7)。同様に、「showInputPanel」パラメータで入力パネルの表示・非表示も切り替えるようにします。
図26. パラメータ値を使って表示・非表示を切り替える
リスト7. パラメータ値を利用するサーバーサイドJavaScript例
var showViewPanel = context.getComponentParameter("showViewPanel");
return (showViewPanel == null) ? true : showViewPanel;
|
実際にコンポジット・アプリケーションにコンポーネントを配置してからプリファレンス値を切り替えるには、コンポジット・アプリケーション・エディター上で、「コンポーネント・プロパティの編集」画面を表示します。「詳細」タブを開くと、定義したパラメータがリストされており、その値を変更することができるようになっています。例えば、「showInputPanel」属性をfalseにすると、コンポーネント内の入力パネル部分が非表示に切り替わります(図27)。
図27.コンポーネント・プロパティの編集画面でパラメータの値を変更
ここまでは、XPagesの「コンポーネント」をコンポジット・アプリケーションのコンポーネントとして利用する手順を紹介しましたが、この「コンポーネント」をそのままiWidgetとしても利用することができます。定義したイベントもiWidgetでワイヤリングしてそのまま使用することが可能です。コードの変更は一切必要ありません。ここではMashup Center 2.0上にiWidgetとして登録して使用してみます。なお、Mashup Centerの概要については本稿では紹介しませんが、詳しく知りたい方はdeveloperWorksの概要記事を参照してください。
iWidgetには必ずXML形式の定義ファイルが必要です。XPagesの「コンポーネント」には、自動的にこのiWidget定義ファイルを生成する機能があります。Dominoサーバー上に「コンポーネント」を含んだNSFを配置し、以下のURLにアクセスすると、自動生成されたiWidgetの定義XMLファイルを見ることができます(図28)。
リスト8. 「コンポーネント」のiWidget定義ファイルのURL
http://<Dominoのホスト名>/<nsf名>.nsf/<コンポーネント名>.iwidget (今回のサンプルの場合、http://<Dominoのホスト名>/journal2.nsf/testComponent.iwidget ) |
図28. 「コンポーネント」のiWidget定義ファイル
このiWIdget定義XMLのURLをMashup Centerのカタログに登録すると、ウィジェットとして利用できるようになります。まず、カタログ(MashupHub)を開き、「ウィジェットのアップロード」を選択します。ソースとして「iWidget URL」を選択して、URLとして先ほどリスト8で示したiWidget定義ファイルのURLを指定します。あとはウィジェット名などを入力すれば登録完了です。
図29. ウィジェットの登録
カタログへのウィジェットの登録が完了したら、あとはマッシュアップ・ビルダー(旧Lotus Mashups)にウィジェットを追加し、ウィジェットを配置してワイヤリングすることでマッシュアップを行います。まず、今回作成した受信用のイベント「newItemData」を使ってマッシュアップしてみます。ここでは、Excelデータを元に作成したフィードをテーブル形式で表示する「データ・ビューア」ウィジェットを配置し、選択した行のデータをCSV形式で送信するインターフェース「行(テキスト)」とワイヤリングします。インターフェースのデータ型が異なるため直接にはワイヤリングできませんが、データ型の変換役を果たす「JavaScriptアダプター」ウィジェットを間にはさんでワイヤリングすることで、「データ・ビューア」からデータを受信することが可能になります(図30)。
図30. テーブル・ビューアとXPageコンポーネントのワイヤリング(JavaScriptアダプターで中継)
完成したマッシュアップは図31のようになります。データ・ビューアの表から行を選択すると、そのデータが今回作成した「コンポーネント」のウィジェットに送られ、項目編集の入力パネルに値が反映されます。
図31. マッシュアップ(1): フィードデータを表示した「データ・ビューア」ウィジェットとの連携
次に、同じく今回作成した送信用のイベント「selectedTableData」を使ってマッシュアップしてみます。ここでは、「グラフ」ウィジェットを配置し、CSV形式のデータを受信してグラフ化するインターフェース「表の表示(表)」とワイヤリングします。先ほどと同様、インターフェースのデータ型が異なるため、「JavaScriptアダプター」ウィジェットを間にはさんでワイヤリングすることで、「グラフ」ウィジェットにデータを送信できます(図32)。
図32. グラフウィジェットとXPageコンポーネントのワイヤリング(JavaScriptアダプターで中継)
完成したマッシュアップは図33のようになります。XPageコンポーネントのビューから行をいくつか選択して「データの送信」ボタンをクリックすると、そのデータが「グラフ」ウィジェットに送られてグラフ化されます。ここでは「グラフ」ウィジェットの設定により、棒グラフで金額を表示するようにしています。
図33. マッシュアップ(2): 「グラフ」ウィジェットとの連携
本稿では、Lotus Notes/Dominoバージョン8.5.1でのXPagesの新機能として、「XPages in the Notes Client」と、コンポジット・アプリケーションのコンポーネントやiWidgetとして利用可能な新しい設計要素である「コンポーネント」について概要を紹介しました。バージョン8.5まではWebアプリケーションのための技術であったXPagesが、バージョン8.5.1ではNotesクライアント上でも動作するようになり、さらにはコンポジット・アプリケーションやiWidgetとしても利用できるようになったことで、その適用範囲は驚くほど広がりました。また、本稿ではあまり紹介できなかった、従来の機能に対する強化や改善、さらにはDomino Designerのパフォーマンス改善などにより、開発環境としても強力かつ簡単で使いやすいものとなってきています。Domino Designerはバージョン8.5.1より無償ダウンロードが可能になっていますので、これを機に是非XPagesでのアプリケーション開発に触れてみていただければと思います。
| 内容 | ファイル名 | サイズ | ダウンロード形式 |
|---|---|---|---|
| サンプルコード | journal2.zip | 77.3KB | HTTP |
XPages技術情報
- IBM Lotus NotesおよびDomino Designerのヘルプ (メニューから「ヘルプ」>「ヘルプ目次」)
- IBM Lotus Domino and Notes Information Center(英語)
- Lotus Domino Designer Wiki (英語)
- IBM Lotus Notes/Domino 8.5 におけるアプリケーション開発
- XPages による Web アプリケーション開発: 前編、後編
- Lotus Notes 8 における Composite Applicationの概要と開発手法 (コンポジット・アプリケーション)
- IBM Mashup Center - Lotus Mashups技術概説 (Mashup Center)
- XPages in the Notes Client - Security(英語)
- XPages Components in the Notes 8.5.1 Client, Demonstration Video(英語)