MoreBeerMorePower

Power Platform中心だけど、ノーコード/ローコード系を書いてます。

Power Automate に SharePoint の新しいトリガー「アイテムまたはファイルが修正されたとき」が追加されました!

はじめに

一部の方には待望だったと思います。Power Automate で利用可能な SharePoint のトリガー 「アイテムまたはファイルが修正されたとき」 が追加されました!

これまであったトリガーはいずれも、「作成または変更」で問答無用にトリガーされていたため、更新だけに注目してトリガーするような場合には少しテクニックが必要でした。

また、更新の場合も、フローを進めるために必要な列 (例えば "承認ステータス" など) 以外の変更も検出してしまったため、意図せずフローが実行されるか、それを抑止するために、アイテムの中で自分のキャッシュを持たせるような設計が必要でした。

f:id:mofumofu_dance:20200728110146p:plain
従来は「作成または変更」でトリガー

今回の新しいトリガー 「アイテムまたはファイルが修正されたとき」によって アイテム・ファイルの更新 だけで発火するフローが作れるようになります。

また、同時に追加されたアクション 「アイテムやファイルの変更を取得する (プロパティのみ)」 を利用することで、どの列が更新されたか (更新あり/なし の2値) を取得することも可能です。

f:id:mofumofu_dance:20200728110920p:plain
追加されたトリガーとアクション

動作確認

非常に簡単なSharePoint リストを例に動作を確認します。 f:id:mofumofu_dance:20200728112046p:plain

フローの方では下図のような設定を施しました。最初迷うのは 「以降」と「期限」かと思います。

変更を検出する開始と終了のバージョン、タイムスタンプ、または Trigger Window Start Token/Trigger Window End Tokenで指定ができます。

「アイテムまたはファイルが修正されたとき」と組み合わせる場合には、 Trigger Window Start Token を指定するのがよさそうです。

f:id:mofumofu_dance:20200728111950p:plain
組み合わせ例

用意したリストで、Status列を変更してみます。

f:id:mofumofu_dance:20200728112618p:plain

この時、フローでは・・・なるほど失敗しています。どうやらバージョニングを有効にしている必要があるようです。

f:id:mofumofu_dance:20200728113002p:plain

再度バージョニングを有効にしてアイテムの変更をします。結果は以下の通り、変更があった列ではtrue、変更のない列はfalseが返ってきました。

f:id:mofumofu_dance:20200728113253p:plain

「どの値からどの値になったか」は、このアクションではわかりません。

これを取得するためには、一つ前のバージョンと最新のバージョンに対してそれぞれ、SharePoint へのHTTP要求を利用してアイテムを取得し比較するようなフローを作成する必要がありそうです。

おわり

  • SharePointのトリガー 「アイテムまたはファイルが修正されたとき」 が追加されました
  • 追加されたSharePointのアクション 「アイテムやファイルの変更を取得する (プロパティのみ)」では、変更があったかどうかを列ごとに取得できます
  • ただし、変更前後の列の値が必要な場合には、SharePointAPIで特定バージョンのアイテムを取得して自前で比較をする必要があります

追記

更新前のアイテムとの比較はやはり「SharePoint に HTTP 要求を送信します」アクションが必要でした。

「アイテムやファイルの変更を取得する (プロパティのみ)」アクションによって一つ前のバージョン番号がわかるので、それをもとに以下のようなリクエストを行います。

GET /_api/web/lists/getbytitle('リスト名')/items(アイテムのID)/versions(バージョンID)

f:id:mofumofu_dance:20200728142637p:plain
左: トリガーから得られたアイテムの情報、右 : 一つまえのバージョンをAPIで取得した結果