Webhookで関連レコードの集計をするカスタマイズ

kintoneの「関連レコード一覧」機能、便利ですよね! この機能を使うとあるレコードをもとに、そのレコードに関連するレコードの一覧を見ることが出来ます。

またCustomineのカスタマイズでは、この関連レコードを集計することが簡単に出来ます。例えば「関連レコード一覧を集計する」などを参考にしていただければと思います。

関連レコードの集計について、具体的には以下のように「セミナーアプリ」と「参加者アプリ」があり、セミナーアプリ側から、その参加者一覧として関連レコードを表示しているようなケースの場合、

セミナーアプリに対するカスタマイズで、セミナーの情報を更新した際に「申込数」などのフィールドを集計することが出来ます。

これらの集計は便利なのですが、あくまで「セミナーアプリ」側を起点として動くため、もし関連レコード一覧で設定した「参照するアプリ」側のレコードが更新された場合(ここでは参加者アプリ)には、これらの集計が実行できないという問題があります。 

そこでこのカスタマイズでは、「参照するアプリ」側のレコードが更新された場合における関連レコードの集計を、Webhookを利用して実現してみます。


まずはじめにやること

まず、Job RunnerでkintoneのWebhookや定期実行タスクのカスタマイズを作成する前には「ジョブへのスロット割り当てについて」を実施する必要があります。

(既に割り当て済みの方は不要です)

これは、利用中のアプリスロットをどの程度Job Runnerで利用できるようにするか、という設定になります。

詳しくは Job Runnerを利用するとき、初めにすること : ジョブへのスロット割り当てについて をご確認ください。

カスタマイズの種類について

gusuku Customine で作成できるカスタマイズには、以下の種類があります。

  • kintoneアプリのカスタマイズ : ユーザーの画面操作に連動した処理

  • kintoneアプリのWebhook : kintone の Webhook に連動して実行する処理

  • 定期実行タスク : 毎日xx時、1時間おき など定期的に実行する処理

こちらの記事では、kintoneアプリのWebhook のカスタマイズを作成します。

今回作成するWebhookカスタマイズの概要

今回作成するカスタマイズは、次のような流れで処理を行います。

  • 「参加者アプリ」にレコードが追加(更新)された時のWebhookにより、起動

  • 上記レコードをもとに、「参加者アプリ」から同じセミナーに参加する参加者すべてを取得

  • 各種集計を実行

  • 「セミナーアプリ」の、申込みがあったセミナーのレコードを更新

それでは進めていきましょう。

今回のカスタマイズで用いるアプリの概要

今回、カスタマイズで用いるアプリは2つ(参加者アプリ、セミナーアプリ)あります。それぞれ準備します。

「参加者アプリ」は次のような形になり、2つのアンケート項目(「役職」と「kintoneの導入状況について」)があります。今回のカスタマイズではこれらの項目を集計してみます。

フィールドの詳細

フィールド名・フィールドコード

(※同一のものを設定)

フィールドタイプ

氏名

文字列(1行)

メールアドレス

文字列(1行)

参加セミナー

文字列(1行)

役職

ラジオボタン

kintoneの導入状況について

ラジオボタン



もう1つの「セミナーアプリ」は次のようになっており、集計結果を反映するものです。


フィールド名・フィールドコード

(※同一のものを設定)

フィールドタイプ

開催日

日付

タイトル

文字列(1行) ※値の重複を禁止する

定員

文字列(1行)

申込数

文字列(1行)

残数

計算 ※式は 定員-申込数

役職分布

数値

経営者

数値

部課長

数値

一般

数値

導入状況_平均導入UU数概算

数値

関連レコード一覧

関連レコード一覧


「参加者アプリ」のフィールド「参加セミナー」と「セミナーアプリ」のフィールド「タイトル」は同じ値がはいるものです。

それぞれに同じ値を入れるようにして、テストデータを予めそれぞれのアプリに設定しておきましょう。

APIトークンの設定

