【Power Automate】SharePointリストのアイテムを一括で更新する方法

SharePointリストへ値を登録（変更）する際はアイテム数に比例して更新作業が煩雑になります。
私が直面した課題では10,000件以上のアイテムがあるリストに新たな列を追加し、それらすべてのアイテムに値を登録する必要がありました。
しかし、膨大なアイテムに一つ一つ手作業で値を登録するのは時間を要するだけでなく、登録ミスのリスクも高まります。
そこでこの作業を自動化できないかと考え、Power AutomateでSharePointリストのアイテムを一括更新してみました


## Power Automateフローの全体像
今回作成するPower Automateフロー（以下フロー）の全体像です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3992089/0d89997d-3500-dd8a-1af6-88b3b9857bb8.png)

## SharePointリストのサンプル
列「タイトル」、列「ラベル」、列「subID」が含まれるリストを使用します。
アイテム数は2,000件を超えています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3992089/42666b57-33f8-91fd-94ae-a1d150631f51.png)

## フローの作成手順
1.　Power Automate (https://make.powerautomate.com/) を起動し、メニューの「作成」から「インスタント クラウド フロー」 を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3992089/5ac4b3e0-f1d5-0711-ac1d-e719a9d0600c.png)

2.　任意のフロー名を入力し、トリガーを選択した後、[作成]ボタンをクリックします。今回は手動でフローを起動させるため、「フローを手動でトリガーする」を選択します。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3992089/769a5b6b-a643-591e-7f09-1f9b79f94de5.png)


3.　SharePointの「複数の項目の取得」アクションを追加します。
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3992089/c687a25b-70ba-0d6a-17d1-b2d44009460c.png" width="300" height="200">


4.　「複数の項目の取得」アクションの設定値を入力します。
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3992089/3fe85036-fc55-ef9a-9979-d9f9221c5e45.png" width="400" height="300">

設定値は以下のとおりです。
| No.| 設定項目名      | 設定値                    | 備考   |
|----|----            |--------------------------|--------|
| ①  | サイトのアドレス * | SharePointサイトを選択 |必須     |
| ②  | リスト名 *        | SharePointリストを選択 |必須     |
| ③  | フィルター クエリ | ID ge 1 and ID le 2000 |※1      |
| ④  | 並べ替え順        | ID asc                 |IDの昇順|
| ⑤  | 上から順に取得    | 2000                   |        |

**【解説】**
※1　SharePoinrリストのIDが１～2000のアイテムを対象とします。
Power Automateで一度に更新できるアイテム数の上限が2,000件であるため、このような条件を設定しています。
例えばアイテム数が3,000件ある場合は、フローを2回に分けて実行する必要があります。2回目のフロー実行前にフィルター クエリの設定値を「ID ge 2001 and ID le 3000」に変更します。
（アイテム数が2,000件以下の場合はフィルター クエリを設定する必要はありません）

5.　「それぞれに適用する」アクションを追加します。
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3992089/ec35d057-9266-f668-2a54-6df55dc2a6b4.png" width="400" height="300">


6.　「それぞれに適用する」アクションを追加すると、アクション名「Apply to each」が表示されます。
「動的なコンテンツ」から「複数の項目の取得」のvalueを選択します。
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3992089/a6c058d2-4623-00dc-b57b-36d8601d02f0.png" width="500" height="300">

7.　Apply to each内の「アクションの追加」から、SharePointの「項目の更新」アクションを追加します。
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3992089/0b33ae65-5e75-8567-22ad-83e3d87d9889.png" width="400" height="300">


8.　「項目の更新」アクションの設定値を入力します。
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3992089/c72a987f-f192-c8f9-92a8-3935e9be0874.png" width="400" height="300">

設定値は以下のとおりです。
| No.| 設定項目名        | 設定値                               | 備考   |
|----|----              |------------------------------------- |-----|
| ①  | サイトのアドレス * | SharePointサイトを選択                |必須  |
| ②  | リスト名 *        | SharePointリストを選択                |必須  |
| ③  | ID               | 複数の項目の取得「ID」を選択            |必須 |
| ④  | （リスト項目）    | 更新したいリスト項目に、任意で値を設定 ※ |   |

※例として、今回は列「ラベル」に”更新”というテキスト、列「subID」にIDを設定しました。
値を空白にしたい場合は、式に「null」を設定することで、登録されている値を一括で削除することが可能です。
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3992089/33696329-bd15-6b9d-b3a9-83362b54c488.png" width="450" height="300">

設定は以上です。

## 動作確認
1.　フローを保存し、実行します。
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3992089/118bd431-a7c3-50f9-c44d-ee7a4a6a4f06.png" width="300" height="300">

2.　フローの実行履歴を確認します。
フローが成功するまで15分弱要したことが確認できます。更新するアイテム数が多い場合、処理時間が長くなることがあります。
    <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3992089/82fd1017-c8de-516d-2123-05d5183c3fbc.png" width="450" height="300">


3.　SharePointリストを確認します。
設定した内容のとおり、列「ラベル」と列「subID」が2,000件目のアイテムまで更新されており、2,000件目以降は更新されていないことが確認できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3992089/c46ff3a3-ef7d-0493-73c9-d5a591eb704d.png)

## まとめ
本記事ではSharePointリストアイテムの特定の列に対して、設定した値を一括で登録/更新する方法について解説しました。
アイテムの値をすべて空白にする場合や、条件を指定して対象のアイテムだけを更新したい場合などに活用してみてはいかがでしょうか。

## さいごに
テンダでは、「こんなプロジェクトに挑戦したい」「こんなチームで働きたい」「理想のチームを創りたい」と願う仲間を求めています。
カジュアル面談も随時受付中です。ぜひ一度お話ししましょう:laughing:

- [募集職種一覧](https://hrmos.co/pages/tenda/jobs)
- [カジュアル面談の申込](https://hrmos.co/pages/tenda/jobs/031002/apply)
- [テンダで働く人や社風について](https://note.com/tenda_recruit)