1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

プリザンターのサーバスクリプトは柔軟なカスタマイズを実現できる機能です。
本記事では、サーバスクリプトのうち、様々な用途で利用できるcolumns / saved / viewの3つの便利なオブジェクトについて紹介します。
これらを利用することで、業務の自動化やユーザごとの柔軟な画面制御などを実装することが可能になります。

サーバスクリプト活用例

1.columns

はじめにcolumnsオブジェクトについてご紹介します。
columnsオブジェクトは、サーバスクリプトから項目の設定を取得・編集できるオブジェクトです。
一覧画面や編集画面で使用することで、セルやフィールドのCSS設定、拡張HTMLの適用などを行えます。

詳しくは下記公式マニュアルをご確認ください。
開発者向け機能:サーバスクリプト:columns

今回はReadOnlyを使用し、特定のユーザに項目を読み取り専用で表示する例を紹介します。

以下の例では、modelとcontextを組み合わせることで、担当者本人がログインしている場合のみ「分類A」を読取専用にすることができます。

if(context.UserId == model.Owner){
   columns.ClassA.ReadOnly = true;
}

・ログインユーザが担当者の場合
image.png
・ログインユーザが担当者以外の場合
image.png

このように、contextやmodelと併せて活用することで、特定の条件下で任意の項目の設定を編集することができるようになります。

2.saved

次にsavedオブジェクトをご紹介します。
こちらのオブジェクトは、更新前のレコードの情報を取得することができます。

savedオブジェクトを使用することで、特定の項目に対して、変更前後を比較した処理が実装できます。
そのため、特定の項目の値の変更をトリガーとするといったような処理の作成が可能になります。

注意点として、条件が「更新前」の場合のみ使用できます。
「更新前」以外の条件では参照できたとしてもmodelと同等の扱いになります。

詳しくは下記公式マニュアルをご確認ください。
開発者向け機能:サーバスクリプト:saved
https://pleasanter.org/ja/manual/server-script-saved

以下の例では、「状況」項目が「100,未着手」から「900,完了」に変更したとき、
コンソールログにメッセージを表示します。

if(saved.Status == 100 && model.Status == 900) {
  context.Log(`状況が「未着手」から「完了」に変更されました`);
}

・更新前
image.png

・更新後
image.png

上記のように値の変化を条件にサーバスクリプトを実行できるため、通知・ログ出力・自動更新などさまざまな用途で利用できます。

3.view

最後にviewオブジェクトについてご紹介します。
viewオブジェクトでは、ビューの指定やレコードのフィルタ・ソートなど、画面に表示されるレコードを柔軟に制御できます。

詳しくは下記公式マニュアルをご確認ください。
開発者向け機能:サーバスクリプト:view
https://pleasanter.org/ja/manual/server-script-view

viewオブジェクトの中でも特に便利なものがFilterメソッドです。
こちらのメソッドで、「レコード」をフィルタすることで、
ユーザに閲覧させるレコードを制限することができます。

プリザンターの標準機能にある「レコードのアクセス制御」でも同様に、ユーザに閲覧させるレコードを制限することができますが、
こちらは、レコードごとに権限を付与しているため、大量のレコードがある状態でアクセス制御を行うと、パフォーマンスの低下につながる恐れがあります。

そのため、レコードのフィルタを行う際には、「レコードのアクセス制御」ではなく、
view.Filtersでフィルタすることで、パフォーマンスの低下を抑えつつ表示レコードを絞れるため、大量データを扱う場合に特に有効です。

view.FiltersではAND条件とOR条件を組み合わせたフィルタ設定が可能になります。

開発者向け機能:サーバスクリプト:view.Filters
https://pleasanter.org/ja/manual/server-script-view-filters

下記の例では、ユーザIDが1のユーザで閲覧時に、
①「状況」が「100,未着手」かつ「分類A」が「みかん」のレコード
②「状況」が「200,実施中」かつ「分類A」が「ぶどう」のレコード
上記の条件のいずれかを満たすレコードをフィルタすることができます。

if(context.UserId == 1){
    let data1 = {};
    data1.Status = '["100"]';
    data1.ClassA = '["みかん"]';
    let data2 = {};
    data2.Status = '["200"]';
    data2.ClassA = '["ぶどう"]';
    let data = {};
    data.and_Filter1 = JSON.stringify(data1);
    data.and_Filter2 = JSON.stringify(data2);
    view.Filters.or_Filter = JSON.stringify(data);
}

・通常時
image.png

・IDが1のユーザで閲覧時
image.png

このようにサーバスクリプトでview.Filtersを使用することで、柔軟なフィルタ設定が可能になります。

注意点として、一覧画面上ではレコードの閲覧を制限できますが、
横断検索ではフィルタが効かず、検索結果リストにレコードが表示されるため、テーブルの管理の「検索」タブにて、横断検索を無効化することで防ぐことができます。

まとめ

本記事では、サーバスクリプトのうちcolumns / saved / viewの3つの便利なオブジェクトについて紹介しました。

これらを組み合わせて活用することで、プリザンターをさらに業務に適した形へ柔軟にカスタマイズできます。
「標準機能での実装が難しいな...」「もう少し細かい制御をしたいな...」と感じる場面では、ぜひサーバスクリプトでの実装をご検討ください。

また、プリザンターには、便利な拡張コンテンツや技術サポートを受けられる年間サポートサービスがございます。
上記のサーバスクリプトの活用方法など、お問合せいただければお答えすることも可能なため、ぜひご利用をご検討ください。

より活用するための年間サポートサービス|プリザンター

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?