やりたいこと
Power AutomateでSharePointリストの5000件以上の項目を取得し、フィルター条件に合致した項目のみを抽出する。
前提条件
- Microsoft 365 開発者プログラムをアクティブ化し、以下製品ライセンスを有効化する
- Microsoft 365 E5 Developer
- Microsoft Power Automate Free
- SharePointリストの項目数は5000件以上
- トリガーはフローを定期的に実行できる[繰り返し]を使用する
手順1.[HTTP要求を送信する]でSharePoint REST APIを使用する
一般的には、SharePointの[複数の項目の取得]アクションで5000件以上のデータを取得しますが、以下記事を参照したところ、パフォーマンスプロファイル = 低 のライセンスおよび[繰り返し]トリガーの場合、[複数の項目の取得]アクションで5000件以上の項目を取得し、フィルター処理をすることができません。フロー保存時にエラーとなってしまいます。
[SharePoint - HTTP要求を送信する]アクションで5000件以上の項目に対してフィルター処理をすることができます。ただし、SharePoint REST APIの制限で、1回のAPIコールで5000件以上の項目を取得することはできません。したがって、5000件以上の項目からfilterクエリおよびtopクエリで5000件未満の項目を抽出します。
GET https://{site_url}/_api/web/lists/GetByTitle('list_name')/items?$filter=ColumnName eq 'Hello World' &$top=5000
Accept: "application/json;odata=nometadata"
SharePoint REST API 実装およびODataクエリ操作の詳細は、以下記事をご参照ください。
手順2. SharePointリストでインデックスを作成する
filterクエリで使用するSharePointの列にインデックスを作成する必要があります。SharePoint Onlineサイトの設定から[リストの設定]⇒[インデックス付きの列]⇒[新しいインデックスの作成]をクリックし、対象の列を選択してインデックスを作成します。
SharePointリストのインデックス作成手順は以下公式ドキュメントをご参照ください。