複数のSharePointリストを利用されている場合、一方のリストの更新をもう一方のリストにも反映したいといった機会があるかと思います。
レコード数が多い場合、都度手動で2つのリストを更新しようとすると、レコードを探し出すだけで時間がかかってしまいます。
実際にそういった場面に遭遇した際に、Power Automateで自動更新を実装することができたので、今回はその方法とその際の注意点をご紹介したいと思います。
※記載の内容は執筆時点の公開情報を元にしております。
Power Automateフロー作成までの事前準備
実際にPower Automateフローを作成する前に、SharePointリストを準備します。
今回利用するリストは以下の2つです。
- リストA:手動で更新するリスト
- リストB:リストAの更新をもとにPower Automateが更新するリスト
リストAで更新した際にリストBに反映される列について、同一の列の名前である必要はありません。
今回は「対応内容」、「対応者」の2つの列を更新対象として、他の列はそのままにします。
もちろん、他の列も同じように設定してリストAの更新ですべて反映することも可能です。
自動更新フローの作成
実際にフローを作成していきます。
今回はリストAのステータスが「完了」の時のみ、リストBに「対応内容」、「対応者」の列が更新される流れとします。
フローは、リストAの更新時に自動実行できるように、「インスタント クラウド フロー」で作成します。フロー名は任意で問題ありません。

トリガー
Power Automateのフローはトリガーとアクションが1つずつ以上必要です。
今回はリストAの更新をトリガーにしたいので、SharePointコネクタの「アイテムまたはファイルが修正されたとき」というトリガーを選択します。*1

トリガーを選択したら、パラメータを設定します。今回はリストAの更新がトリガーとなるので、リストAのサイトとリストをそれぞれ選択します。
※ サイトやリストは、自分がアクセスできるサイト・リストがプルダウンで表示されます。

アクション
トリガーの設定ができたので、アクションの設定を実施します。
今回は実装できる必要最低限のアクションを紹介します。
ステータス確認
フロー作成の冒頭にも記載したように、今回はリストAのステータスが「完了」の時のみ実行させたいので、条件アクションでステータスの確認を実施します。
条件の一方にトリガーで取得しているリストAの情報から「ステータス」列、もう一方に「完了」を指定します。

この条件アクションがTRUE(=ステータスが完了)には後続のアクションを追加、FALSE(=ステータスが完了以外)にはアクションを追加せずフローを終了させます。

リストBの情報の取得
ステータスが完了となった場合、後続アクションとして更新先のリストBの情報を取得します。
アクションはSharePointコネクタの「複数の項目の取得」です。トリガー同様に、今度はリストBのサイト・リストを選択します。

ここで1点注意点となるのが、画像緑枠の部分です。
「上から順に取得」というパラメータは、リスト内のレコードをいくつ取得するかという項目です。
このパラメータを指定していない場合、Power Automateの既定で取得されるレコード数は100となります。リストに100以上のレコードがない場合、該当するレコードが見つけられずフローがエラーになる可能性があります。
今後リストのレコード数が増えていくことが見込まれる場合は、このパラメータの設定が推奨されます。
画像内では1000を指定していますが、最大5000まで設定が可能なので、100を超えている場合は5000を指定しておくと運用上も安心かと思います。
同じレコードの特定
リストの更新前に、リストAとリストBで対応するレコードを特定させる必要があります。
トリガーで取得しているリストAの情報をリストBの一覧情報と比較するため、値が一意の列の指定が一番スムーズです。
2つのリストで値が共通しているレコードNo.やIDといった列があれば、その値を利用する形がいいと思います。リストには既定で作成されるIDという列がありますが、設定前に2つのリストでIDの値が一致しているか確認してください。
ここでは、「それぞれに適用する」、「条件」の2つのアクションを使います。
「それぞれに適用する」は、「条件」での動作をリストBのレコードの数だけ実施するために使用します。*2
「条件」は、2つのリストで値が一致しているレコードの特定に使用します。
「それぞれに適用する」では、先ほどリストBの情報を取得した「複数の項目の取得」のbody/value*3を指定します。

