関連レコードに合計を表示したい
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;
});
});
})();
参考サイト

関連レコードの項目を条件付きで集計
kintoneの関連レコードの項目を条件付きで集計するカスタマイズを紹介します。
https://fastsystem.funai.site/relatedrecords-sum/
kintoneのカスタマイズ。関連レコードのデータを集計・計算する。 | 株式会社ゴートップ
株式会社ゴートップは、一世紀超にわたり印刷技術をベースに、宣伝・販売活動を支える各種イベント・空間デザインのための「企画・開発・制作」から「販売促進システム・データベース構築」などビジネスサポートに至るまでトータルにプロデュース致します。
