はじめに
このブログではPower Appsでのファイルの取り扱いのあれこれについてまとめています。
Power Appsでファイを利用する
ローカルのファイルをPower Appsにアップロードする
ローカルからPower Appsに対してファイルをアップロードするにはAttachments コントロールを利用します。
このコントロールは少し特殊なコントロールで、他のコントロールと同じように「挿入」からアプリにコントロールを追加することはできません。
どうやって追加するか?というとSharePointリストやDataverseなどのデータソースから作成したアプリからコピペしてきます。
毎回このような作業を行うのがめんどくさいなーという場合はコンポーネント化しておいて利用するとよいかもです。
どこに保存される?
この方法でアップロードしたファイルは appres://blobmanager/path/n
に一時保存されます。
BlobのURLですね。
これは添付ファイルコントロールのValue
プロパティから参照することができます。
path
は固定ではなくアプリを起動する度に変わるので、予め定義したりすることはできません。
n
は"1"から始まり、今起動しているセッションでファイルを追加するごとに"1"ずつ加算されていきます。
このURIはPower Appsが識別するためのものなのでこのURIをブラウザで直接開いたとしてもファイルが開けたりダウロードできたりするわけではないです。
SharePointリストの添付ファイルをPower Appsで利用する
ファイルを参照する
SharePointリストに保存されている添付ファイルは、添付ファイル列(既定の列)の表示名、もしくは'{Attachments}'
で参照することができます。
取得できるのはこの4要素です。
プロパティ名 | 説明 |
---|---|
AbsoluteUri | そのファイルを開くためのリンク (Launch関数でそのまま開くとファイルがローカルにダウンロードされます) |
DisplayName | ファイルの名前 |
id | ファイルの相対パス |
Value | アプリから添付ファイルの値を参照するための値 |
ちなみに添付ファイルコントロールのItems
プロパティにSharePointリストの添付ファイル列を参照した値を設定すると、ローカルからファイルをアップロードしたときとプロパティの値が異なってきます。
ローカルからアップしたファイルはValue
プロパティを参照するとappres://blobmanager/path/n
という結果が得られましたが、SharePointリストを参照するようにするとSharePointリストの添付ファイル列を直接参照した際の値が得られます。
ただし、このとき得られるのはSharePointリストの添付ファイル列を直接参照した時に得られた、Value
プロパティの値ではなくid
プロパティの値です。
少し間違えやすいので注意が必要ですね。
ファイルを開く
ファイルを開くにはAbsoluteUri
プロパティをLaunch 関数で開いてあげます。
ただし、そのままこのプロパティの値を開くとファイルがダウンロードされてしまいます。
もしブラウザで開きたいのであれば、?web=1
パラメータを渡して開く必要があります。
例えば以下のようになりますね。
Launch(First(ThisItem.添付ファイル).AbsoluteUri & "?web=1")
もしくは
Launch(First(ThisItem.添付ファイル).AbsoluteUri, "web", 1)
ファイルを保存する
Power Appsから添付ファイル列にファイルを保存するには2つの方法があります。
まず1つ目がフォームコントロールを用いてSubmitForm 関数を使って登録する方法。
これは皆さんご存知だと思うので詳しいやり方は割愛します。
もう一つがCollect 関数で登録する方法です。
以下のような式で作成することが可能です。(<>の箇所は適宜置き換えてくださいね。)
Collect( <SharePointリスト名>, { Title: GUID(), '{Attachments}': Table( { DisplayName: First(<Attachments コントロール>.Attachments).Name, Id: GUID(), Value: First(<Attachments コントロール>.Attachments).Value } ) } )
ちなみにPatch 関数では作成できないはずです。
Dataverseの添付ファイルをPower Appsで利用する
ファイルを参照する
Dataverseのファイル列を参照すると以下2要素を取得できます。
プロパティ名 | 説明 |
---|---|
FileName | ファイルの名前 |
Value | アプリから添付ファイルの値を参照するための値 |
ちなみにAttachmentsコントロールにいれると、Name
もValue
もFileName
になりました。
ファイルを開く
まず前提としてDataverseのファイル列にはバイナリデータが格納されることになります。
ここでいうバイナリデータとはファイルのバイナリデータですね。
ファイル列には、バイナリ データが格納されます。 ファイル列は、任意のカスタムまたはカスタマイズ可能な Dataverse テーブルにすることができます。
SharePointリストの添付ファイル列のようにファイル自体をどこかに持っているわけではないのですね。
よってDataverseのファイルを開いたりダウンロードしたければバイナリデータをもとに一度ファイルを作成してあげる必要があります。(多分。正直あんまり自信ないです。え、Power Appsのキャンバスアプリでの利用あまり考えられてなくない?使い勝手悪いが?というのが正直な感想)
ファイルのバイナリデータを取得するにはPower Appsで取得するのであれば、後述の「SharePointのドキュメントフォルダにファイルを作成する」のところでも紹介している過去記事で紹介している方法で取得できます。(紹介しているのはSharePointですが、Value
を参照すれば取得できます。)
もう一つがPower Automateの以下コネクタを利用する方法ですね。
多分こっちの方が良いと思います。シンプル。
また、公式でもこのやり方が紹介されてますね。
ファイルを保存する
保存するには
- SubmitForm
- Patch
- Collect
のいずれかを利用します。
PatchもしくはCollectで登録する際は以下フィールドを渡します。
{ FileName: <Attachments コントロール>.Name, Value: <Attachments コントロール>.Value }
おまけ
SharePointのドキュメントフォルダにファイルを作成する
過去にまとめた記事あるのでこちらを参照してくださいな。
おわりに
説明間違っていたりもっといい方法あればコメントで指摘お願いします!