はじめに
はじめまして、こんにちわ。
Power Automate からkintone のレコードを取得する際に、登録されているレコードは1500件くらいあるのに、100件しかとれてなく疑問に思ったので、備忘録として書きます。
kintone の制限確認
kintone REST API の仕様を確認すると以下が明記されていました。
一度に取得できるレコードは 最大500件(初期値は100件)までです。
レコードの一括取得(クエリで条件を指定)
何も設定しなければ初期値は100件でquery で500と指定すれば、一回で最大500件までは取得できるとのことです。
ただし、500件を超える場合は、考慮が必要です。
kintoneの(500件を超えても)レコードを一括で取得する
一括で取得したいレコードが500件を超える場合、一工夫必要のようです。
そこで、kintone のTips を確認すると3つの考え方が紹介されています
レコードを一括取得する方法には、「レコード ID を利用する方法」「カーソル API を利用する方法」「offset を利用する方法」の 3つの選択肢があります。
kintone -Tips - offset の制限値を考慮した kintone のレコード一括取得について
ちょっとみてます。
レコード ID を利用する方法
この方法は
・ソート条件を必要としない(レコードID順で問題ない)
の場合に利用可能です。
ポイントは以下にある通り、レコードID順にソート、レコードID 順で取得していきます。
ID を利用する方法のポイントは、次の2点です。
・「レコード ID > 前回取得したレコードの中で一番最後のレコードのレコード ID」となるように絞り込みを行うこと
・「order by $id asc」というレコード ID 順に並び替えること
ただし、1回の実行だけではすべてのレコードを取得することはできませんので、ループ等を組み合わせて繰り返し取得する必要があります。繰り返し取得する際に基準となるのがレコードIDで、再取得の際に前回取得したレコードIDの後から取得するのが重要なポイントかと思います。
カーソル API を利用する方法
この方法は
・ソート条件を必要とする
・取得するレコードが1万件を超える可能性がある
の場合に利用可能です。
カーソルが何か?については省きます。
大まかな流れとしては、以下の通り、
1.カーソルの作成 API を使って、カーソルを作成する。
2.カーソルからレコードを取得する API を使って、レコードを取得します。
3.カーソルの削除 を使って、作成したカーソルを削除します。
カーソルを作ってしまえば、後は繰り返し取得するだけです。IDなどを気にしなくていいのは楽かもしれません。
offset を利用する方法
この方法は
・ソート条件を必要とする
・取得するレコードが1万件を超える可能性が将来的にもない
の場合に利用可能です。
考え方としては一番シンプルかと思います。
どのレコードからどこまでのレコードを取得するかを指定します。全部取得するときは徐々に範囲を大きくしていく。
offset と 取得件数を表すリクエストパラメータ limit を指定してレコード一括取得 API を実行すると、「offset 番目のレコードから limit 件」のレコードを取得します。
offset を利用する方法では、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」を付与します。
Power Automate としてはuriComponent関数を使うのが1つのポイントでしょうか。
これで一度に500件取得できます。
レコード ID を利用する方法
レコードIDを利用する場合は、どのレコードまでを取得したのか格納しておく必要があるので、格納用の変数を用意します。
「HTTP」アクションではクエリ文字で500件取得 かつ レコード番号>レコードIDとなるようにします。
取得した最後のレコードIDは変数に格納しておきます。
全レコード取得する必要があるので、「Do until」アクションで取得レコード数が500件未満になるまで繰り返すようにします。
カーソル API を利用する方法
カーソル APIを利用する場合は、自動的にレコードを位置を覚えていてくれるので、変数の準備は不要です。
レコード ID の時と同じように、「Do until」アクションで取得レコード数が500件未満になるまで繰り返すようにすれば、最後のレコードまで取得可能です。
カーソルの作成
カーソルからレコードを取得
カーソルの削除
なお、最後まで取得した場合は自動でカーソルは削除されるようなので、最後のアクションは不要だと思います。
あるとエラーになります。
offset を利用する方法
オフセットを利用する場合は、レコードIDの時と形は同じです。オフセット用の変数を用意し、URIにクエリ文字列として付与します。「HTTP」アクションの後はオフセットに500加算します。
まとめ
ちゃんと100件超えても取得できます。
500件を超える場合は、繰り返して取得する必要がある。
以上、参考になれば。
勢いで書きました。間違いや他の案などあれば優しくご教示ください。