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

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

2013年8月8日木曜日

制御付きアクセスセクションをXPagesで実現してみる

もう秋かと思っていましたが、連日の暑さにやられた方々が多数いた模様です。みなさんはそんなことにならないように、日ごろから注意しましょうね。


では、本題に入る前に、こちらのボタンをクリックしてください。
にほんブログ村 IT技術ブログへ


従来のノーツアプリケーションの場合、便利な機能の一つに「制御付きアクセスセクション」というものがありますね。
設定したユーザ以外は、そのセクションの中にあるフィールドを編集することができないというものです。
こちらの機能は、ノーツWebアプリケーションでもそのまま動作してくれるというのもポイントが高いですね。

今回は、この機能をXPagesで実現する方法について説明します。

まずは、おさらいです。
従来のノーツアプリケーションで「制御付きアクセスセクション」を実現するには、
[作成][セクション][制御つきアクセス]メニューを実行します。
この時、セクションにしたい箇所をあらかじめ選択しておくとわかりやすくて良いでしょう(下図参照)。
ノーツアプリケーションでの制御つきアクセスセクション

すると、下図のようなインフォボックスが表示されるので、「タイトル」と「フィールド名」に値を入力します。
制御つきアクセスセクションのプロパティ
さらに、このウィンドウの左から3番目のタブを開いて、セクションフィールドの値を決めます。今回は、セクションフィールド名を計算結果として代入しておきます。
セクションフィールドの値

ついでに言うと、セクションを作成すると、省略された状態になってしまうので、展開しておきましょう。
この状態でフォームを保存して、ノーツクライアントでプレビューを見てみましょう。
ノーツクライアントでのプレビュー

文書の新規作成時は、制御つきアクセスセクションに設定したフィールドは空白のため、このセクションは全ユーザが編集できるようになっています。

このフィールドの値を変更すると、その値で決められたユーザのみがこのセクション内を編集できるようになります。
下図はこのセクションフィールド名の値を修正したものです。
特定のユーザのみがセクションを編集できる状態

では、これをXPagesで実現してみましょう。
XPages にもセクションコントロールがあるので、それを配置してみましょう。
でも・・・制御つきセクションの機能が実現できそうな設定(プロパティ)はありません。(下図)
セクションコントロールとそのプロパティ

では、どうすればよいのでしょうか?
答えは・・・パネルコントロールを使います。

さっそく、パネルコントロールを配置してみましょう。
「読み取り専用」というプロパティがありますね。そこにマウスカーソルをあててみると・・・(下図)
パネルコントロールのプロパティ

「このコントロールが読み取り専用であることを示し、それに含まれるコントロールを読み取り専用に切り替えます。」と書いてあります。
つまり、ここにチェックが入っていれば、パネルコントロール内に配置したその他のコントロールもすべて読み取り専用になるということです。
しかも、このプロパティは計算式を入力できるようになっています(右側にある◇の箇所)。

このプロパティをただチェックするだけでなく、計算式でチェックの有無を決めるようにすれば、特定のユーザだけ、読み取り専用にすることができるようになるのです。
これは、最初に説明した「制御つきアクセスセクション」の動作に一致しますね。

サンプルの式を記述してみましょう。
先ほどのノーツアプリケーションと同じように、Masahiko Miyo/EFMIYOだけが 編集できるようにします。
読み取り専用の計算式

気を付けるのは、trueを返すと、読み取り専用になってしまうので、編集させたいユーザの場合は、falseを返すようにすることです。

下図は、XPage にフォームをデータソースとして登録して、フィールドを設定、ブラウザで表示させたものです。
XPagesでのプレビュー

ちなみに、Masahiko Miyo/EFMIYOというユーザで、開いてみた画面が下図になります。


ユーザによって、編集できる/編集できないという切り替えができるのがわかってもらえたでしょうか?(画面にユーザ名を表示していないからわかりにくいなぁ・・・)

「読み取り専用」の式の内容を変更すれば、編集用と表示用のコントロールを複数用意する必要もなくなるようにできると思います。
たとえば、ワークフローで申請中は、この内容を修正されたくないよという場合に利用できるでしょう。

この使い方を覚えるだけで、従来のノーツアプリケーションをXPages化するのがさらに簡単になりますね。

ぜひ使ってみてください。




※もしかしたら、他にもっと華麗な方法があるかもしれません。そういった方法をご存知の方は、フィードバックしてやってください。








【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】
単純なDBのカスタマイズから他アプリケーションとの連携までご要望にお応えします!

Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

2 件のコメント:

Katoman さんのコメント...

セクションへのアクセスの制限はACLのロールを使って行うのが実際には多いと思います。現在ログインしているユーザーがもつロールをGetとして比較するというのはどうやってやるのでしょうか?(次回ネタ?)

Masahiko Miyo さんのコメント...

Katomanさん、コメントありがとうございます。

ログインしているユーザに付与されているロールの取得方法は、
http://guylocke.blogspot.jp/2012/08/xpages.html
の記事で触れていますが、
context.getUser().getRoles();
ですよね。
実は、この方法はKatomanさんのXPages 100連発の資料で覚えたんですよ(スライドの48個め)。いろいろと役に立ちますね!