ブログ

2021/11/24
【プリザンター】 第123回)サーバスクリプトでビューのフィルタリング設定

どんな時にビューのフィルタリングが必要?

はじめまして、CCSで開発を担当しています阿原と申します。

早速ですが、みなさんはプリザンターを使用していて、特定のレコードだけをユーザに見せるように制御したいと思ったことはありませんか?
表示の絞り込み制御は、ビューを作成して条件を登録しておくことで可能ですが、ビューはどんなユーザでも使用することができるため、見せない制御をすることは難しいです。また、「レコードのアクセス制御」で権限を設定することができますが、レコード1件1件に設定する必要があります。

そこで今回は、「サーバスクリプトでビューのフィルタリングを設定し、見せる・見せないの制御」を実現してみたいと思います。

各種パターンでビューをフィルタリング

ビューのフィルタリングを検証するために、以下のようなテーブルを準備します。

・「課題管理用」として記録テーブルを作成
・エディタ、一覧項目に「状況」「分類A」「担当者」を準備(その他「内容」等任意)
・「状況」に「未着手(100)」「実施中(200)」「完了(900)」「保留(910)」を準備
・「分類A」に「開発」「設定」を準備
・グループの管理で「管理者グループ(グループID:1)」を準備

作成したテーブルを利用し、簡単なものから少し複雑なものまで3つのフィルタリングを設定してみます。
実際に試す際には、サーバスクリプトに<スクリプト>の内容を入力し、条件は必ず「ビュー処理時」を選択してください。



 

【パターン1】担当者に担当の課題だけを見せたいとき
「担当者」にセットされた「ユーザ」のユーザIDがログインユーザIDと一致するようフィルタリングする。

<スクリプト>


view.Filters.Owner = context.UserId;


[view.Filters.Owner] ・・・「担当者」のフィルタリング設定
[context.UserId] ・・・ログインユーザのユーザID

 

【パターン2】管理者グループに属するユーザにだけ「状況」が「完了」した課題を見せたいとき
(1)ログインユーザが所属するグループのグループIDをすべてチェックし、
管理者グループ(グループID:1)に一致する場合は管理者、それ以外は管理者でないと判定する。
(2)管理者でないと判定された場合は「状況」が「未着手」「実施中」「保留」の課題のみ表示されるようフィルタリングする。

<スクリプト>

let adminFlg = false;
for (let groupId of context.Groups){
if(groupId == 1) {
// (1)
adminFlg = true;
}
}
if (!adminFlg) {
// (2)
view.Filters.Status = '["100","200","910"]';
}


[context.Groups] ・・・ログインユーザが属するグループの情報
[view.Filters.Status] ・・・「状況」のフィルタリング設定

<管理者グループに属するユーザの表示>
未:未着手 実:実施中 留:保留 完:完了
管理者

<管理者ではないユーザの表示>
管理者以外

 

【パターン3】管理者ユーザに複数条件で絞り込んだ課題のみをチェックさせたいとき
ログインユーザが管理者ユーザ(ユーザID:2586)の場合に以下の条件でフィルタリングする。
(1)「状況」が「実施中(200)」かつ「分類A」が「開発」の条件を設定する。(AND条件1)
(2)「状況」が「保留(910)」かつ「分類A」が「設定」の条件を設定する。(AND条件2)
(3)AND条件1とAND条件2をOR条件として設定する。

<スクリプト>

if (context.UserId == 2586) {
//(1)
let data1 = {};
data1.Status = '["200"]';
data1.ClassA = '["開発"]';
//(2)
let data2 = {};
data2.Status= '["910"]';
data2.ClassA = '["設定"]';
//(3)
let data = {};
data.and_Filter1 = JSON.stringify(data1);
data.and_Filter2 = JSON.stringify(data2);
view.Filters.or_Filter = JSON.stringify(data);
}


[data1.Status],[data2.Status] ・・・「状況」
[data1.ClassA],[data2.ClassA] ・・・「分類A」
[data.and_Filter1],[data.and_Filter2] ・・・AND条件のフィルタリング設定
[view.Filters.or_Filter] ・・・OR条件のフィルタリング設定

<管理者ユーザの表示>
複数条件

まとめ

さて、いかがでしたか?

今回は3パターンだけの紹介となりましたが、フィルタリングする条件や項目を変更することで、いろいろな要望を実現することができると思います。
見せる・見せないの制御は実運用で必要な場面も多いと思いますので是非試してみてください。

導入の支援、スクリプト開発などでお困りの場合は、当社で支援もいたします。プリザンター逆引き辞典PDF版やスタイル・スクリプトサンプル集PDF版の販売もしております!

☆☆ブログ内容への質問や追加説明をご希望の方は
【問い合わせフォーム】 こちら からお気軽にお問い合わせください☆☆

PAGE TOP