新規投稿
フォローする

レコード上限10万件を超えるとエラーになってしまいました。一括取得できる解決方法を知りたい

現在、別アプリに登録しているレコード(約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;
});
};

0

1件のコメント

Avatar
juridon

こんにちは!

上限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」などの語句を検索したら使い方のサンプルコードが出てくるかも知れません。

0
サインインしてコメントを残してください。