レコードの取得時に、クエリ部分の条件に合致するものが500件以上ある場合の対応

クエリ部分の条件に合致するものが500件を超えており、すべて取得したい場合ですが

 

1:まずは件数取得

レコードの取得のAPIをtotalCount = true で投げ、条件に合致する件数を取得。

 

https://cybozudev.zendesk.com/hc/ja/articles/202331474

 

2:合致する件数に達するまで、offsetをずらしながら取得を続ける。

 

といった処理でやるしかないでしょうか?

 

一度に取得する件数に上限があるのは、やむをえないと思いますが

クエリで指定した条件に一致する件数「だけ」取得するAPIコマンドがあると便利なのですが・・・。

shinichi.minoshima さん

そうですね。limit と offset を使ってループするしか方法はないと思います。

私の場合は、totalCountは取得せず、単純にループでまわして、レスポンスのレコード件数が500件未満になった時点で、全件取得できたと判断する様にしています。

というか、totalCount=true という便利なパラメータがあるんですね。知りませんでした。

全件取得のループを切る条件は、おふたりがおっしゃているいずれかになると思いますが、処理の記述方法としてはTipsにあるような再帰でやるケースが多いような気がします。totalCountで上限を確認して、kintone.Promise.all() と map による並行処理でやることも考えられますが、経験上安定しないケースがあったりもしますので、再帰等による直列処理が良いかと思います。

再起処理ソース見ました。 これは美しい!

ただ、実は全件取得に特化した関数だと見るべき内容です。limit=1を突っ込んだりすると、ちまちまと1件ずつ処理するような動きになってしまいますので。汎用的に使うには改善が必要ですね。