レコード一括取得時にその結果が1万を超える可能性がある場合には、運用・適用中のプログラムのご確認ならびに修正対応の検討をお願いいたします。
詳細はこちらの記事を確認ください。
(著者:落合 雄一)
はじめに
全レコードの取得方法をご紹介します (^^)
こちらのデモ環境から実際に動作を確認できます。
https://dev-demo.cybozu.com/k/76/
デモ環境アカウントとパスワードは、サインイン後にこちらのページでご確認ください。
※デモ環境についての説明はこちら
ソースコード
KintoneRecordManager
KintoneRecordManagerは、レコード処理に関するクラスです。getRecordsメソッドは、再帰的にgetRecordsメソッドを呼び出すことで、全レコードの取得を実現しています。REST APIのレコードの一括取得が何度も呼ばれるため、レコード数の多い場合は時間がかかります。
利用方法
KintoneRecordManagerにはいくつか設定可能なプロパティがあります。
アプリIDの指定
デフォルトは、kintone.app.getId()です。指定したい場合は以下のようにしてください。
クエリで検索条件の指定
デフォルトは検索条件なしとなっています。指定したい場合は以下のようにしてください。
全レコード取得後のcallback
getRecordsメソッドの呼び出しに対し、callbackを指定できます。全レコード取得後に処理したい内容をcallbackで指定してください。
最後に
全レコード取得には、レコード数に比例して時間がかかってしまいます。ご利用の際は、十分気をつけてください。また、本Tipsではレコード一覧画面の表示イベントの例しか示していませんが、他のイベントなどでも使えますので、試してみてください。
データが残ってしまうので、
通信クラスで初期化するときに
としないと、Arrayが初期化されずに全てpushされる形になります。
菅原様
Arrayの初期化についてのご指摘ありがとうございます。ソースコードの32行目を修正いたしました。
1万件を越える場合、これも影響出ませんか?
向井様
はい、本記事の最上部に記載のとおり、こちらは offset を利用したレコード一括取得をしているため、取得結果が1万件を超える場合、offset の上限値にかかります。
1万件を越える可能性がある場合は、以下の記事を参考ください。
offset の制限値を考慮したレコード一括取得について
cybozu Development team様
思いっ切りトップに書いてくださっていましたね。
大変失礼しました。