初めて相談いたします。
下のような集計アプリがあります。
ここでは「データ」「データ2」のアプリから関連レコードで集計したい数字を表示しています。
「データ」からは"数値"と"金額"、「データ2」からは"数値"の合計値を表示すべく、jsカスタマイズしたフィールドを作成しました(“数値合計”・“金額合計”)。
ただ、関連元の「データ」「データ2」のアプリの数字を変えた場合、自動的には集計アプリに反映されず、1レコードずつ編集と保存を繰り返さなければなりません。
そこで、下図のさらに下のjsを作成し、一覧画面からボタンによって、関連レコード「データ」の"数値合計"のみは一括更新できるようになりました。しかしながら、いろいろ試しましたが、どうやっても"金額合計"や「データ2」の集計を同時に更新することができません。(ここで挫折を繰り返しております)
質問は2件です
■質問1
ひとつの関連レコードから吐き出した2種類の数値合計を一度のボタン操作で更新する方法(この場合「データ」の"数値合計"と"金額合計")
■質問2
二つの関連レコードから吐き出したそれぞれの数値合計を一度のボタン操作で更新する方法(「データ」「データ2」の合計フィールド)
質問を二つに分ける意味はないかなとも思いましたが、後学のため2件に分けてお聞きしました。
どうぞよろしくお願いいたします。
(function() {
"use strict";
var getRecords = function(app, tmpRecords){
var limit = 500;
var tmpRecords = tmpRecords || [];
return kintone.api(kintone.api.url('/k/v1/records', true), 'GET', {
app: app,
query: 'limit ' + limit +' offset ' + tmpRecords.length
}).then(function(response){
tmpRecords = tmpRecords.concat(response.records);
return response.records.length === limit ? getRecords(app, tmpRecords) : tmpRecords;
});
}
var putRecords = function(app, records){
var limit = 100;
return Promise.all(
records.reduce(function(recordsBlocks, record){
if(recordsBlocks[recordsBlocks.length - 1].length === limit){
recordsBlocks.push([record]);
}else{
recordsBlocks[recordsBlocks.length - 1].push(record);
}
return recordsBlocks;
}, [[]]).map(function(recordsBlock){
return kintone.api(kintone.api.url('/k/v1/records', true), 'PUT', {
app: app,
records: recordsBlock
});
})
);
}
kintone.events.on('app.record.index.show', function(event){
if(document.getElementById('updateButton') !== null) return;
var button = document.createElement('button');
button.innerHTML = '一括更新';
button.id = 'updateButton';
kintone.app.getHeaderMenuSpaceElement().appendChild(button);
button.addEventListener('click', function(){
Promise.all([
getRecords(kintone.app.getId()),
RelatedRecordsFieldManager.prototype.getFieldProperties()
]).then(function(responses){
return Promise.all(responses[0].map(function(selfRecord){
return (new RelatedRecordsFieldManager('データ')).getRecords(selfRecord).then(function(relatedRecords){
return {
id: selfRecord.レコード番号.value,
record: {
数値合計: {
value: relatedRecords.reduce(function(sum, relatedRecord){
return sum + Number(relatedRecord.数値.value);
}, 0)
}
}
};
});
}));
}).then(function(records){
putRecords(kintone.app.getId(), records).then(function(){
alert('更新しました。');
location.reload();
});
});
});
return event;
});
})();