次に、Dominoデータサービスを利用してLotus Notes/Dominoアプリにアクセスする方法を解説します。ここでは実際にHTTPリクエストを発行するために、Mozilla Firefoxのアドオンとして提供されている「Poster」を利用します。行う操作は、Dominoデータサービス経由での文書の新規作成および作成した文書の削除です。
文書の作成を行うには、アプリのビューやフォルダの文書一覧にアクセスするために用意されているビュー・フォルダエントリーズリソース、または文書の詳細にアクセスするためのドキュメントコレクションリソースに対してPOSTリクエストを発行します。
ビュー・フォルダエントリーズリソースを利用した場合には、文書の作成時に対象となっているビューまたはフォルダのカラムとして定義されているフィールドのみに値を格納できます。ドキュメントコレクションリソースを利用した場合には、その制限はありません。
ここでは、ドキュメントコレクションリソースを利用して文書作成を行います。具体的には、以下のようなリクエストを発行します。
POST http://{Lotus Dominoホスト名}/{アプリファイル名}/api/data/documents?{パラメータ}
パラメータには以下のような値をセットできます。
computewithform={true/false} | 文書の保存時にフォームに埋め込まれている計算ロジックを実行する場合にはtrueを、実行しない場合にはfalseを指定 |
---|---|
form={フォーム名} | 作成する文書に関連付けるフォーム名を指定 |
parentid={UNID} | 子文書として文書の作成を行いたい場合、親文書のUNIDを指定 |
リクエストを発行する際の本体(コンテント)には、プロパティとしてフィールド名とその値をペアで保持するJSONデータを含めます。具体的に、「MainForm」というフォームを用いて、そのフォーム内のいくつかのフィールドに適当な値を格納した文書を作成してみます。まず、発行するPOSTリクエストは以下のような形式になります。
http://{Lotus Dominoホスト名}/{アプリファイル名}/api/data/documents? form=MainForm&computewithform=true
リクエストの本体に含める、作成する文書の内容を定義したJSONデータは以下のようにします。
{ "ACont":"ACME Airline", "BCont":"ACME Airline Corporation" }
この例では、指定したMainForm内のAContフィールドに「ACME Airline」が、BContフィールドに「ACME Airline Corporation」という値がそれぞれ格納されます。これを実際にPosterで実行してみます(図5)。その際、content typeには「application/json」を指定します。
正しく処理が実行されると、対象のアプリに新規文書が作成され、クライアントにステータスコード「201」(Created)が返されます(図6)。
次に、作成した文書の削除を行ってみます。既存文書を削除する場合には、ドキュメントリソースに対して以下のようなDELETEリクエストを発行します。
DELETE http://{Lotus Domno ホスト名}/{アプリファイル名}/api/data/documents/unid/{ドキュメントID}
ドキュメントIDには削除したい文書のUNIDを指定します。ここでは先ほど作成した文書をPosterを利用して削除してみます。まず、文書を削除するのに必要なUNIDを取得します。UNIDの取得にはドキュメントコレクションリソースや、ビュー・フォルダーコレクションエントリリソースから取得できます。ドキュメントコレクションリソースから取得する際には、以下でアプリ内のドキュメントすべてを取得できます。
GET http://{Lotus Dominoホスト名}/{アプリファイル名}/api/data/documents?{パラメータ}
ビュー・フォルダーコレクションエントリリソースから取得する際には、以下のいずれかで取得できます。
GET http://{Lotus Dominoホスト名}/{アプリファイル名}/api/data/collections/unid/{ビュー・フォルダの UNID}
GET http://{Lotus Dominoホスト名}/{アプリファイル名}/api/data/collections/name/{ビュー・フォルダ名}
どちらもパラメータに検索ワードを設定したり、取得文書の件数を制限したりすることが可能で、目的の文書を探せます。削除する文書のUNIDが取得できたら、DELETEリクエストをPosterから発行します(図7)。
処理が完了すると、対象の文書が削除されステータス「200」(OK)がクライアントに返されます。同様にDominoデータサービスを利用することで、文書の更新なども行うことができるので、Lotus Notes/Dominoアプリを外部から操作するアプリを効率的に開発できます。
最後に、Dominoデータサービスを利用したアプリの例としてAndroidアプリの作り方を紹介します。オープンソースコミュニティである「OpenNTF.org」で公開されているプロフィールアプリに格納されているデータを表示するAndroidアプリを作成してみます。
まず、ダウンロードしたアプリ(Profiles.nsfファイル)をLotus Dominoに配置し、このアプリに対してDominoデータサービスを有効にします。
次に、Android SDKを用いて、プロフィールデータを表示するためのユーザーインターフェイスを作成します。ユーザーインターフェイスを作成したら、そこで必要となるプロフィールアプリに格納されているデータをDominoデータサービスを用いて取得します。データの取得にはHTTPを操作できるライブラリを用いて以下のように実装できます。
StringURL= "http:// {ホスト名}/Profiles.nsf/api/data/collections/name/vwProfiles"; String data = getData(url); Log.v(TAG, data); private static String getData(String url) throws ClientProtocolException, IOException { HttpClient client = new DefaultHttpClient(); HttpGet target = new HttpGet(url); try { return client.execute(target, new BasicResponseHandler()); } finally { client.getConnectionManager().shutdown(); } }
取得されるデータはJSON形式になるので、それをパースしてアプリに必要なデータのみを取り出せます。取り出されたデータとユーザーインターフェイスとが連携することでプロフィールアプリのデータをAndroidアプリ上に表示できます。
例えば、取得したデータからフルネームと詳細データ取得のためのURLを取得したい場合、以下のようなコードで実装します 。
JSONArray jsonArray = new JSONArray(data); for (int i=0; i<jsonArray.length(); i++) { JSONObject jsonData = jsonArray.getJSONObject(i); HashMap<String, String> map = new HashMap<String, String>(); map.put("fullname", jsonData.getString("FullName")); map.put("href", jsonData.getJSONObject("@link").getString("href")); list.add(map); }
同様に詳細データに関しても必要データを取得しユーザーインターフェイスのコンポーネントと連携することでDominoデータサービスを利用したプロフィールアプリのAndroid対応が可能です(図8)。
ここで示したアプリの開発方法の詳細解説、およびすべてのソースコードは、こちらよりダウンロード可能です。
詳細なDominoデータサービスに関するドキュメントは「IBM Notes and Domino Application Development wiki : Domino Data Service」で公開されています。
Dominoデータサービスを利用することで、Lotus Notes/Dominoアプリを利用したさまざまなアプリの実現可能性が広がります。Dominoデータサービスを利用したLotus Notes/Domino連携アプリの開発を検討してみてはいかがでしょうか。
Copyright © ITmedia, Inc. All Rights Reserved.