ファックスの受信文書は、スパムファックスもあったりで、基本的にはずっと保存しておくものではないと思ってます。
必要なものであれば、どこか別の場所に保存するなりなんなりすべきと思うので、前回のフローで作成したPlannerのタスクが完了したら、削除したほうがよいと思います。
SharePointの容量だって無制限ではないですし。
ということで、ファックスの受信文書をクリーンアップするフローを紹介していきます。
フロー
全体
前回のPlannerのタスクを作成するフローより、少し複雑になっています。
タスクが完了してすぐ削除することにすると、間違って完了にチェックを入れたときに復活させるのに手間なので、保管期限を決めて完了後何日後に削除する、という手順を踏んでいます。
タスクの完了をトリガーにするという方法もないわけではないですが、その場合トリガーした後、保管期限到達までウェイトをかけて、その間ずっと実行中のままになるのが嫌だったので、毎日決まった時刻にクリーンアップするバッチ処理方式にしています。
トリガー
繰り返しトリガーです。毎日21時に実行します。
あと、保管期限も変数に設定しておきます。使うのは一か所だけですが、変数に入れておくことで後々保管期限を見直す際に変更しやすくなると思います。
PlannerとSharePointの情報取得
まず、SharePointに保管されたファックス受信文書をまとめて取得します。
このとき、フィルタークエリをかけて、RelatedItemId(PlannerのタスクIDを格納するドキュメントライブラリの列)が空のものを除外しています。たぶん、空でもエラーにはならないとは思いますが、念のため。
なお、フィルタークエリで絞り込めるものは、「アレイのフィルター処理」に頼るよりもなるべくフィルタークエリ(ODataクエリ)を使うようにしましょう。
Plannerのタスクはフィルタークエリが使えないので、がっくるめて全部取得しています。
SharePointのファイルでループ
SharePointのファイルのプロパティを取得してますが、「ファイルの取得(プロパティのみ)」から必要なデータは取れるので、正直これは必要なかった...
次のステップはアレイのフィルター処理です。Plannerのタスク一覧を関連アイテムID(RelatedItemId)でフィルターし、タスクを探します。
条件ステップの左辺に入っているのは以下の式です。
length(body('関連アイテムIDでフィルター'))
フィルターして、length関数で1以上なら見つかった、0なら見つからなかった、というよくやる条件分岐ですね。
lengthとfirstは、ほんとよく使います。
条件式がTrueのとき(タスクが見つかったとき)
流れとしては、関連アイテムIDのタスクを取得し、完了日時から保管期限を経過しているかを判定して、期限切れであればSharePointのファイルとPlannerのタスクを削除する(期限切れ前であれば何もしない)、という処理になります。
「タスクを取得する」アクションのタスクIDには、SharePointから取得した関連アイテムIDが入っています。(「タスクの削除」アクションのタスクIDも同様です)
次の条件ブロックには、左辺に以下の式が入っています。
addDays(body('タスクを取得する')?['completedDateTime'],variables('保管期限'))
completedDateTimeは、タスクの完了日時です。
これにaddDays関数で、「保管期限」変数の日数を加算して保管期限到来日時を求め、現在時刻(utcNow()関数)より前であれば、「はいの場合」に進みます。
「ファイルの削除」と「タスクの削除」は説明不要かと思います。
「いい絵の場合」は、保管期限到来前なので、何もしません。
条件式がFalseのとき(タスクが見つからなかったとき)
このパターンは、メモにも書いているとおり、タスクを完了ではなく、手動で削除した場合に起こりえます。
スパムファックスとかだと、問答無用でタスクを削除してしまうと、保管期限を待たずにファイルを削除してしまうこともできるようにしています。
なので、ここでは無条件に「ファイルの削除」アクションを実行しています。
まとめ
今回のフローは、社内ルールをどう決めるかによってフローの組み方も変わると思うので、皆さんの会社にあったやり方でいろいろと工夫されてみてはいかがでしょうか。
次回は、タスクを完了した際に別のWebサービスに転送するフローを照会する予定です。