関連レコードに合計を表示したい
Kintone(キントーン)で請求書や勤怠管理などで、明細を関連レコード一覧で表示するアプリを作成したのですが、金額や時間の合計を登録できたらな~と検索してみたら方法がありましたのでメモ。アプリにJavascriptを登録したら正常に動きました。
関連レコード一覧を表示するアプリに「数値」パーツで作った「合計」というフィールドに、レコード保存時に計算された値が表示され、保存できました。しかし、最初のレコード保存では表示されず、2回目の保存のタイミングで表示されるので、改善の余地ありです。
ソース1
AAA1、AAA2、BBB、CCC、DDDをそれぞれアプリで使用している項目のフィールドコードに置換て使用します。フィールドコードは英数に限らず日本語でも大丈夫です。
(function() { kintone.events.on(['app.record.edit.show','app.record.create.change.AAA2'], function(event) { const appId = kintone.app.getRelatedRecordsTargetAppId("BBB"); const query = 'AAA1="' + event.record['AAA2'].value + '"'; const body = { 'app' : appId, 'query' : query }; kintone.api(kintone.api.url('/k/v1/records', true), 'GET', body, function(resp) { var sum = 0; resp.records.forEach((record)=>{ sum += record['CCC'].value ? parseInt(record['CCC'].value) : 0; }); event.record['DDD'].value = sum; kintone.app.record.set(event); }); return event; }); })();
設定するフィールドコードの説明
例えば、リレーションの関係が請求書アプリと請求書明細アプリだったとしたら、以下のようになります。
- AAA1
- 「関連レコード一覧」の設定で「表示するレコードの条件」に設定している主キーとなるフィールドコード(関連レコード一覧を呼び出すアプリ側のフィールドコード)。
- (例)請求書アプリ側の請求書ID(レコードID)
- AAA2
- 「関連レコード一覧」の設定で「表示するレコードの条件」に設定している外部キーとなるフィールドコード(関連レコード一覧に呼び出されるアプリ側のフィールドコード)。
- (例)請求書明細アプリ側の請求書ID
- BBB
- 「関連レコード一覧」パーツに設定したフィールドコード(関連レコード一覧を呼び出すアプリ側のフィールドコード)。
(例)請求書アプリ側の明細を表示する「関連レコード一覧」パーツのフィールドコード
- CCC
- 関連レコード一覧に呼び出されるアプリ側にある集計対象のフィールドコード。
(例)請求書明細アプリ側の「金額」フィールド
- DDD
- 集計結果を表示したいパーツのフィールドコード(関連レコード一覧を呼び出すアプリ側のフィールドコード)。
(例)請求書アプリ側の「合計」フィールドコード
ソース2
以下のソースでも動作しました。こちらの方がわかりやすいかもしれません。
(() => { 'use strict'; const events = [ 'app.record.detail.show', 'app.record.edit.show' ]; kintone.events.on(events, (event) => { const clientRecordId = event.recordId; const relatedAppId = kintone.app.getRelatedRecordsTargetAppId('請求明細一覧'); const query = '請求書ID="' + event.record['請求書ID'].value + '"'; // const query = `"${clientRecordId}"=請求書ID`; //レコードIDを使用する場合 const outputFields = ['金額']; const appUrl = kintone.api.url('/k/v1/records'); const params = { 'app': relatedAppId, 'query': query, 'fields': outputFields }; kintone.api(appUrl, 'GET', params, (resp) => { let amount = 0; for (let i = 0; i < resp.records.length; i++) { //amount += parseFloat(resp.records[i].金額.value); amount += parseFloat(resp.records[i].金額.value) ? parseFloat(resp.records[i].金額.value) : 0; } event.record['合計'].value = amount; kintone.app.record.set(event); return event; }); }); })();
参考サイト
関連レコードの項目を条件付きで集計
関連レコードの項目を条件付きで集計するカスタマイズを紹介します。
関連レコード一覧の数字を計算させる方法~ JavaScriptカスタマイズ~ | 船井総研 kintone導入・運用コンサルティング
kintoneの代表的な機能の一つに”関連レコード一覧”があります。 この機能を活用することで簡単に複数のアプ
kintoneのカスタマイズ。関連レコードのデータを集計・計算する。 | 株式会社ゴートップ
株式会社ゴートップは、一世紀超にわたり印刷技術をベースに、宣伝・販売活動を支える各種イベント・空間デザインのための「企画・開発・制作」から「販売促進システム・データベース構築」などビジネスサポートに至るまでトータルにプロデュース致します。