SharePoint Online のリストに登録したアイテムの内、指定された日数よりも過去の日付が列の値に設定されたアイテムを削除したいと思い、Microsoft Flow を利用すると簡単に実現できるんじゃないかと試してみました。

例えば、SharePoint Online のリストで課題を管理しているとして、課題が解決したのち 30 日経過したものは削除してしまおうというものです。

この処理を実現するための肝は、課題が解決したのち 30 日経過したアイテムがどれであるかを特定することかと思います。そのような条件を指定したアイテムの取得は SharePoint Online コネクタの「複数の項目の取得」アクションを利用することで実現できました。

「フィルター クエリ」の利用

SharePoint Online リストから指定した条件に一致したアイテムを取得するためには、SharePoint Online コネクタの「複数の項目の取得」アクションにある「フィルター クエリ」を設定する必要があります。

フィルター クエリの入力フィールドには、「エントリを制限する ODATA フィルター クエリが返されました」と書かれてあるのですが、なんのことかさっぱり分かりません。さっそく挫折しそうになります。

おそらく REST API の $filter クエリだろうなあと推測しながら設定してみたところ上手く動きました。実際の設定は次のようになります。

Completed lt '@{addDays(utcNow(),-30,'yyyy-MM-ddTHH:mm:ssZ')}'

Completed は、リストに作成した課題解決日を入力しておく列の内部名です。比較は lt ですので左側の値が右側よりも小さいものという条件、その右側の値の @{} の中にある addDays() は Microsoft Flow の関数で、実行時の現在時刻から 30 日を引いた日付を返すように設定しています。関数の部分は Microsoft Flow の設定画面では式エディタを利用するので、実際には次のような感じです。

これで、指定した期間よりも古い日付が指定されてるアイテムを抽出することができます。あとは、抽出したアイテムを「項目の削除」アクションに渡して削除します。

フローの全体像は次のようになります。日次でチェックするようにトリガーは 1 日おきに繰り返すようにしておきます。

あとは、わくわくしながら上手く実行されるかを確認するだけです。

動作を確認してみる

次のようなリストに対して実行してみます。

フローが動くと…、

ちゃんと古い日付が指定されたアイテムだけを削除できました。

さいごに

Microsoft Flow を利用して SharePoint Online のアイテムを自在に扱うためには、このあたりのフィルターを上手く使いこなせると幅が広がりそうだなあと思いました。

今回紹介したフィルター クエリで利用できるフィルターの種類などは、次のリンク先にまとまっています。

Use OData query operations in SharePoint REST requests
https://docs.microsoft.com/en-us/sharepoint/dev/sp-add-ins/use-odata-query-operations-in-sharepoint-rest-requests

少しだけの知識があると、いろいろ出来るのが Microsoft Flow の良いところですね。