アプリのフォームを作成した後は、各アプリにAPIトークンを設定しておきます。

「参加者アプリ」からはレコードを読み込むだけなのでアクセス権「レコード閲覧」を、「セミナーアプリ」には集計結果を書き込むのでアクセス権「レコード閲覧」と「レコード編集」を、それぞれ設定しておきます。


APIトークンについては、以下の点に注意してください。

  • APIトークンに付与する権限はよく検討し、必要最小限の権限を付与するよう心がけてください。

  • 生成したAPIトークンは取扱に注意し、第三者に知られないようにしてください。



Webhookの作成

ここまでで設定した2つのアプリを使い、ここからはkintoneアプリのWebhookカスタマイズを作成していきます。

まず、新規のカスタマイズ作成から「kintoneアプリのWebhook」を選択します。

続いて、どのアプリ用のWebhookを作成するかを選択します。ここでは「参加者アプリ」のWebhookとして作成しますので、「参加者アプリ」を選択して作成を開始します。

まずは「kintone接続設定」

初期状態では、「kintone 接続設定を行う」と「Webhook を開始した時」という条件がセットされています。

これはWebhookカスタマイズでの定番のパターンが予めセットされており、kintoneアプリに接続しレコードを取得したり更新するためには必ずAPIトークンの設定が必要です。

今回は2個のアプリを操作しますので、接続設定を2つ設定しています。


次に「Webhook から渡されたレコードを取得する」

ここでは「Webhook から渡されたレコードを取得する」を使用し、Webhookが実行されたアプリのレコードを取得しています。

このレコードの中身を使って、各アプリからレコードを取得し、それをもとに集計を実行していきます。

集計・更新するためのレコードを取得

ここではWebhookで申込があったセミナーと、同じセミナーに申し込んでいる参加者の一覧を取得します。

レコードを取得する方法はいくつかありますが、今回は「キーを指定してレコードを取得する」を使っています。 この時注意すべき点は、取得元アプリと、APIトークンの対応を間違えないことです。はじめに「kintone接続設定」でkintoneアプリとAPIトークンを対応させて設定していますが、ここを間違えないようにしてください。

4番のアクションでは、やること「キーを指定してレコードを取得する」で「参加者アプリ」から同じセミナーに参加した参加者のレコードを取得しています。

また、5番のアクションでは、やること「キーを指定してレコードを取得する」で申し込まれたセミナーの集計結果を書き込むために、「セミナーアプリ」の対象となるレコードを取得しています。こちらは1行だけ更新するので、「最大取得件数」のパラメーターを1に設定しています。

ここで注目すべき点は、4番の条件「レコード1行が準備できた時」、5番の条件「レコード全行が準備できた時」です。

Job Runnerでは大量のレコードを順次処理できるよう、レコードを取得したときに実行するための「条件」として次の2つが用意されています。


条件「レコード1行が準備できた時」は、順次1つずつレコードを処理するためのもので、条件「レコード全行が準備できた時」は、対象となるレコードをすべて取得してから「やること」を実行し、処理するためのものです。 

この2つの使い分けとしては、基本的には「レコード1行が準備できた時」を用います。また今回のアクション5のケースのようにレコード全体の集計を行いたい場合は、「レコード全行が準備できた時」を用います。

また「レコード全行が準備できた時」は、数十〜数百行単位のレコードであれば特に問題はありませんが、例えば数万件あるレコードに対して実行してしまうと、時間(=コスト)が非常にかかってしまいますが、結局メモリ不足などでエラーになり、ジョブが実行出来ないケースがありますので、気をつけてください。

今回は、Webhookから渡されたレコードの内容を用いるために「レコード1行が準備できた時」を、また参加者全体の集計を行うために「レコード全行が準備できた時」を用いています。


レコードの集計

取得したレコードを集計する「やること」もいろいろあります。 ここでは「レコード行数をカウントする」と「レコード中の条件に合う行数をカウントする」を使います。

