プリザンターの通知機能は便利だからえらい。

本記事は Pleasanter(プリザンター) Advent Calendar 2021の8日目の記事です。

プリザンターは、ノーコードで素早く簡単に業務アプリが作成できるうえに、ローコードで強力に柔軟に機能を拡張することができるオープンソースの開発プラットフォームです。

プリザンターなら、マウス操作だけで業務アプリを作成し現場のスピード感で素早くシステムを業務にフィットさせることが可能です。さらに、僅かなコードを記述するだけでそのシステムをもっともっと便利に機能拡張することもできるのです。それがプリザンターの掲げる「小さく始めて、大きく広げる」という"やり方"のひとつでもあります。

プリザンター：
https://pleasanter.org/

以上、定型文。

## はじめに
今回の記事は、前回投稿した通知機能についての続編のようなものです。

プリザンターの通知機能が存在する世界に生きていてよかった。 - Qiita
https://qiita.com/pleasanter_oss/items/8216883ddd3822b8a2b0

先の記事でも触れた通り、プリザンターの通知機能はビューと組み合わせることで格段に利便性が高まります。
特定のユーザが更新した時だけ通知する、ファイルが添付された時だけ通知する、金額が特定の範囲の場合だけ通知する、などかなり柔軟な設定が可能です。

今回ご紹介するのは、あまり使う機会は無いかもしれないけど覚えておくといつか役に立つかもしれないささやかな小技です。

### 特定のレコードが更新された時だけ通知する
例えば、社内のナレッジを共有するテーブルがあったとして、個々のナレッジの更新は通知しなくて良いけど、ナレッジ登録用のテンプレートが更新された時は通知したい、といった場合に使えるかもしれません。そんなニッチなニーズがあるのだろうか、という疑問はお墓まで持って行きましょう。
そんな時は、ビューのフィルタ設定で検索欄に対象のレコードIDを入力し、そのビューを通知に適用すればOKです。

テーブルの管理：ビュー | Pleasanter
https://pleasanter.org/manual/table-management-view

![スクリーンショット 2021-12-08 10.16.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/834556/23e798cf-d449-7117-76d9-b698e6197e29.png)
![スクリーンショット 2021-12-08 10.21.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/834556/0c30cbd9-ecf2-87d0-b9e7-575da297eac6.png)

もちろん、タイトルなどで絞り込んでも良いのですが、同じ文字列を使う可能性もありますので、IDの方が無難でしょう。

### 更新時の通知はいらないけど、新規作成時と削除時は通知する
これも社内ナレッジの共有を例として考えると、ナレッジの細かな日々の更新(ナレッジがそんなに日々更新されるだろうか、という疑問はお墓まで持って行きましょう)は通知不要で、新規に登録された際と削除された際には通知したい。その際の通知には内容項目も含みたい、といった場合。
でも、監視項目に内容項目を含めるとなると、内容を更新するたびに通知が飛んでしまうし…

こんな感じで、どうだ！
![スクリーンショット 2021-12-08 10.35.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/834556/36e435cb-40ca-2b08-d5b9-f42e68df88fa.png)
実は未使用項目を監視項目にしても、新規作成時、削除時は通知されます。そして、カスタムデザインで指定する項目は、監視項目である必要はありません。
ですので、未使用項目を監視項目にして、カスタムデザインで通知したい項目を設定してあげれば、更新時の通知は無しで、新規作成、削除のタイミングでだけ通知するということができます。

### 集計結果が更新されたタイミングで通知する
例を、プロジェクト管理に変更します。
プロジェクトを管理するテーブルと工数を管理するテーブルがあるとします。工数管理(子)はプロジェクト管理(親)と紐付いており、日々の作業時間を工数管理に登録することで、プロジェクト管理には自動で工数合計がサマライズされ、計算式で進捗率が更新されるものとします。
実際的に、プリザンターでよく使われるスタンダードなアプリかなと思いますが、如何でしょう。まだエクセルでプロジェクトを管理しているよ、という方はプリザンターに乗り換えましょう！楽ができます。

さて、そんなプロジェクト管理アプリで進捗を管理するとなると、実際に日々更新されるのは工数管理テーブルになりますので、プロジェクト全体の進捗率を通知することができないわけです。
もちろん、工数管理に通知を設定すれば、今日は●●さんが○時間作業しました、という工数の通知は届くのですが、どうせなら全体の進捗率も知りたいですよね。

そんな時は、サーバスクリプトの出番です。
サーバスクリプトで通知を送る場合は、notificationsを使います。

開発者向け機能：サーバスクリプト：notifications | Pleasanter
https://pleasanter.org/manual/server-script-notifications

```
  let notification = notifications.New();
  let user = users.Get(model.Updator);
  notification.Address = "test@example.com";
  notification.Title = model.Title + ' の進捗率が更新されました';;
  notification.Body = "プロジェクトの進捗率が " + user.Name + " さんにより " + model.ProgressRate + "% に更新されました。\n";
  notification.Send();
```

いわゆるトリガーとなる条件は、「計算式の後」に設定してください。

model.Updatorで更新者を取得すると、ユーザIDが表示されてしまうので、usersオブジェクトから氏名を取得して表示しています。

開発者向け機能：サーバスクリプト：users | Pleasanter
https://pleasanter.org/manual/server-script-users

これで、工数管理への更新があると、プロジェクト管理の進捗率が計算されたタイミングで「プロジェクトの進捗率が 隼はやと さんにより 70% に更新されました。」といった通知が届くようになります。


##　おわりに
さて、今回は通知機能の、もしかするといつか役に立つかもしれないささやかな小技をご紹介しました。
プリザンターの通知は、標準機能だけでも十分に便利に使えるのですが、サーバスクリプトを使うことで、より複雑な要件を実現できる柔軟さが加わりました。
例えば、上述した新規作成時と削除時だけ通知するという小技も、サーバスクリプトを使うことで新規作成時だけ、作成時だけ、といったことも可能になります。そんなニーズがあるのだろうか？という疑問もわきますが、実はあるんです。
そんなニッチな要件にも対応できるプリザンターの柔軟な拡張性。ステキですね。
プリザンターでこんなことができればもっと便利なのに、と言ったことが実はサーバスクリプトで結構できちゃったりします。
よかったら是非使ってみて下さい。プリザンターで、もっとお仕事が楽になるかもしれません。

Pleasanter ユーザーマニュアル | サーバスクリプト
https://pleasanter.org/manual?category=2250

ちょっと疲れた時に、自分の業務日報をプリザンターに登録したタイミングで「今日もお仕事がんばれてえらい！」という自分宛ての通知を設定しようかと思ったことはお墓まで持っていきます。

それでは本日の記事はこれにて。最後までお読み頂きましてありがとうございました。