Job Runnerを使うと、一定の単位でレコードを集計し、別アプリに追加更新する といった処理が実現できます。
この記事では具体的な例として、月毎の売上集計を別アプリに作成する処理についてお伝えします。
具体的には『売上』アプリのレコードについて、『勘定月』フィールド別に合計金額を集計し、『月別売上合計』アプリに勘定月ごとのレコードを作成する処理を例にとります。
次の画像は、『売上』アプリのレコードです。勘定月が「202209」と「202210」のレコードが存在しています。
そして、次の画像のように勘定月ごとの集計を行うカスタマイズを実現します。
kintoneアプリの設定
注:この記事で用いるアプリは、カスタマインの歩き方 カスタマイズお試し用ファイルダウンロード の Job Runner 編にアプリテンプレート、サンプルデータがありますので、そちらをご利用いただく事もできます。
はじめから自分でアプリを作成したい場合は次に記載するようにアプリを作成してください。
『売上』アプリ
※フィールドコードとフィールド名は同じものを指定してください
※今回のカスタマイズに必要なフィールドのみ記載しています
また、kintoneアプリのAPIトークンを次の様に設定してください。
※「レコード閲覧」設定のみ
『月別売上合計』アプリ
※フィールドコードとフィールド名は同じものを指定してください
また、kintoneアプリのAPIトークンを次の様に設定してください。
※「レコード閲覧」、「レコード追加」、「レコード編集」を設定
カスタマイズの全体像
カスタマイズの全体像は次のようになります。
それぞれのアクションでのカスタマイズについて
Job Runner のカスタマイズは、このアクションで扱っているレコードはどのレコードなのかを意識して作成する必要があります。
ここからは、アクションごとにどのレコードを扱っているのかを図示してご紹介します。
接続設定
まず、やること「kintone 接続設定を行う」、条件は「実行予定時刻になった時」「他のアクションの実行が完了した時」を用い、集計元となるレコードを持つ『売上』アプリと、集計後の値を保存するための『月別売上合計』アプリに接続します。
レコード取得と重複除去
次に、『売上』アプリから全レコードを取得します。今回の処理は勘定月ごとの合計金額を集計したいので、集計の軸となるのは『勘定月』フィールドです。ただし、kintone に登録されたレコードは以下のように同じ勘定月のレコードが複数存在します。
そのため、上記のレコードを以下のように勘定月ごとに1件ずつになるように加工する必要があります。
今回のように特定のフィールドを集計軸として集計のカスタマイズを作成する際によく使う方法として、下記のような方法があります。
1. 集計対象となるレコードを取得する
2. 1で取得したレコードを、集計軸となるフィールドで重複を除去する
3. 2で重複がなくなった値ごとに集計を行う
このようなカスタマイズをすることで、集計対象となるレコードの中から必要な集計軸を自動的に抽出して集計できます。
実際のカスタマイズでは、やること「全レコードを取得する」で『売上』アプリのレコードを取得し、やること「レコードから重複を除去する」で、集計軸としたい『勘定月』フィールドを「キーとなるフィールド」に指定して重複を除去します。
このとき指定する「条件」は 条件「レコード全行が準備できた時」です。やること「レコードから重複を除去する」は、全レコードの中に存在する『勘定月』から重複を除去したいので、この条件を使用します。
集計を行う
集計軸となる『勘定月』を重複のない状態で取得できたら、集計を行っていきます。
アクション5の「やること」はやること「レコード内の条件に合う行のフィールド合計値を計算する」、「条件」は条件「レコード1行が準備できた時」です。条件「レコード1行が準備できた時」のパラメーター「レコード取得アクション」に「4」を指定し、アクション 4 で重複を除去した『勘定月』ごとの処理を行う事ができます。アクション 5 は、アクション 4 で取得した『勘定月』の数だけ並列で実行されるため、今回の例では「202210」と「202209」の 2 回実行されます。
やること「レコード内の条件に合う行のフィールド合計値を計算する」の設定についても見ていきます。やること「レコード内の条件に合う行のフィールド合計値を計算する」のパラメーター「レコード」には「3」を指定していますので、集計対象となるレコードはアクション 3 で指定した『売上』アプリの全レコードが対象となります。
Job Runner の処理では、条件「レコード全行が準備できた時」 や 条件「レコード1行が準備できた時」で繋がった、前のアクションで取得したレコードを後のアクションで利用できます。今回の例では、アクション 3 の取得結果をアクション 4 で条件「レコード全行が準備できた時」で繋げているため、アクション4以降のアクション5、アクション7からは、レコードを選択するパラメーターでアクション 3 を選択すると、アクション 3 で取得した『売上』アプリの全レコードを使用できます。
下記の例では、アクション 5 の集計対象となるレコードに「3」を指定することで、「 アクション 3 で取得されたレコード内で、「条件」と一致するレコードを集計対象にする 」 ことができます。
やること「レコード内の条件に合う行のフィールド合計値を計算する」のパラメーターについても見ていきます。
同じフィールド名、フィールドコードなので分かりづらいですが、「条件判定フィールド」に指定しているフィールドは、アクション 3 のレコード内のフィールド『勘定月』、「比較値」に指定しているのはアクション 4 で重複を除去した結果得られた『勘定月』(つまり、「202210」と「202209」)です。
アクション 5 は、アクション 5 の「条件」が条件「レコード1行が準備できた時」、「レコード取得アクション」が「4」なので、アクション 4 の結果として得られる「202210」と「202209」の値2つ分、つまり 2 回実行されます。
kintone アプリのカスタマイズ(画面のカスタマイズ)ですと、他のアクションの結果をパラメーターに指定する場合、「= $1.フィールドコード」のような記述が基本的に必要となりますが、Job Runner の場合は 条件「レコード1行が準備できた時」が指定されたアクション以降では、条件「レコード1行が準備できた時」 のパラメーター「レコード取得アクション」で指定したレコード内のフィールドについて、「= フィールドコード」のようなアクション番号なし、フィールドコードのみでの指定が可能です。
最後に反映する
最後に、集計した結果を『月別売上合計』アプリに反映します。今回は、『月別売上合計』アプリにレコードがなければレコード追加、あれば更新を行います。レコードがある・ないの判断は、『月別売上合計』アプリの『勘定月』フィールドの値で判断します。
アクション 7 の「条件」は条件「他のアクションの実行が完了した時」です。アクション 5 はレコードを取得する「やること」ではないので、アクション 5 の次に実行したいアクションの「条件」は条件「他のアクションの実行が完了した時」 で問題ありません。アクション 7 はアクション 5 に続いて実行されますので、アクション 5 と同様に、今回は「202210」と「202209」の 2 回実行されます。
以上のカスタマイズを実行すると、『売上』アプリの全レコードを『勘定月』フィールドを集計軸に集計した結果を、『月別売上合計』アプリに追加・更新できます。
条件「レコード1行が準備できた時」と条件「レコード全行が準備できた時」の二つの「条件」の動きを理解し、” このアクションではどのレコードを扱っているか ” を意識しながらカスタマイズを行ってください。
【参考】日付やフィールドの値ごとの集計を行う別の方法
日付やフィールドごとの集計を行う方法として、やること「レコードをフィールド値毎に束ねる」と やること「レコードを日付毎に束ねる」があります。これらの「やること」を使用すれば、前述したようなフィールド値によって集計する処理のほか、日付フィールドの値を月単位・週単位などで集計するといった様々な単位での集計を比較的簡単に行う事ができますので、こちらの方法もお試しください。
なおこのカスタマイズを試される場合も、アプリの設定については上の「kintoneアプリの設定」に記載したものをお使いください。
おわりに
この記事では具体的な例として、月毎の売上集計を別アプリに作成する処理についてお伝えしました。勘定月ごとのレコード作成・更新ができることをご確認いただけたかと思います。
レコードの更新は簡単にできる分、思いもよらない大量のレコードを、意図しない内容で更新したりすることもできてしまうものです。
実際にカスタマイズを作成される際には、Job Runnerテスト実行 を使ってテストするか、テストアプリとテストデータでよくテストを行った上で、実際のアプリ・運用に適用していくことをおすすめします。
ご不明な点がございましたら、チャットでお問い合わせください。