- SharePointリストで 特定の列が変更 されたときだけフローを動かしたい。
- 集計列でフィルタークエリを使いたい、などの場合に使える方法です。
業務シナリオ
SharePointリストで作成した「タスクリスト」のようなリストがあり、
タスクの「期限」と「何日前に通知」列の値を設定すれば、「通知日」は自動的に入力されるようにしたいと思います。
また、期限や何日前の情報は後から変更されることがありますので、変更時にも再計算が必要です。
「通知日」列は、後ほど通知日が到来したらユーザーにメール通知を行うフローを作成するため必要になります。
アプローチ
通知日の入力はPower Automateから行う想定とします。
「アイテムが作成又は変更されたとき」をトリガーにすればよいですが、あくまで「期限」と「何日前」の列が変更されたときだけ動いてほしいです。
※もちろん、新規投稿の場合は無条件に動かします。
また、「アイテムが作成又は変更されたとき」をトリガーとするフローから「項目の更新」を行うと無限ループが発生してしまいます。
こちらへの考慮も必要です。
計算列でええやん → 計算列はフィルタークエリが使えない
SharePointリストの計算列を使うと、通知日の計算/表示は簡単です。
ですが、Power Automateから「複数項目の取得」アクションなどで、特定の通知日でフィルターしたい場合、計算列はフィルタークエリに使えません。
※使えるようにしてほしい。
なのでPower AutomateからDate型の静的な値として格納したいのです。
完成版のフロー
以下のような流れです。
ポイント解説
アイテムやファイルの変更を取得する (プロパティのみ)
どの列が変更されたかを検出するには、このアクションを使います。
トリガーの出力にある、「ID」と、「ウィンドウの開始のトークントリガー(TriggerWindowStartToken)」を設定します。
すると、出力では変更された列の値がtrueになります。
注意点1
- リストのバージョン設定で、「このリストのアイテムを編集するたびにバージョンを作成する」が有効になっている必要がある。
- 承認機能を有効化している場合は、詳細オプションの「マイナーバージョンを含める」をはいにする。
注意点2
- 新規アイテムの場合は、全ての列がfalseなってしまいます。
- 変更アイテムの場合、更新日時が必ずtrueになりますので、これがfalseかどうかで新規/変更アイテムの区別を行います。
条件:対象列の変更以外は終了
画像のようなイメージです。
上記出力より、
①列が変更されています「期限」 又は、「何日前」の列がtrue の条件がいいえの場合は終了します。
②さらに、「更新日時」の列がfalseの場合 も条件に追加します。
※新規アイテムの場合に対応するため必要です。
注意点
条件右側のtrue / false は数式モードで入力する必要があります。
これで、任意の列が変更されたとき、かつ新規投稿の場合も動作するフローのできあがりです。
これ以降は任意の処理を記述します。
時間からの減算:通知日の計算
以下のように設定します。
注意点
データ型に時刻情報が含まれる場合は、タイムゾーンに注意してください。
※UTC→JSTへの変換が必要です。
項目の更新:通知日のセット
計算された通知日をセットします。
このアクションにより、フローが再トリガーされてしまいますが、条件分岐でフローが取消されるため無限ループは発生しません。
注意点
動作対象の列の値を変更してしまうと無限ループが発生します。
必ず同じ値を設定しましょう。
SharePointフォームの設定
データ入力の際、通知日列を非表示にしたい場合はフォームの設定で消しておきます。
追記
ごめんなさい
新規登録の場合の考慮が漏れていたのでフローを修正しました。