現在、別アプリに登録しているレコード(約1万件)を別アプリからレコード取得しているのですが,
レコード上限10万件を超えるから、エラーになってしまいました。
一括取得できる方法をご教授していただけませんでしょうか。
以下は、処理したソースコードです。
* @param {Object} params
* - app {String}: アプリID(省略時は表示中アプリ)
* - filterCond {String}: 絞り込み条件
* - sortConds {Array}: ソート条件の配列
* - fields {Array}: 取得対象フィールドの配列
* @return {Object} response
* - records {Array}: 取得レコードの配列
*/
(function() {
'use strict';
kintone.events.on('app.record.index.show', function(event) {
console.log('test 1');
var res = getRecords();
console.log('test 2');
console.log(res);
})
})();
var getRecords = function(_params) {
var MAX_READ_LIMIT = 500;
var params = _params || {};
var app = params.app || kintone.app.getId();
var filterCond = params.filterCond;
var sortConds = params.sortConds || ['$id asc'];
var fields = params.fields;
var data = params.data;
if (!data) {
data = {
records: [],
lastRecordId: 0
};
}
var conditions = [];
var limit = MAX_READ_LIMIT;
if (filterCond) {
conditions.push(filterCond);
}
conditions.push('$id > ' + data.lastRecordId);
var sortCondsAndLimit =
' order by ' + sortConds.join(', ') + ' limit ' + limit;
var query = conditions.join(' and ') + sortCondsAndLimit;
var body = {
app: app,
query: query
};
if (fields && fields.length > 0) {
// $id で並び替えを行うため、取得フィールドに「$id」フィールドが含まれていなければ追加します
if (fields.indexOf('$id') <= -1) {
fields.push('$id')
}
body.fields = fields;
}
return kintone.api(kintone.api.url('/k/v1/records', true), 'GET', body).then(function(r) {
data.records = data.records.concat(r.records);
if (r.records.length === limit) {
// 取得レコードの件数が limit と同じ場合は、未取得のレコードが残っている場合があるので、getRecords を再帰呼び出して、残りのレコードを取得します
data.lastRecordId = r.records[r.records.length - 1].$id.value;
return getRecords({ app:app, filterCond:filterCond, sortConds: sortConds, fields:fields, data:data });
}
delete data.lastRecordId;
return data;
});
};
1件のコメント
こんにちは!
上限10万件というのは
CSVファイルからの読み込みや、集計のときの制限かな~と思いましたが、
一括取得APIの制限値が1万件のことでしょうか?
kintone REST API Client の getAllRecords を使うと1万件制限を気にせずに全件取得できるので
ぜひ試されてみてください^^
↓公式ドキュメント
https://github.com/kintone/js-sdk/blob/master/packages/rest-api-client/docs/record.md#getallrecords
あと、「kintone getallrecords」などの語句を検索したら使い方のサンプルコードが出てくるかも知れません。