クラシカルNotesデザイナーのためのXPages入門

Domino R8.5から導入されたXPagesとはなんぞや。

XPagesの特徴

XPagesというのはWeb技術とクラシカルNotesの技術がうまく連携するフレームワーク。クラシカルNotesになれた人がWebアプリケーションをすばやく構築するには非常に便利な技術。

また、Webアプリのデータはこれまでと同じようにNotes文書に保存されるので、Notesクライアントを使って、データのメンテナンスもエージェントなどを使って楽にできる。

これまでも、Dominoで作ったNotes-DBをWeb経由で参照する機能はあったのだが、どうにも古臭い感じは否めなかった。 従来のDominoのWeb化は、Notesの設計や文書情報をサーバ側でHTMLに変換し、それをブラウザで表示させるだけだった。

このため、ブラウザ側ではたいした処理ができず、たとえば、入力値の事前チェックや、画面の部分更新などの凝った処理はできなかった。

従来のDomino-Web化のしくみ

XPagesというのは、カッコイイWebアプリをDominoで作るための仕組み。XPageと呼ぶページを用意し、その上にフィールドやリストボックスいった 各種コントロールを配置する。これらはサーバ側のXPagesエンジンでHTML+JavaScriptに変換され、ブラウザに送られる。

ブラウザはHTMLの描画だけでなく、JavaScriptの機能を使って、必要に応じてサーバ側のXPagesエンジンと通信を行い、画面の描画を変更するといったこともできる。 後で、「サーバサイドスクリプト」と「クライアントスクリプト」という用語が出てくるが、この仕組みを知っていれば理解しやすいだろう。

XPagesのしくみ

ちなみに、「XPages」と複数形で記載されている場合は、上記のようなしくみ、技術を示す用語。「XPage」のように、単数形で記載されている場合は、「画面」というか、設計要素を 示す。

Notesの以下の特徴的な機能が存分に使用できる。

ほかにもこんな利点が。

ACLや読者名フィールドを使った強力なアクセス制御

Notesではおなじみのアクセス制御がWebの世界でも利用できる。

Notesアプリケーション(xxx.nsf)のACLに、ユーザー単位やグループ単位で、読者、作成者、編集者などを設定しておくと、Webでアクセスしたときのユーザーに応じて、以下のような制限をかけることができる。

また、文書内にクラシカルNotesと同じく、読者名フィールド、作成者名フィールドを用意し、ユーザー名を設定しておくと、ユーザーのアクセス権を制限できる。例えば、読者名フィールドにグループ名を 設定しておくと、そのグループに属する人だけが、その文書を開くことができる。編集も同じく、作成者名フィールドに設定されたグループに属する人だけが編集することができる。

また、「ロール」を設定しておくと、Webアプリケーションのスクリプトで現在のユーザーのロール名を簡単に取得できるので、ロールに応じた操作制限を簡単にかけることができる。

表示モード/編集モードの切り替え

文書自体に表示モードと編集モードがあって、それを切り替えると、Web上ので表示(タグの種類)が自動的に切り替わる。

画面設計時には編集モードで設計しておいても、読み取りモードに変更すると勝手にそれっぽいタグに切り替わる。

表示モード/編集モードの切り替え

よって、基本的には編集モードをイメージしてデザインしておけば、表示モードのページを別途デザインする必要はない。

文書、フィールド、ビューを使ったデータ管理

XPagesでも、データの保存は文書に対して行う。ページ内の情報入力コントロールをフィールドに紐付けておけば、ページ上で入力したデータはNotes-DB内の文書に保存される。

入力系コントロールのフィールドへの紐付け

NotesビューをWebページ上で文書の一覧として表示する専用の「ビューコントロール」があり、ビューは簡単に実現できる。 また、ビューはコンボボックス、リストボックス、ラジオボタンなどの選択肢としても利用可能。このへんはクラシカルNotesで選択肢を式で設定していたのと同じような感覚で設定できる。

