一覧画面で「得意先idセット」ボタンを作成しています。
そのボタンをクリックすると【得意先id】フィールドに【得意先コード】【得意先枝番】を結合した値がセットされ更新する処理です。
例)【得意先コード】15001【得意先枝番】03
【得意先id】1500103
データ数が6000件近くあるので一括で更新をしたいのですが、
ボタンをクリックしても1000件ほどしか更新されず、残りは値がセットされません。
コンソール画面でブレイクしながら処理をみてもデータ数分しっかりとデータ更新の処理をループしていました。
最近javascript をやり始めたばかりの初心者でして
どなたか分かる方がいらしたらご教授いただければ幸いです。
何卒宜しくお願い致します。
(() => {
'use strict';
/**
* kintoneと通信を行うクラス
*/
var KintoneRecordManager = (function() {
KintoneRecordManager.prototype.records = []; // 取得したレコード
KintoneRecordManager.prototype.appId = null; // アプリID
KintoneRecordManager.prototype.query = ''; // 検索クエリ
KintoneRecordManager.prototype.limit = 100; // 一回あたりの最大取得件数
KintoneRecordManager.prototype.offset = 0; // オフセット
function KintoneRecordManager() {
this.appId = kintone.app.getId();
this.records = [];
}
// すべてのレコード取得する
KintoneRecordManager.prototype.getRecords = function(callback) {
kintone.api(
kintone.api.url('/k/v1/records', true),
'GET',
{
app: this.appId,
query: this.query + (' limit ' + this.limit + ' offset ' + this.offset),
fields:['レコード番号','得意先コード','得意先枝番']
},
(function(_this) {
return function(res) {
var len;
Array.prototype.push.apply(_this.records, res.records);
len = res.records.length;
_this.offset += len;
if (len < _this.limit) { // まだレコードがあるか?
_this.ready = true;
if (callback !== null) {
callback(_this.records); // レコード取得後のcallback
}
} else {
_this.getRecords(callback); // 自分自身をコール
}
};
})(this)
);
};
return KintoneRecordManager;
})();
//レコード一覧画面
kintone.events.on('app.record.index.show', (event) => {
//増殖バグを防ぐ
if (document.getElementById('my_index_clientId') !== null) {
return;
}
//ボタン要素の作成
const myIndexButton3 = document.createElement('button');
//ボタンのid
myIndexButton3.id = 'my_index_clientId';
//ボタンに表示される名前
myIndexButton3.innerText = '得意先idセット';
//ボタンのCSS
myIndexButton3.style.backgroundColor = 'rgb(255, 171, 0)';
myIndexButton3.style.borderRadius = '5px';
myIndexButton3.style.padding = '10px 15px';
myIndexButton3.style.fontWeight = 'bold';
myIndexButton3.style.marginLeft = '10px';
//マウスホバー処理
myIndexButton3.addEventListener('mouseover' , () => {
myIndexButton3.style.backgroundColor = 'rgb(255, 241,187 )';
},false);
myIndexButton3.addEventListener('mouseleave' , () => {
myIndexButton3.style.backgroundColor = 'rgb(255, 171, 0)';
},false);
//ボタンクリック時の処理
myIndexButton3.onclick = () => {
const message = confirm('得意先idに値をセットします。よろしいですか。');
if (message) {
var manager = new KintoneRecordManager();
manager.getRecords(function(records) {
// レコード取得後の処理
console.log(records);
// 取得したレコードを更新する
var body = {
"app": manager.appId,
"records": []
};
var record = {};
var recordArr = [];
for (var i = 0; i < records.length; i++) {
record[i] = {
"id": records[i]['レコード番号'].value,
"record": {
'得意先id': {
value:records[i]['得意先コード'].value +
records[i]['得意先枝番'].value
},
}
};
console.log(record[i]);
recordArr.push(record[i]);
}
// 100件ずつ更新
var s = 0;
var e = 0;
while (s < recordArr.length) {
e = s + 100;
body.records = recordArr.slice(s, e);
kintone.api(kintone.api.url('/k/v1/records', true), 'PUT', body, function(resp) {
// success
console.log(resp);
}, function(error) {
// error
console.log(error);
});
s = s + 100;
}
// 再読み込み
location.reload();
alert("一括更新が完了しました!!");
});
}
};
//メニューの右側の空白部分(kintone.app.getHeaderMenuSpaceElement())
kintone.app.getHeaderMenuSpaceElement().appendChild(myIndexButton3);
});
})();