お世話になります。
ルックアップを参照側から更新するプログラムを組んでみたのですが、100件以下だとエラーにならなかったのですが、100件以上だと400 (Bad request)になってしまいます。
GETは問題ないので、PUTの問題だと思うのですが、どのように実装すべきなのかわかりません。
ご助言をいただけると助かります。
(function() {
“use strict”;
var updateAppId = kintone.app.getId();
function createPutRecords(records) {
var putRecords = [];
for (var i = 0, l = records.length; i < l; i++) {
var record = records[i];
putRecords[i] = {
id: record[‘$id’].value,
record: {
lookup: {
value: record.lookup.value
}
}
};
}
return putRecords;
}
function updateLookup(appId, records) {
kintone.api(
kintone.api.url(‘/k/v1/records’, true),
‘PUT’, {
app: appId,
records: records
},
function(resp) {
alert(‘ルックアップの更新が完了しました!’);
}
);
}
// レコード一覧画面
kintone.events.on(‘app.record.index.show’, function(event) {
// ボタン
if (document.getElementById(‘my_index_button’) !== null) {
return;
}
var myIndexButton = document.createElement(‘button’);
myIndexButton.id = ‘my_index_button’;
myIndexButton.innerHTML = ‘一括更新’;
myIndexButton.onclick = function() {
var manager = new KintoneRecordManager();
manager.getRecords(function(records) {
// レコード取得後の処理
console.log(records);
updateLookup(updateAppId, createPutRecords(records));
});
return event;
}
kintone.app.getHeaderMenuSpaceElement().appendChild(myIndexButton);
});
/**
* 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)
},
(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;
})();
})();