当ブログに掲載しているサンプルは、すべて利用者の自己責任という形でお願いします。
ただし、明らかな不具合がある場合、ご連絡いただければ、訂正記事を出します。
また、こちらのサンプルは、別のサイト等への公開、転載は一切禁止しています。
どうしてもと言う場合は、筆者にあらかじめご連絡ください。
記事そのもののリンクについてはご自由に行っていただいてよいです。

テクてく Lotus 技術者 Slack に参加しよう!

2012年5月23日水曜日

セッションスコープ変数はどこで使われているのか?

こんばんは。寒いです。5月も後半だってのに。筆者は寒暖の差にとても弱いので、こういう気候は勘弁してほしいです。

今日(2012年5月22日)のアクセス数は約450!びっくりです。ランキングも着々と上がってきています。ということで、この記事を読んだら、ボタンをクリックしてくださいね!
にほんブログ村 IT技術ブログへ

さて、今日もXPagesDayの復習です。どんだけやるんだ?そんなにきちんと話していなかったのか?と疑われそうですが、もう気にしないで、続けます。

ということで、今日はセッションスコープ変数にフォーカスを当ててみます。

と言っても、使い方はXPagesDayのセッションで説明したので、ここでは省略します(知りたい方は、セッション資料をダウンロードしてやってください)。


「用語集 for XPages」では、色々なところでセッションスコープ変数を使っています。

第一弾の自動リンクを作ってみようでは、linkDocIdというセッションスコープ変数の中に、文書UNIDを設定しました。
第二弾のカテゴリ名によるフィルタリングを設定するには? では、viewCategoriesというセッションスコープ変数の中に五十音順ビューの第一列の値を設定していました(カテゴリ名によるフィルタリングで利用するため)。


実はこのアプリケーションでは、11個のセッションスコープ変数を利用しています。
ここまで来ると、どんな名前の変数をどのように使っているのか分からなくなってしまいます(まぁ、そんな事はないんですが・・・)。
そこで、ちょっと趣向を凝らして?、セッションスコープ変数を管理するようにしました。
「ccSessionScope」というカスタムコントロールを作成して、その中にアプリケーションで利用しているセッションスコープ変数の値を常に表示させているのです。
ccSessionScopeカスタムコントロール

上図はccSessionScopeカスタムコントロールの設計画面です。
計算結果フィールドがずらりと並んでいます。
それぞれの値は、
"セッションスコープ変数名: " + sessionScope.hogehoge
としてあります。
例えば、 viewCategoriesというセッションスコープ変数名の場合、
"viewCategories: " + sessionScope.viewCategories
という感じです。

後は、このカスタムコントロールをXPageの中に埋め込んでしまえばよいのです。
ただ、常に表示されていると、見苦しくなってしまうので、特定のユーザーにのみ表示するように制御していあります。
ACLで[Debug] ロールを付与されているユーザーにのみ表示するようにしてあるのです。
こうすれば、一般ユーザには表示させることなく、アプリケーションを利用してもらえます。

ちなみに、表示制御は以下のように行います。
1.XPageにccSessionScopeカスタムコントロールをドラッグ&ドロップします。
2.ccSessionScopeカスタムコントロールの可視式に[Debug]ロールを持つユーザーだけ表示できるように式を設定します(下図)。
ccSessionScopeカスタムコントロールの可視式

2行目のcontext.getUser().getRoles()というのが、現在のユーザが付与されているロールを取得するものです。
7行目の@Contains(r1, r2) == @True()で、[Debug]ロールがユーザに付与されているロールに含まれるかどうかを検索しています。
この関数の結果が@True であれば含まれているという事でtrueを返しています。

うん。これで、XPagesにおけるロールの使い方も覚えましたね。



さて、実際の表示例を見てみましょう。
セッションスコープ変数の表示例

このアプリケーションは画面遷移がないのと画面に表示する内容が少ないので、堂々と表示していますが、セクションコントロールの中に収めると、もっとひっそりと表示させる事も出来ます。


最後に、セッションスコープ変数の使われ方について見てみましょう。
viewTypeは、ビュー名(省略したもの)を格納しています。viewCategoriesと併せて使用する事で、どのビューのどのカテゴリを開いているのかを制御しています。
rowsはビューの1ページあたりの文書数を制御するのに利用しています。
ecとsaveEcは、カテゴリ列があるビューのカテゴリの展開/省略を制御するのに利用しています。
visibleFlagは、用語情報(フォーム)の表示非表示の制御に利用しています。
errorVisibleとerrMsgは、用語情報の登録時に発生したエラーメッセージの表示非表示の制御に利用、及び、表示するエラーメッセージを格納しています。

infoVisible、helpVisibleは、ヘルプとバージョン情報の表示非表示の制御に利用しています。

ほとんどが表示非表示の制御に利用していますが、コントロールのプロパティの値を動的に変更したい!という時に使うのがセオリーではないでしょうか。


是非、セッションスコープ変数の使い方を覚えて、どんどん使ってください。



・・・なんか、思っていたのと違う内容になってしまった気がしないでもないが。気のせいにしましょう(え?ダメ?)




【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】

単純なDBのカスタマイズから他アプリケーションとの連携までご要望にお応えします
Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

0 件のコメント: