Power Automate のHTTP アクションでkintone から100件以上取得する 

# はじめに
はじめまして、こんにちわ。
Power Automate からkintone のレコードを取得する際に、登録されているレコードは1500件くらいあるのに、100件しかとれてなく疑問に思ったので、備忘録として書きます。

# kintone の制限確認
kintone REST API の仕様を確認すると以下が明記されていました。
>一度に取得できるレコードは 最大500件（初期値は100件）までです。

レコードの一括取得（クエリで条件を指定）

https://developer.cybozu.io/hc/ja/articles/202331474#step2

何も設定しなければ初期値は100件でquery で500と指定すれば、一回で最大500件までは取得できるとのことです。
ただし、500件を超える場合は、考慮が必要です。

# kintoneの（500件を超えても）レコードを一括で取得する
 一括で取得したいレコードが500件を超える場合、一工夫必要のようです。
そこで、kintone のTips を確認すると3つの考え方が紹介されています

>レコードを一括取得する方法には、「レコード ID を利用する方法」「カーソル API を利用する方法」「offset を利用する方法」の 3つの選択肢があります。

kintone -Tips - offset の制限値を考慮した kintone のレコード一括取得について


https://developer.cybozu.io/hc/ja/articles/360030757312

ちょっとみてます。

## レコード ID を利用する方法
この方法は
　・ソート条件を必要としない（レコードID順で問題ない）
の場合に利用可能です。

ポイントは以下にある通り、レコードID順にソート、レコードID 順で取得していきます。
>ID を利用する方法のポイントは、次の2点です。
>・「レコード ID ＞ 前回取得したレコードの中で一番最後のレコードのレコード ID」となるように絞り込みを行うこと
>・「order by $id asc」というレコード ID 順に並び替えること

https://developer.cybozu.io/hc/ja/articles/360030757312#use_id

ただし、１回の実行だけではすべてのレコードを取得することはできませんので、ループ等を組み合わせて繰り返し取得する必要があります。繰り返し取得する際に基準となるのがレコードIDで、再取得の際に前回取得したレコードIDの後から取得するのが重要なポイントかと思います。

## カーソル API を利用する方法
この方法は
　・ソート条件を必要とする
　・取得するレコードが1万件を超える可能性がある
の場合に利用可能です。

カーソルが何か？については省きます。

大まかな流れとしては、以下の通り、
>１．カーソルの作成 API を使って、カーソルを作成する。
>２．カーソルからレコードを取得する API を使って、レコードを取得します。
>３．カーソルの削除 を使って、作成したカーソルを削除します。

https://developer.cybozu.io/hc/ja/articles/360030757312#use_cursor

カーソルを作ってしまえば、後は繰り返し取得するだけです。IDなどを気にしなくていいのは楽かもしれません。

## offset を利用する方法
この方法は
　・ソート条件を必要とする
　・取得するレコードが1万件を超える可能性が将来的にもない
の場合に利用可能です。

考え方としては一番シンプルかと思います。
どのレコードからどこまでのレコードを取得するかを指定します。全部取得するときは徐々に範囲を大きくしていく。
>offset と 取得件数を表すリクエストパラメータ limit を指定してレコード一括取得 API を実行すると、「offset 番目のレコードから limit 件」のレコードを取得します。
>offset を利用する方法では、offset を少しずつ大きくしていくことで、取得するレコードの位置を指定しながら順次レコードを取得します。

https://developer.cybozu.io/hc/ja/articles/360030757312#use_offset

# 共通する考え方
先に述べたように3つの方法がそれぞれありますが、
共有している考えとして「終わるまで繰り返す」ということかと思います。
　全レコード取得した！
ということをどういう方法で判断するのか？が3つの方法のどれかってことかと。

# Power Automate で取得するには
Power Automate でkintoneのレコードを取得するには「HTTP」アクションを使用する必要があります。
Power Automate にはkintone のコネクタが準備されていますが、現時点でレコード取得するアクションは用意されていません。
頑張って kintone REST API を利用します。

## 500件取得する方法
kintone から一度に複数レコードを取得する場合は、最初に述べた通り「レコードの一括取得（クエリで条件を指定）」を使用します。

HTTP メソッド
GET

URI
https://xxxxxxx.cybozu.com/k/v1/records.json

500件を一度に取得するにはクエリ文字列として「limit 500」を付与します。

https://developer.cybozu.io/hc/ja/articles/202331474#step2

Power Automate としてはuriComponent関数を使うのが１つのポイントでしょうか。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1729371/e1e3455e-7c5e-8af3-0967-104a649b0296.png)

これで一度に500件取得できます。

## レコード ID を利用する方法
レコードIDを利用する場合は、どのレコードまでを取得したのか格納しておく必要があるので、格納用の変数を用意します。
「HTTP」アクションではクエリ文字で500件取得 かつ レコード番号＞レコードIDとなるようにします。
取得した最後のレコードIDは変数に格納しておきます。
全レコード取得する必要があるので、「Do until」アクションで取得レコード数が500件未満になるまで繰り返すようにします。

イメージは以下の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1729371/6dd61597-96ca-dc5d-8b4b-86261d5f9882.png)

## カーソル API を利用する方法
カーソル APIを利用する場合は、自動的にレコードを位置を覚えていてくれるので、変数の準備は不要です。
レコード ID の時と同じように、「Do until」アクションで取得レコード数が500件未満になるまで繰り返すようにすれば、最後のレコードまで取得可能です。

カーソルの作成

https://developer.cybozu.io/hc/ja/articles/360029152012#step1

カーソルからレコードを取得

https://developer.cybozu.io/hc/ja/articles/360029152012#step2

カーソルの削除

https://developer.cybozu.io/hc/ja/articles/360029152012#step3

なお、最後まで取得した場合は自動でカーソルは削除されるようなので、最後のアクションは不要だと思います。
あるとエラーになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1729371/35c95399-0e8e-2aea-820d-dd37bd7ef865.png)


## offset を利用する方法
オフセットを利用する場合は、レコードIDの時と形は同じです。オフセット用の変数を用意し、URIにクエリ文字列として付与します。「HTTP」アクションの後はオフセットに500加算します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1729371/1ef21473-465c-2dab-35c5-8918b23fd8a9.png)


# まとめ
ちゃんと100件超えても取得できます。
500件を超える場合は、繰り返して取得する必要がある。

以上、参考になれば。
勢いで書きました。間違いや他の案などあれば優しくご教示ください。