
こんにちは、MS開発部の 荒井 です。
皆さんは SharePoint デザイナーで作成できるワークフローで、
「アイテムが更新されたときにワークフローを動かし、そのアイテムのプロパティを設定する」
という処理をやったことはないでしょうか?
以前それを Power Automate でやろうとし、以下のようなフローを作成したところこのフローが無限に実行されてしまう現象に陥りました。
今回はこれの対策を考えていこうと思います。
原因
Power Automate のフローでは、以下のように設定するとフローが無限に実行されてしまいます。
①トリガーに「アイテムまたはファイルが修正されたとき」「アイテムが作成または変更されたとき」を選択
②同フロー内で「項目の更新」アクションなどを用いて、そのアイテムを更新する
フロー内でアイテムの更新を行うと、それをトリガーとして同じフローが実行されて、その中でアイテムが更新され…、というようにフローが無限に実行されてしまいます。
SharePoint デザイナーのワークフローではこういったことは起こらなかったのですが、元々 Power Automate は SharePoint だけのためのものではないですし仕方ないといったところでしょうか…。
対策
対策については、「これならバッチリ!」というのがなかったのでいくつか考えてみました。
① 集計列を使う
まず、「標準機能である集計列で再現できないか?」というものです。
式は複雑になってしまいますが条件分岐もできますし他のアプリも使わず SharePoint 内で完結できるため、これが使用できるのであれば一番いいのではないかと思います。
ただ ID や参照列は集計列で使えないなどの制約もあるため難しいところです。
② Power Apps を使う
Power Apps では「特定のプロパティを設定した時に、他のプロパティを変更する」といった処理をすることも可能なので、こちらで再現することもできるのではないかと思います。
ただそういった処理を設定しようとすると設定が複雑になるため、場合によっては難易度がかなり高くなってしまうかもしれませんね…。
③ Power Automate のトリガーで、更新日時が直近かどうか判定する
Power Automate は使用するのですが、フローを起動する場合の条件を追加します。
Power Automate のトリガーにはオプションで「トリガーの条件」が用意されており、ここに設定した条件をクリアしないと起動しないようになっています。
例えば、条件を「更新日時が現在時刻の3分前」というようにすることで、2回目のフローはここの条件に引っ掛かり起動されないということですね。
ただ上記の条件の場合、3分以内にユーザーがもう一度アイテムを更新しても起動しなくなってしまうので、「一度更新したらちょっと待ってね」というような運用上の制約が出てくるでしょうか。
④ Power Automate を専用のアカウントで作成し、更新者がそのアカウントがどうか判定する
③と同じようにフローを起動する場合の条件を追加するパターンです。
Power Automate でアイテムを更新すると更新者がフローの所有者になることを利用し、専用のアカウントを用意、「アイテムの更新者がこのアカウントの場合はアイテムを更新しない」というようにすることで、③と同じく2回目の開始を防ぐことができます。
ただこちらはライセンスやアカウント管理の問題が発生してしまいます。
以上、Power Automate で SharePoint アイテムを更新しようとして無限ループが発生しないようにするための対策でした。
ただ先に記載したように「この方法であれば完璧!」といった対応がなさそうなので、Power Automate の仕様が変わってくれれば嬉しいですね。
その他弊社の業務にご興味のある方は、お気軽にお問い合わせください。
(お問い合わせはこちらのページをご確認の上、メールアドレス「info@deepcom.co.jp」までご連絡ください。)
関連記事
荒井
最新記事 by 荒井 (全て見る)
- Power Automate での SharePoint アイテム更新について - 2020年10月19日
- Power Automate (旧 Microsoft Flow) でアイテムの権限を変更する (2) - 2020年6月29日
- SharePoint モダンのリストビューでより多くのアイテムを見たい - 2020年5月15日