コルネの進捗や備忘録が記されたなにか

進捗や成果物や備忘録てきななにかを雑に更新していきます。

Power Appsでのファイルの取り扱いについて


スポンサードリンク

はじめに

このブログでは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コントロールにいれると、NameValueFileNameになりました。

ファイルを開く

まず前提としてDataverseのファイル列にはバイナリデータが格納されることになります。
ここでいうバイナリデータとはファイルのバイナリデータですね。

learn.microsoft.com

ファイル列には、バイナリ データが格納されます。 ファイル列は、任意のカスタムまたはカスタマイズ可能な Dataverse テーブルにすることができます。

SharePointリストの添付ファイル列のようにファイル自体をどこかに持っているわけではないのですね。

よってDataverseのファイルを開いたりダウンロードしたければバイナリデータをもとに一度ファイルを作成してあげる必要があります。(多分。正直あんまり自信ないです。え、Power Appsのキャンバスアプリでの利用あまり考えられてなくない?使い勝手悪いが?というのが正直な感想)

ファイルのバイナリデータを取得するにはPower Appsで取得するのであれば、後述の「SharePointのドキュメントフォルダにファイルを作成する」のところでも紹介している過去記事で紹介している方法で取得できます。(紹介しているのはSharePointですが、Valueを参照すれば取得できます。)

もう一つがPower Automateの以下コネクタを利用する方法ですね。

多分こっちの方が良いと思います。シンプル。

また、公式でもこのやり方が紹介されてますね。

learn.microsoft.com

ファイルを保存する

保存するには

  • SubmitForm
  • Patch
  • Collect

のいずれかを利用します。

PatchもしくはCollectで登録する際は以下フィールドを渡します。

{
    FileName: <Attachments コントロール>.Name,
    Value: <Attachments コントロール>.Value
}

おまけ

SharePointのドキュメントフォルダにファイルを作成する

過去にまとめた記事あるのでこちらを参照してくださいな。

koruneko.hatenablog.com

koruneko.hatenablog.com

koruneko.hatenablog.com

おわりに

説明間違っていたりもっといい方法あればコメントで指摘お願いします!


スポンサードリンク