(PowerAutomate)SharePointリストの特定の列が変更されたときだけ処理する方法

  • SharePointリストで 特定の列が変更 されたときだけフローを動かしたい。
  • 集計列でフィルタークエリを使いたい、などの場合に使える方法です。
    image


業務シナリオ

SharePointリストで作成した「タスクリスト」のようなリストがあり、
タスクの「期限」と「何日前に通知」列の値を設定すれば、「通知日」は自動的に入力されるようにしたいと思います。

また、期限や何日前の情報は後から変更されることがありますので、変更時にも再計算が必要です。

「通知日」列は、後ほど通知日が到来したらユーザーにメール通知を行うフローを作成するため必要になります。

アプローチ

通知日の入力はPower Automateから行う想定とします。
「アイテムが作成又は変更されたとき」をトリガーにすればよいですが、あくまで「期限」と「何日前」の列が変更されたときだけ動いてほしいです。
※もちろん、新規投稿の場合は無条件に動かします。

また、「アイテムが作成又は変更されたとき」をトリガーとするフローから「項目の更新」を行うと無限ループが発生してしまいます。
こちらへの考慮も必要です。

計算列でええやん → 計算列はフィルタークエリが使えない

SharePointリストの計算列を使うと、通知日の計算/表示は簡単です。
ですが、Power Automateから「複数項目の取得」アクションなどで、特定の通知日でフィルターしたい場合、計算列はフィルタークエリに使えません。
※使えるようにしてほしい。

なのでPower AutomateからDate型の静的な値として格納したいのです。

完成版のフロー

以下のような流れです。

ポイント解説

アイテムやファイルの変更を取得する (プロパティのみ)

どの列が変更されたかを検出するには、このアクションを使います。

トリガーの出力にある、「ID」と、「ウィンドウの開始のトークントリガー(TriggerWindowStartToken)」を設定します。

すると、出力では変更された列の値がtrueになります。



注意点1

  • リストのバージョン設定で、「このリストのアイテムを編集するたびにバージョンを作成する」が有効になっている必要がある。
  • 承認機能を有効化している場合は、詳細オプションの「マイナーバージョンを含める」をはいにする。

注意点2

  • 新規アイテムの場合は、全ての列がfalseなってしまいます。
  • 変更アイテムの場合、更新日時が必ずtrueになりますので、これがfalseかどうかで新規/変更アイテムの区別を行います。

条件:対象列の変更以外は終了

画像のようなイメージです。

上記出力より、
①列が変更されています「期限」 又は、「何日前」の列がtrue の条件がいいえの場合は終了します。
②さらに、「更新日時」の列がfalseの場合 も条件に追加します。
※新規アイテムの場合に対応するため必要です。


注意点
条件右側のtrue / false は数式モードで入力する必要があります。


これで、任意の列が変更されたとき、かつ新規投稿の場合も動作するフローのできあがりです。


これ以降は任意の処理を記述します。

時間からの減算:通知日の計算

以下のように設定します。

注意点
データ型に時刻情報が含まれる場合は、タイムゾーンに注意してください。
UTCJSTへの変換が必要です。

項目の更新:通知日のセット

計算された通知日をセットします。
このアクションにより、フローが再トリガーされてしまいますが、条件分岐でフローが取消されるため無限ループは発生しません。

注意点
動作対象の列の値を変更してしまうと無限ループが発生します。
必ず同じ値を設定しましょう。

SharePointフォームの設定

データ入力の際、通知日列を非表示にしたい場合はフォームの設定で消しておきます。




追記
ごめんなさい
新規登録の場合の考慮が漏れていたのでフローを修正しました。