10
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Power Automate】SharePointの「アイテムが作成または変更されたとき」トリガーでトリガー元アイテムを更新する場合の無限ループを回避する

Posted at

#問題になる動作
SharePointリストで追加・更新されたアイテム自体に対して指定列にデータを入れるなどの処理をしたい場合、Power Automateの処理がフロー自身をトリガーしてしまい無限ループを起こしてしまう。

#本記事のシナリオ
① Power Automateによる更新処理のタイムスタンプを保存する列をSharePointリストに作成
② Power Automateで任意の更新処理+実行時刻のタイムスタンプをSharePointリストに保存するフローを設定
③ フローにトリガー条件を設定(①のタイムスタンプが空欄/至近の時刻でない場合*のみ実行)
*至近の時刻として設定した間隔よりも短い間隔で行われた変更操作に対してはフローが実行されないことが制約となります。

#ステップ
① SharePointリストにPower Automateによる更新処理のタイムスタンプを保存する列を作成

列名:任意(本記事では「PA_Auto_Update」)
列タイプ:日付と時刻

② Power Automateで任意の更新処理+実行時刻のタイムスタンプをSharePointリストに保存するフローを設定
utcNow()関数を使って「PA_Auto_Update」列に現在時刻のタイムスタンプが入るように設定します。
image.png

image.png

③ フローにトリガー条件を設定(①のタイムスタンプが空欄/至近の時刻でない場合のみ実行)
トリガーの「・・・」のメニューからトリガー条件を設定します。
image.png
image.png
####例
「PA_Auto_Update」の時刻が空欄、または 3分前より過去の時刻の場合のみ実行する場合のトリガー条件は以下のとおりです。

@or(empty(triggerBody()?['PA_Auto_Update']),less(triggerBody()?['PA_Auto_Update'], addMinutes(utcNow(),-3)))

SharePoint側で既定値を設定するなどで「PA_Auto_Update」の空欄を想定しない場合は下記のみでもOKです。-3で3分前の時刻を指していますので、必要に応じてご自由に調整してください。

@less(triggerBody()?['PA_Auto_Update'], addMinutes(utcNow(),-3))
10
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?