Power Automate for desktop「flowsessionのデータ保存ポリシーを制御してDataverseの容量を節約する」

## 概要

 Power Automate for desktopを企業が利用する場合、Per-User plan attended RPA （アテンド型RPAのユーザーごとのプラン）を強く推したい理由は沢山あります。特にプレミアムコネクタを含むDPA RPAフローの作成および共有、そしてログを取得できる機能は無償版との大きな違いです。遠隔地にある実行マシンで問題が起きた場合、キャプチャされたスクリーンショットとログを追うことで対応可能です。しかし、強力な管理機能を持つ一方で、基盤にあるDataverseの容量を圧迫していきます。

![CleanShot 2023-05-17 at 00.32.15@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/a9cac3b6-20dd-78d2-3806-68ac4a1afe09.png)
気がつけば・・・。
![CleanShot 2023-05-17 at 01.05.52@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/756151c2-850d-50ee-6427-de881f4da138.png)

容量をどんどん買い足せるなら問題ありませんが、予算の都合上簡単ではないと思います。今回はDataverse組み込みの一括削除機能を利用してデータ保持ポリシーを実装し、必要なデータを必要な期間だけ保存管理することについて書きます。

## 注意事項

- Learnに沿った内容（にしたつもり）ですが個人的見解が含まれる可能性がありますので自己責任でお願いいたします。
- 有償環境が前提となります。
- マシンを管理（監視）するためにはWindows10または11のProが必須です。
- 検証環境はMicrosoft 365 開発者プログラムとPower Automate Per-User plan attended RPA試用版を利用させていただいています。
- ログ保存期間等は社内監査要件にも関係すると思いますので十分な検討、検証が必要です。
- Learnにもありますが削除すると2度と戻せません。
- ログを取るためにはマシンを登録する作業が必要ですが、今回は触れません。以下のリンクを参照して下さい。
- 一括削除をするための権限が必要です。

https://learn.microsoft.com/ja-jp/power-automate/desktop-flows/manage-machines

![CleanShot 2023-05-17 at 00.24.18@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/fa04b90b-7328-713c-b425-3b18d035eab4.png)


## 実践

https://learn.microsoft.com/ja-jp/power-automate/desktop-flows/how-to/delete-desktop-flow-run-history

Dataverseにはデータを一定期間ごとに自動で一括削除をする機能があります。しかし注意事項にあるように削除すると2度と戻せません。そのためデータ削除および保存ポリシーについては十分検討する必要があります。

Learnにありますようにフローセッション(flowsession)とワークフロー バイナリ(workflowbinary)のデータ量が主に肥大化しやすいようです。フローセッションとワークフロー バイナリはカスケード関係にあるためフローセッションを削除すればワークフロー バイナリも削除されます。そのためフローセッション(flowsession)をターゲットにクエリを組みます。

まず現状の確認をします。
今回操作する環境は244.24MBとそこまで多くありませんが、これで試していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/2c35f2ff-5072-4d38-8c3f-bd1b16462758.png)

Learnには次のような設定例があります。
```Completed On | Older Than X Months | 6```

Learnあるあるだと思うのですがSSが英語版のままであったり、本文のローカライズが中途半端なため何を指しているのかわかり難いです。特にDataverseを日本語環境で使っている場合、Learnあるテーブル名や列名の訳が何を指しているのか探しにくいと思います。なので、まずターゲットのテーブルを確認します。

Power Apps　「テーブル」＞「すべて」　から「flowsession」を検索します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/76f0951c-e920-1522-ce1f-797b87700f23.png)

フローセッションを開いた後、「スキーマ」＞「列」をクリックして確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/b67ba76b-78d8-141a-3f8e-bab1781da272.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/436701d3-a9da-7a4d-16e9-8164399bd58a.png)

flowsessionは「フローセッション」Completed On は「完了日」ということがわかりました。
これをもとに一括削除を設定します。

