はじめに
プリザンターのユーザを管理すると困ることに属性として使用出来る項目の少なさがあります。基本的には「組織」「グループ」で制御していくのですが、それ以外の属性をくわえたいことがあります。それを実現するための方法として「拡張項目」があります。今回はこの拡張項目を使用して、一覧画面でフィルタをかける方法を紹介します。
前提
今回はユーザに選択肢項目として、常駐場所をくわえることとします。拡張項目の設定に使用するJSONは下記の通りです。
{
"Users_ClassA": {
"LabelText": "常駐場所",
"GridEnabled": "1",
"EditorEnabled": "1",
"UseSearch": true,
"ChoicesText": "01,A事業所\n02,B事業所\n03,C事業所"
"LabelText_en": "Permanent location",
"LabelText_zh": "常驻地",
"LabelText_de": "Fester Standort",
"LabelText_ko": "상주 장소",
"LabelText_es": "Ubicación permanente",
"LabelText_vn": "Nơi cư trú"
}
}
このユーザの項目Aに対して拡張して設定した項目を使用して、同じ常駐場所のユーザが作成したレコードだけを表示するように設定をしてみます。
実装方法
プリザンターの拡張SQLの機能として、内部で生成されている一覧などを取得するSQLに対して、条件を追加することができるOnSelectingWhereという機能があります。公式マニュアルにサンプルが掲載されているので、これを参考にします。
拡張SQLとして次の様なものを用意します。
{
"SiteIdList": [2],
"OnSelectingWhere": true
}
サイトIDが2のもののみを対象としています。任意に書き換えをおこなってください。
(
@_U IN (1) --システム管理者のユーザID
OR [CreatedUser] IN (
SELECT
[UserId]
FROM
[Users]
WHERE
[ClassA] IN (
SELECT
[ClassA]
FROM
[Users]
WHERE
[UserId] IN (@_U)
)
)
)
ログインユーザの情報を使用して常駐場所のリストを作成してそれを使ってユーザの絞り込みを行い、作成ユーザがマッチするかどうかで判断しています。システム管理者の場合はユーザID決め打ちで全レコードが表示されるようにしていますが、サイトに対する権限などを読み取って動的に設定することも可能です。その場合は権限を取得する方法を過去に紹介しているので参考にしてみてください。
まとめ
今回はユーザに追加した拡張項目をフィルタに使用する方法を紹介しました。この方法の変形としてサーバスクリプトのview.OnSelectingWhereを使用して、動的に適用される拡張SQLを切り替える方法もあるので、是非試して見てください。少しとっつきにくい方法ではありますが、使いこなせるとかなり強力な武器になります!!