コンテンツにスキップ
「プリザンター入門」発売中!

一覧表示するレコードを所属組織別に分けたい

回答

拡張SQLの「OnSelectingWhere」を使用してください。


概要

事前に作成した組織・グループ別にレコード一覧画面に表示するレコードを制御します。このページでは本社(組織)に所属するユーザは登録された全てのレコードを閲覧することができ、その他の組織に所属するユーザは同グループ内で登録されたレコードのみを閲覧することができるようになります。

事前準備

(1) システム管理者でログイン後、下記の表を参考に[管理]-[ユーザの管理]、[組織の管理]、[グループの管理]からグループと組織情報を含めたユーザ情報を作成してください。ここでは本社に所属するユーザと各営業店に所属するユーザを想定し、組織とグループを構成します。下記にその構成を表に記載いたします。

ユーザ 組織 グループ
branch-user1 営業店1 グループ1
branch-user2 営業店2 〃
branch-user3 営業店3 グループ2
head-user1 本社 -

ユーザの管理画面。表のとおりにユーザを作成した状態
組織の管理画面。本社と各営業店を作成した状態
グループの管理画面。2つのグループを作成した状態

(2)[管理]-[テーブルの管理]-[エディタ]より分類Bを任意の表示名にして(ここでは”店番”,わかりやすいように分類Cを”店名”に設定)、[一覧]タブからそれぞれを有効化してください。

(3) 各ユーザでレコードを少なくても1つ作成してください。
各ユーザで作成したレコードが並ぶ一覧画面
(4) 以下のサンプルコード(Sql)の@_Dの値とサンプルコード(JSON)のSiteIdListの値を環境に合わせ、変更してください。
この例では@_Dの値は21,SiteIdListの値は1166になります。
サンプルコードに設定する @_D と SiteIdList の値を確認する画面

(5) Extensionsテーブルに(3)で作成したサンプルコードとその他の項目を記入してください。
  拡張SQLについてはこちらをご確認ください(/manual/extended-sql)

(6)プリザンターを再起動してください。

Sql
(
    @_U = 1 or @_D = 1 --システム管理者のユーザIDまたは本社組織の組織ID
    or [ClassB] in (
        select [Depts].[DeptCode]
        from [GroupMembers]
        left join [Depts] 
        on Depts.DeptId = GroupMembers.DeptId
            and ([GroupMembers].[GroupId] in(
                select [GroupId] 
                from [GroupMembers] 
                where [DeptId] = @_D))
        where [Depts].[DeptCode] is not null)
)
JSON
{
    "SiteIdList": [2],
    "OnSelectingWhere": true
}

結果

以下のようにユーザ毎に所属するグループまたは組織によって表示(取得)されるレコードが変わります。

  • 本社ユーザでログインした場合

    本社ユーザでログインしたときの一覧画面

  • 営業店2に所属するユーザでログインした場合

    営業店2に所属するユーザでログインしたときの一覧画面

  • 営業店3に所属するユーザでログインした場合

    営業店3に所属するユーザでログインしたときの一覧画面

関連情報