条件通知の通知先担当者を変更【2021年1月アップデート機能】

初めまして、和田です。
2021年になり、新規APIが追加されました。
今回はアップデートで追加されたAPIの紹介と、こういうときに使えるよ!という内容を書いてみます。

新規APIの実装!

アップデートで新規APIが3件追加されました。
2021/01/10の定期メンテナンスにおける API 更新情報
・「アプリの条件通知」の設定を取得、更新できる API を追加
・「レコードの条件通知」の設定を取得、更新できる API を追加
・「リマインダーの条件通知」の設定を取得、更新できる API を追加

※このAPIは対象アプリの「アプリ管理権限」が必要となります。実行ユーザーの権限設定には注意しましょう。

では、APIを利用して、アプリの条件通知設定の取得と更新をやってみます。

担当者を変更してみる

今回は、アプリID、変更前と変更後のユーザーを指定できるアプリを作って、
kintoneアプリ上からボタンを押すだけで更新ができる
サンプルをご紹介します!
下の画像のような変更をやってみます。

まずはアプリとボタンを作成

更新するアプリID
対象となるユーザー
変更後のユーザー
を入力できるフィールドを用意したアプリを作成します。

詳細画面にボタンを作成します。
ボタンのonclickイベントに処理を追加していきます。
ボタンの作り方はこちらを参考にしてください → レコード詳細にもボタンを設置しよう!

条件通知設定を取得・更新

アプリIDを使って、新規追加されたAPIでアプリの条件通知設定を取得します。
取得したnotificationsをそのまま使用し、該当ユーザーが設定されている箇所のみを変更して更新APIを叩きます。
実際に動かしてみるソースはこちらです。

(function () {
  'use strict';
  kintone.events.on('app.record.detail.show', function (event) {

    // ボタンを用意
    var noticeSetUpdateButton = document.createElement('button');
    noticeSetUpdateButton.className = 'kintoneplugin-button-normal';
    noticeSetUpdateButton.innerText = 'アプリ条件通知更新';

    // クリックイベント
    noticeSetUpdateButton.onclick = function () {
      var flg = false;
      var path = '/k/v1/preview/app/notifications/general';
      var APP_ID = event.record['対象アプリID'].value;
      //条件通知設定を取得
      return kintone.api(kintone.api.url(path, true), 'GET', { 
        'app': APP_ID
      }).then(function (resp) {
        //オブジェクトをディープコピー
        var param = JSON.parse(JSON.stringify(resp));
        //更新対象のアプリIDを追加
        param.app = APP_ID;
        param.notifications = param.notifications.map(function (notification) {
          //前担当者が存在したら新担当者に変更する
          if (notification.entity.code === event.record['前担当者'].value[0].code) {
            flg = true;
            //今回はユーザーに更新するため、'USER'固定にしています。
            notification.entity = {
              'type': 'USER',
              'code': event.record['新担当者'].value[0].code
            };
          }
          return notification;
        });

        //対象があれば更新処理を実行
        return (flg) ? kintone.api(kintone.api.url(path, true), 'PUT', param) : Promise.resolve(null);

      }).then(function(resp) {
        if (resp) {
          alert('更新が完了しました。');
        } else {
          alert('更新対象がありませんでした');
        }
      }).catch(function (err) {
        alert('条件通知設定更新処理に失敗しました。');
      });
    }

    kintone.app.record.getHeaderMenuSpaceElement().appendChild(noticeSetUpdateButton);

    return event;
  });
})();

※今回はアプリの更新のみで、「アプリの設定の運用環境への反映」は行っておりません。
 反映するのであれば、この後に処理を追加してください。

動作させてみる

アプリID「84」のアプリの条件通知は井上課長になっているので、「加藤 次郎」に変更します。

用意したレコードの詳細画面から、ボタンを押して更新処理を実行してみます。

ボタンの動作、メッセージの表示は問題ありませんでした。
では、更新したアプリの条件通知設定を確認してみましょう!

問題なく変更することができました!

気をつけること

アプリの条件通知設定の仕様から、1人のユーザーに対して、設定は1つまでとなっているので、新担当者がユーザーの条件通知設定に既に存在しているとエラーが発生しますのでご注意ください。

関連記事

アプリ一覧に「レコードの最終更新日」列を追加【2021年1月アップデート機能】
kintone REST API レコード一括取得(/k/v1/records.json)のoffset上限が10,000に制限されてもなんとかしてみる(既存処理にも対応)
kintone REST APIの同時接続数に関するパラメータの利用を考える

同じカテゴリーの記事