Power Platform 管理センターに移動して該当環境の設定を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/a9fef326-d7ba-caa0-7708-a6616288fa3d.png)

データ管理を展開して一括削除をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/5c428b05-e512-728d-2726-7a55e372e816.png)
新規からクエリーを作っていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/5a2885c4-6fe8-e535-b60a-8780580ca044.png)

一括削除ウィザードが開いたら次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/c729ac1c-2814-3100-f42c-7d3d1352b799.png)

データ保存のポリシーと確認したデータをもとにクエリを作成します。
まず6か月以上前の成功したログを確認してみます。
一番左の🔽を展開すると検索クエリ行を選択できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/f5f0fee5-625c-4c8e-1f91-afeb7c4d7874.png)
選択した状態で「かつ」でグループ化でANDとなるのでレコードをプレビューします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/b4ffd6c7-3fb7-c5bb-22cb-eaf1f4c55213.png)
1360件あるのがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/815b0613-3a3f-c2b6-ffbe-e582dd2fdc5c.png)

さらに特定のフローのログは残すようにクエリを追加しました。

関連（プロセス）を選択し「プロセス名」を**次の値と等しくない**として、特定フローのログを**削除から除外**できます。
Power Automate for desktopのフロー名は環境内に重複できないためそのまま**フロー名を指定**可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/4e7ecbd0-51bf-8778-f831-f93535ea1e62.png)

レコードのプレビューで確認したら「次へ」で進みます。
実行計画を作成します。
ジョブの実行間隔にチェックを入れることで定期的に自動実行されます。
一括削除は誰も使わない時間帯に行うのが良いみたいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/51c3fed4-27ec-dc47-b745-d431303d794a.png)
計画が出来たら「次へ」で進み「送信」を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/ff7151a6-0862-b6be-fd30-43968f65962d.png)

## 結果確認

実行計画から十分時間を空けてPower Platform 管理センターで確認します。

![CleanShot 2023-05-22 at 12.31.45@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/9b6f578d-f061-f113-468b-335d400c91f8.png)

244.24MBが44.9MBになりました。
また一括削除対象から除外したフローのログも残っているのが確認できました。

![CleanShot 2023-05-22 at 12.38.45@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/680039/8f00888f-d39f-6dee-e145-0e1bcac40a92.png)

ただ気になるのは「このジョブが完了したら（xxx@xxx）にメールを送信する」にチェックを入れていましたが通知は来ていませんでした。Production環境でもメール来なかったので他に何か設定あるのでしょうか・・。

## まとめ

　一括削除の機能はとても便利なので活用した方が良いです！
何をどのように残すのか、そのためにはどのくらい予算が許されるのか、監査要件など企業によって違うため調整が必要になりますが、方法を知っておくことで無駄な出費を減らすことが可能です。なお指定したフローのログを残す部分は試行錯誤しました。なので誰かしら役に立ってくれればと思います。（GUIDで指定できると思い込んでいた）

　私は忖度なしに言えるただの1ユーザーなので敢えて言わせてもらいますが、企業で利用するなら有償利用を強く推します。無料という言葉で間口を広いとは思うのですが・・・。有償範囲を使う企業とはどんどん差が開くと思います。一人分の日当にも満たない月額利用料で、できる範囲に違いがありすぎです。例えばこうしたツールを扱える人材を社内に増やそうと思った場合、共有機能やログ機能があるだけで、コードレビューやコンポーネント配布のような使い方ができるので効率が違いすぎます。批判を覚悟でいうなら無料範囲でやっている限り、野良VBAのようなことを繰り返すのが目に見えています。

ただし控えめに言ってもLearnの内容はわかり難いです。日本語ページは翻訳がが中途半端で、雑さが目立ちます。今回はかなりマシな方ですが、それでも怖い部分を触るので辛いです。そのために開発環境で練習しろよということなんだと思いますが・・・。　了