アクションの7番から9番までは、アンケートで各項目の選択内容をカウントするために、「レコード中の条件に合う行数をカウントする」を使用しており、「役職」フィールドの各項目ごとに、集計の条件を変えたものをいくつも追加しています。
集計している項目ごとにアクションを設定しているためアクション数は多いですが、「やること」の「比較値」の設定値が異なる点を除くと、内容はほぼ同じです。

アクションの10番から12番も「レコード中の条件に合う行数をカウントする」を使用し、「kintoneの導入状況について」フィールドの各項目ごとに、集計の条件を変えたものをいくつも追加しています。

ここまでで集計は完了しましたので、あとはこれをレコードにセットしましょう。

集計結果をフィールドにセット

このようにいろいろな値を集計して、複数の値を一気にレコードの色々なフィールドに反映したいときには、「フィールド値をまとめてセットする」を利用すると1アクションで実現でき、便利です。

まず「役職分布」のグループですが、ここでは各役職を%で集計するフォームになっていますので、「選択された件数 ÷ 申込数 × 100」で割合を計算し、反映しています。 具体的には以下のような式を書いています。

= $7 / $6 * 100

一方、「導入状況_平均導入UU数概算」の集計では、「(選択された項目 × 人数) ÷ 申込数」という計算をしています。おおまかな計算ですが、各参加者のおおよその導入ユーザー数が計算されていることになります。

設定は以上で完成です。kintoneに登録して、実際に実行してみましょう。

レコードの保存は?

フィールドに値をセットしただけで、保存されないのではないか?と思われるかもしれませんが、ご安心ください。保存は自動で実行されます。

kintoneから取得してなにか値がセットされたレコードは、ジョブの最後にまとめて保存される動きとなっているため、 基本的にはレコードの保存を自分で考慮する必要はありません。


Webhook を kintoneアプリに登録

作成したカスタマイズを実行するには、画面上部の黄色い「ジョブ生成・設定」ボタンをクリックしてください。ジョブが生成され、ダイアログが開きます。こちらの詳しい使い方についてはこちらのページをご確認ください。

すると、次のジョブ設定ダイアログが表示されます。

ここで表示されているURLを、kintoneアプリの設定の中にある、Webhookに登録します。(ジョブ設定画面下部の「kintoneのWebhook設定画面へ」から次の画面を表示することができます。)

「+追加する」をクリックし、Webhookを追加しましょう。

すると、次の様な画面が表示されます。

Webhook URLに先ほどのURLを設定するのに併せて、今回は参加者アプリにレコードが追加されたときにこのWebhookを実行したいので、「通知を送信する条件」として「レコードの追加」を選択しておいてください。

この設定を保存して、kintoneの「アプリの設定」画面で「アプリを更新」した後、このアプリにレコードを追加してみましょう。

その後、Customineのジョブ設定ダイアログの「実行履歴」ボタンをクリックして実行履歴を表示すると、ここまでの設定が正しければ、次のように実行履歴が表示されるはずです。
※なお、すでにこの画面を表示していた場合は、左上のリロードボタンで履歴の更新をすると、表示されます。

こちらの実行履歴に上がってこない場合、エラーになっている可能性がありますので、kintone側のWebhookログをご確認ください。

まとめ

この記事でWebhookを起点として、簡単にkintoneのレコードを集計できることを、ご確認いただけたかと思います。


Job Runnerでのレコードの更新は簡単に出来る反面、思いもよらない大量のレコードを、意図しない内容で更新したりすることもできてしまいます。

このため、 カスタマイズ作成の際には、テストアプリとテストデータでよくテストして頂いたり、Job Runnerテスト実行でテスト実行し動きを確かめた上で、実際のアプリに適用していくことをおすすめします。


また、Job Runnerテスト実行については次の記事が参考になります。併せてご覧ください。

Job Runnerテスト実行の使い方 : gusuku support

また、実際にご不明な点などございましたら、お気軽にチャットでご質問ください。