Dataverse のデータを Power Automate で Azure Storage へ出力する

# はじめに
Dataverse のテーブルにレコードが追加された際に、Power Automate を使用して追加データを Azure Blob Storage へ CSV で出力する方法を検証しました。

フロー
1. トリガー：行が追加、変更、または削除された場合
2. 変数を初期化する
2. 配列変数に追加
2. JSON の解析
2. CSV テーブルの作成
2. BLOB を作成する (V2)

# 準備：Dataverse にテーブル作成
Power Apps で Copilot を使用して適当にテーブルを作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478068/b899d43e-e393-46e8-bf04-4d5235e8a989.png)

# 1. トリガー：行が追加、変更、または削除された場合
行が作成（追加）されたときにトリガーされるように設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478068/d04a4ef6-f2e7-4803-8fee-687cb85c524e.png)

# 2. 変数を初期化する
追加された行のデータ（オブジェクト）を格納するための配列変数を定義

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478068/ac27114c-de05-477c-8a54-03cbf398aa6b.png)

# 3. 配列変数に追加
トリガーから渡された追加された行のデータ（オブジェクト）を配列変数に追加

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478068/500fd14b-3ca4-494a-8dab-4334477a4e7b.png)

# 4. JSON の解析
配列となった追加データに対して JSON の解析を実行
スキーマは自動作成されたフィールドも含めてすべて定義（抜粋することも可）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478068/cfd970ee-63fc-4d78-974e-933904fdf412.png)

# 5. CSV テーブルの作成
読み取ったフィールドから CSV テーブルを作成
このとき必要なフィールドに対して列名を定義

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478068/f8b4c9c0-9bd5-408b-82d5-a7cc6536b3be.png)

# 6. BLOB を作成する (V2)
事前に Azure Blob Storage の接続を作成
今回はアクセスキーを使用

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478068/9f1ccf0e-42d4-48ef-8cd8-949325856838.png)

出力先とファイル名を設定
Blob content には以下の関数を設定（CSV データの先頭に UTF-8 の BOM を付けて、文字化けしないようにしている）

```
concat(decodeUriComponent('%EF%BB%BF'),body('CSV_テーブルの作成'))
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478068/6440449f-9760-415c-b54c-9eebd5f1727a.png)

# テスト
Dataverse にデータを追加して挙動を確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478068/288e3154-03a6-4e17-943d-9e1ec2e8e263.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478068/752330e1-f118-4fac-ba1e-92779b8bcbf7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478068/5454bbd7-93d8-47ce-8998-fae87dee2879.png)

追加されたデータのうち CSV テーブルで定義した列のみが出力されていることを確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478068/ec9fef52-a923-4916-a5c1-aa594d2da967.png)

# 注意点
* 1行だけ追加した場合、トリガーの出力がオブジェクトとなるため配列に変換している
→　複数行を追加した場合は出力が配列になる可能性あり（未検証）
* Azure Blob コネクタでアクセスキー接続する際は完全なエンドポイントを指定する必要あり（ストレージアカウント名だけではNG）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478068/1020b106-63a6-40ab-a97a-2b9d1d8eea8f.png)

https://learn.microsoft.com/ja-jp/connectors/azureblob/#blob-%E3%82%A8%E3%83%B3%E3%83%89%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88-%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6azure-blob-%E3%82%B3%E3%83%8D%E3%82%AF%E3%82%BF%E3%81%AB%E6%8E%A5%E7%B6%9A%E3%81%99%E3%82%8B

* Power Automate で Azure Blob コネクタを使用する場合、ファイアウォール背後にあるストレージアカウントへの接続は不可

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3478068/cc43cb4a-a8a6-4c3a-b07f-8e84b9ca91b4.png)

https://learn.microsoft.com/ja-jp/connectors/azureblob/#%E6%97%A2%E7%9F%A5%E3%81%AE%E5%95%8F%E9%A1%8C%E3%81%A8%E5%88%B6%E9%99%90%E4%BA%8B%E9%A0%85