2009/12/28

XPages Tutorial Part 20 : 特定のカテゴリのものだけを表示させる方法

Restricting The Repeat To A Single Category {Original Source}

現在のところ「Location」XPage はビューのカテゴリも含めてすべてのエントリを表示してしまっています。
今回は http://demosite/xphone.nsf/location.xsp?location=Dublin のようなフォーマットの URL を使って変数を用いながら制御する方法を見ていきます。

これにはサーバーサイドの JavaScript を使って対処したいと思います。
ここで使用する JavaScript ライブラリは Thomas Gumz によって作成され、Matt White によっていくつか修正されているスクリプトライブラリを活用したいと思います。またこれは 8.5 の XPages ディスカッションテンプレートの中にあるものです。また taskjam.net でダウンロードできる TaskJam アプリケーションにもいくつかの修正が加えられた形で使用されています。
このスクリプトライブラリは次回のダウンロードファイルに含まれています。

このスクリプトライブラリをアプリケーションに追加するために「content_Location」カスタムコントロールを開き、アウトラインのビューからカスタムコントロールを選択します。
プロパティタブのリソースへ切り替え、「スクリプトライブラリの追加...」ボタンをクリックします。
「スクリプトライブラリをページへ追加」ダイアログボックスが表示されたら対象のスクリプトライブラリを選択します。

次に「すべてのプロパティ」タブに切り替え、「BeforePageLoad」プロパティを探してください。
そしてサーバーサイド JavaScript のコードを記述します。コードは下のようになります。
var cgi = new CGIVariables();
var param = cgi.getURLParam("Location");
if (param) {
if (param != "" ) 
sessionScope.locationfilter = param;
}

このコードが意味するのは、ページがロードされる前に URL を参照し location= の部分を見つけます。もし存在する場合にはセッションスコープの「locationfilter」という変数に値を代入します。
セッションスコープはユーザーのセッションのライフタイムで追加できる変数を設定することができます。言い換えるとブラウザが閉じられた時点でセッションスコープで設定した変数はなくなります。その他にもアプリケーションスコープやページスコープなどもあり同様に変数の値を保存しておくことができます。
下のコードはソーズビューでみたサーバーサイドのスクリプトライブラリのリソースを参照しているものと beforePageLoad のコードです。


URL からロケーションを取得してセッションスコープの変数としてその値を保存できるようになりましたので、次はデータソースにそれがカテゴリであることを教えてあげなければなりません。
すべてのプロパティタブから「データ」-「data」- 「dominoView[0]」の「categoryFilter」を探してください。

ここで値の計算のためのスクリプトエディタを表示させてセッションスコープの変数を参照するようにしていきます。
「sessionScope.locationfilter」を入力してください。
ソースビューで確認すると以下のようなコードが追加されているはずです。

ではカスタムコントロールを保存してブラウザで「?Location=Pittsburgh」を URL のお尻に追加して表示させてみてください。(もしサンプルデータを追加しているのであればそれも試してみてください)

?Location=Chicago とすると結果はこうなるはずです。

?Location=Pittsburgh はこうなります。(データによりますが)

これで行のスタイルも正しく表示されるようになりました。

次回はサイドバーにあるロケーション名をこのページにリンクさせたいと思います。

0 件のコメント:

コメントを投稿