こんにちは!
今回はDataverseでの添付ファイル(ファイル列ではない)をPower Automateで扱う方法をご紹介しますー!
Dataverseテーブルの設定を編集する際に表示される、「添付ファイルを有効とする(メモとファイルを含む)」にチェックを入れたときの添付ファイルをPower Automateで扱う方法をご紹介します。
前提
「添付ファイルを有効とする(メモとファイルを含む)」を選択すると標準テーブルの「メモ」テーブル(英語名:「Note」、スキーマ名:「annotation」)とのリレーションが作成されます。
直接テーブルに列が作成されるのではなく、リレーションを作り「メモ」テーブル側に保存がされるようになります。
標準テーブルとは
Dataverseがある環境を作成した時に自動的に作られるテーブル。
https://learn.microsoft.com/ja-jp/power-apps/maker/data-platform/types-of-entities
メモテーブルについては以下を参照ください。
アプリ側(キャンバスアプリとモデル駆動型アプリ)で添付ができるようになります。
キャンバスアプリでは、フォームなどテーブル操作をするコントロールに「Attachments」という項目が追加され、そこで添付ができるようになります。
モデル駆動型アプリでは「タイムライン」というコンポーネントで添付ができるようになります。
詳細はこちらの記事が参考になります。
Power Automateで添付ファイルを扱う
今回は以下の画像のような流れでフローを組み、承認フローの中でファイルを添付するというアクションを行いたいと思います。
トリガー
トリガーに「行が追加、変更または削除された場合」を使用します。
今回は行が追加されたときの、その新規行のファイルデータをこの後のアクションで扱っていきたいと思います。
メモテーブルの「objecttypecode」列に「親レコードのテーブル論理名(*)」が保存されています。今回はこのテストテーブルに紐づけられる行のみに絞りこみをするために、「行のフィルター」で指定します。
種類の変更:追加
テーブル名:「メモ」テーブル(英語名:「Note」)
スコープ:Organization
行のフィルター:
objecttypecode eq '親レコードのテーブル論理名'
(*)
「親レコードのテーブル論理名」は以下の方法で取得します。
テーブルの詳細画面で[プロパティ]>[高度なオプション]を開き、論理名をコピーします。
添付ファイルがテストテーブルに追加されても、もとのテストテーブルの列のアップデートがされるわけではありません。
こちらのトリガーでは、メモテーブルを指定することで、「(モデル駆動型アプリで)タイムラインの添付ファイルが追加されたとき」「(キャンバスアプリで)Attachmentsが追加されたとき」の指定をしています。
「テストテーブルに変更があったとき」にしたい場合は、テストテーブルを指定してください。そして、次のアクションで、「行を一覧にする」アクションなどでフィルタリングします。
「行を一覧にする」アクションでの指定方法について後述
# おまけ:「行を一覧にする」アクションでの行指定方法
ファイルの利用方法
今回は取得したファイルの情報を承認アクションの中で使用します。
承認アクションについて、今回は承認の種類として、「開始して承認を待機」を選択しました。
承認アクションの中の項目は以下の画像のように指定しました。
大事な添付ファイルについて解説します。
ファイルの名前は動的なコンテンツのなかから「File Name」を選択します。
次にファイルコンテンツを指定します。
base64ToBinary式を使用します。
[添付ファイル コンテンツ -1]をクリックし、右のポップアップから[式]を選択
以下の式を入力し、[OK]ボタンをクリック
base64ToBinary(triggerOutputs()?['body/documentbody'])
動きの確認
今回は以下のようにモデル駆動型アプリのタイムラインコンポーネントでメモを追加します。
承認アクションが実行され、Teamsに以下のように通知が届き、添付ファイルをクリックすると、ダウンロードできます。
中身を見ていくとpdfやjpg、pngなどのファイルを開くことができます。
おまけ:「行を一覧にする」アクションでの行指定方法
テーブル名:「メモ」テーブル(英語名:「Note」、スキーマ名:「annotation」)
「objecttypecode」列に「親レコードのテーブル論理名」、「objectid」列に「親レコードのID(*)」が保存されています。
行のフィルター:
objecttypecode eq '親レコードのテーブル論理名' and _objectid_value eq '親レコードのID'
(*)
「親レコードのID」は今回、トリガーになっているテストテーブルのGUIDのため、「20231218test」(テーブル名と同じ名前の列)の値を設定します。
Odataクエリで検索列は以下のように指定します。(NAME
に列名)
_NAME
_value