「条件」では、2つのリストでIDの値が一致している項目をそれぞれ指定してください。

この条件アクションがTRUE(=2つのリストでIDが一致)には後続のアクションを追加、FALSE(=2つのリストのIDが不一致)にはアクションを追加せずフローを終了させます。
一致するのは1つのレコードのみのはずなので、1つのレコードしかTRUEにはなりません。
更新内容の設定
いよいよ最後のアクションとなる、更新内容の設定です。
アクションはSharePointコネクタの「項目の更新」です。これまで同様に、リストBのサイト・リストを選択します。

赤枠部分のサイト・リスト情報を入力することで、緑枠の部分にリストの列が表示されます。*4
ここにトリガーで取得したリストAの「対応内容」、「対応者」を指定することで、更新がされます。
フローとしてはここで終了です。
更新内容設定時の注意事項
ここまでの方法で基本的なフローは作成できるのですが、リストの設定によって、一部考慮やフローでの追加設定が必要な場合があります。
実際に筆者が遭遇した設定について、ご紹介します。
リストの必須項目
リストの設定で、特定の列への値の入力を必須としている場合があると思います。列への設定がわからない場合は、新しいレコードの追加画面や、「リストの設定」から各列の設定を確認できます。

「更新内容の設定」で利用した「項目の更新」のアクションでは、リストで必須入力列の項目は、変更の必要がなくても値を指定する必要があります。
必須項目は以下の画像の「対応内容」のように、詳細パラメーターより上に必須マークがついた状態で表示されます。

変更がない場合は「複数の項目の取得」で取得したリストBの元々の列の値を、変更してリストAに合わせる場合はトリガーで取得したリストAの列の値を指定すれば問題ありません。
複数選択肢の項目
リストの設定で、複数選択肢を入力する列がある場合があると思います。
以下の画像の「対応者」のように、複数の選択肢が分割されて表示されます。

一見特に問題なく更新できそうですが、設定方法を間違えると以下のように更新されてしまいます。

複数選択肢の列の場合は、複数の値を分割しないと1つのテキストとして認識されてしまいます。
この場合、「更新内容の設定」にて値を指定する前に、値を変換する必要があります。
値の変換には「選択」アクションを使います。
設定箇所は以下3か所あります。
- 元:複数選択肢の列の変換したい値(画像ではトリガーで取得した対応者を指定)
- マップの左:Value
- マップの右*5:item()?['Value']

あとは、「更新内容の設定」で利用した「項目の更新」のアクションに、この「選択」アクションの出力を指定するだけです。
おわりに
今回は、Power Automateを使って一方のリストの更新をもとに、もう一方のリストに自動更新させる方法について紹介させていただきました。
今回紹介した内容はPower Automateを新規で作成しなければいけないですが、手順自体は難しくないので、同じような場面に遭遇している場合があれば、この記事がお役に立てればと思います。
ご覧いただきありがとうございました!
*1:このトリガーはリストの既存のレコードを修正または変更した際のトリガーです。リストにレコードを追加した条件も含む場合は、別のトリガーの選択が必要になります。
*2:リストAの情報はトリガーにて、更新された1つのレコード情報のみ取得されていますが、リストBの情報はリスト全体のレコードを取得しているため、リストAの情報とすべて照らし合わせる必要があります。
*3:body/valueは取得したリストBの情報全部のイメージです。
*4:表示されない場合は、詳細パラメーターの「すべて表示」をクリックすることで表示されます。
*5:「fx」をクリックして、関数バーより設定
山﨑 日南子(日本ビジネスシステムズ株式会社)
ハイブリッドクラウド部門に所属。主にAzure(IaaS)製品、VDIソリューション(Azure Virtual Desktop)の設計、構築に携わっています。
担当記事一覧