「ID」「数量」「累計数量」のフィールドがあります。
IDが同一のレコードの数量を合計して累計数量に表示させたいです。
下記を投入しましたが、IDが同一の100レコード分の累計は計算してくれますが、
それ以上のレコード分は合計してくれないようです。
全てのレコードの累計をすることは可能でしょうか。
(function() {
'use strict';
// 一覧画面が表示されたときのイベント
kintone.events.on('app.record.index.show', function(event) {
// 一覧ビューでなければ終了
if (event.viewType !== 'list') return event;
// 既にボタンが追加されているか確認
if (document.getElementById('admin-action-button')) return event;
// ボタンの作成
var myButton = document.createElement('button');
myButton.id = 'admin-action-button';
myButton.innerHTML = '累計数量を再計算';
myButton.className = 'kintoneplugin-button-normal';
// ボタンをkintoneのヘッダー部分に追加
kintone.app.getHeaderMenuSpaceElement().appendChild(myButton);
// ボタンがクリックされたときの処理
myButton.onclick = function() {
// 全てのレコードを取得
var query = ''; // 全レコードを取得するクエリ
var appID = kintone.app.getId();
kintone.api(kintone.api.url('/k/v1/records', true), 'GET', {
app: appID,
query: query
}).then(function(resp) {
var records = resp.records;
var updatePromises = [];
// 各レコードの累計数量を再計算
records.forEach(function(record) {
var currentID = record['ID'].value;
var queryForID = 'ID = "' + currentID + '"';
// 同じIDを持つレコードを取得し、数量を合計
var promise = kintone.api(kintone.api.url('/k/v1/records', true), 'GET', {
app: appID,
query: queryForID
}).then(function(response) {
var totalQuantity = 0;
response.records.forEach(function(rec) {
totalQuantity += parseFloat(rec['数量'].value);
});
// 累計数量フィールドを更新するためにレコードを再設定
return kintone.api(kintone.api.url('/k/v1/record', true), 'PUT', {
app: appID,
id: record.$id.value, // 現在のレコードIDで更新
record: {
'累計数量': {
value: totalQuantity.toString()
}
}
});
});
updatePromises.push(promise);
});
// 全てのレコードが更新されるのを待つ
return Promise.all(updatePromises);
}).then(function() {
console.log('All records updated successfully');
alert('全ての累計数量が再計算されました');
}).catch(function(error) {
console.error('Error:', error);
alert('エラーが発生しました');
});
};
return event;
});
})();