【簡単】queryを書かずに関連レコードを取得&集計と関連レコードの件数取得や集計を保存時(.submit)ではなく表示時(.show)で行いたいを参考に、同一アプリ内にて、関連レコードの契約数を年間・上半期・下半期ごとに集計し、APIで即時反映するところまでの動作確認ができました。
現状の問題点としては、2020年に作成したレコードを編集した際にも集計条件として「2021」を設定しているため、2021年の集計値が入ってしまうことです。
・実現したいこと⇒作成した年に合わせた集計値のみが反映されるようにしたい
動作はしていますが、作成したスクリプトを十分に理解はできていないため、どこにどのような条件を入れ込めばいいのかを教えていただけませんか?
(function () {
"use strict";
kintone.events.on([
'app.record.create.submit',
'app.record.edit.submit'
], function(event){
RelatedRecordsFieldManager.prototype.getFieldProperties().then(function(){
(new RelatedRecordsFieldManager('履歴')).getRecords(event.record).then(function(records){
var year = '2021';
var amount_total = records.filter(function(record){
return record.年.value === year;}).reduce(function(sum, record){
return sum + Number(record.契約数.value);
}, 0);
var amount_firsthalf = records.filter(function(record){
return record.年.value === year && record.月.value <= 6;}).reduce(function(sum, record){
return sum + Number(record.契約数.value);
}, 0);
var amount_secondhalf = records.filter(function(record){
return record.年.value === year && record.月.value >= 7;}).reduce(function(sum, record){
return sum + Number(record.契約数.value);
}, 0);
kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', {
app: kintone.app.getId(),
id: kintone.app.record.getId(),
record: {
集計_年間: {
value: amount_total
},
集計_上半期: {
value: amount_firsthalf
},
集計_下半期: {
value: amount_secondhalf
}
}
}).then(function(){
alert('更新します!');
location.reload();
});
});
});
});
})();
フィールドのイメージも添付します。
レコードは月ごとに作成し、テーブルと契約数を受注の度に追記・修正しています。
具体的な記述の仕方をご提示いただけると幸いです。
よろしくお願いいたします。
4件のコメント
こんにちは!
アプリのレコードに、集計年のフィールドを用意して、
いまコード内の、'2021'と固定で書いているところを「event.record.集計年.value」に変更するのはいかがでしょうか!?
juridon様、コメントありがとうございます!
なるほど、確かに!恥ずかしながら思いつきもしなかったので、目から鱗です…。
ありがとうございます。助かりました。
ちなみに感覚的にはそうなのかなと踏んでいるのですが、
このスクリプトの場合だと、関連レコードに表示されているもの+自レコードが総計として、
計算されているという認識で合ってますでしょうか?
よかったです!
>>関連レコード+自レコード
RelatedRecordsFieldManager がよくわからないのですが
https://developer.cybozu.io/hc/ja/community/posts/360017851006
こちらを眺めた感じだと自レコードは除いていない?みたいなので、おそらく関連レコード+自レコード分なのかな・・・と思います!
(間違っていたらスミマセン💦)
juridon様
ご丁寧にありがとうございます!