変わったところでは、タイプアヘッド(数文字入力すると、残りの文字の候補を出してくれる機構)の候補を決める元データとして利用できる。

NotesSession, NotesDocumentなどの使い慣れたクラスの使用

XPagesのスクリプトを作っていると、ほかの文書のデータにアクセスしたり、ユーザー名を取得したり、ビューにアクセスしたりしないといけない。 このあたりはNotesDocumentで文書を取得し、NotesSessionからユーザー名を取得したりとか、LotusScriptでやってたのと同じような方法が使える。

@関数も使用可能

クラシカルNotesの時にはできるだけ使いたくなかった@関数もJavaScriptで使用できる。@DbLookupや@DbColumnなどがとても便利。@Nameでユーザー名が取得できたりする。

文字列操作関数も用意されてるけど、JavaScriptの文字列操作関数とどっちが便利だろうか。悩ましいところ。

データの集計やメンテナンス用の変更はNotesクライアントから可能

Webから入力したデータも、結局はNotes文書に保存される。よって、Notesクライアントで文書を開けば、データにアクセスできる(フォームを用意しておく)。 Notesクライアントで変更できるし、ビューを使えば集計もできる。RubydeDominoを使えば一括データ処理も自由自在。

このへんはNotesクライアントのおかげ。

設計テンプレートを使っての設計の更新

Notesの設計テンプレートの仕組みはXPagesの世界でも使えるので、テンプレートで変更をかけて、事前テストを行った後で本番DBの設計を変更するといったことも普通にできる。

ユーザー文書でのアカウント管理

Dominoディレクトリ(names.nsf)で管理しているユーザー文書でユーザーアカウント管理が可能なのも、クラシカルNotesと同じ。XPagesの世界では、IDファイルはいらないので、ユーザー登録もスクリプトでちゃちゃっとできる。

ユーザー文書の適当なフィールドにデータをいれておけば、ログオンユーザーに応じた属性管理も簡単にできる。

Dominoディレクトリ自体は全ユーザーがアクセス可能にしたいといけないが、WebブラウザからURLを直接入力して簡単に開けてしまうと、ユーザーの一覧やメールアドレスが流出しかねない。 names.nsfのプロパティでWebアクセスは不可にしておくといい。

names.nsfのURLアクセス制限

こうしておいても、サーバサイドスクリプトからならアクセスできるのでよくできたものだ。

サーバー文書でのサーバ管理

Dominoサーバの設定は、Dominoディレクトリ内のサーバ文書で行うが、XPagesになってもそれは同じ。今までと同じく、なれた方法で設定できる。

以下のページは英語表記だが、日本語パックをインストールすれば項目などが日本語に置き換わる。

サーバ設定

AjaxやDojoといったWeb技術を利用できる

XPagesを使ってWebアプリを設計すると、AjaxやDojoといったWeb技術もあまり意識せず動かせてしまう。 実際に動かしながら仕組みをさぐるのにいいかもしれない。

Ajaxのための簡単な設定

JavaScriptを覚えられる

XPagesでWebアプリを設計するには、JavaScriptを使わざるを得ないので、いやでもJavaScriptを習得できる。 クラシカルNotesではLotusScriptばかり使ってたけど、JavaScriptのほうがいい感じ。

私もいままでまったくJavaScriptは使う機会がなかったんだけど、XPagesをはじめてJavaScriptを覚えたクチです。

CSSやHTML、XMLを覚えられる

CSSなども今までまじめに勉強してこなかったが、XPagesではデザイン指定にCSSを駆使するので、自然に覚えられた。

「oneUI」と呼ばれるCSSが用意されていて、oneUIのルールにのっとってoneUI用のCSSを適用すれば、カッコイイ画面を作成できる。 デザインにそれほど懲りたくなくても、規定に基づいてページを記述すれば、いい感じのページデザインになる。