Power Apps 添付ファイルコントロールからSharePointへ直接アップロードする方法(V2トリガー活用)

Power AppsからSharePoint Online(以降SPO)のドキュメントライブラリにファイルをアップロードする方法についてメモ。

スポンサーリンク

事前準備

まずはSPOにファイルをアップロードするドキュメントライブラリを作り、
SPOリストを1つ作成する。
※添付コントロールを使うために必要。

これで準備は完了。

Power Automateの作成

まずはPower Appsから呼び出してファイルをアップロードするためのPower Automateを作成する。

Power Apps(V2)トリガーのフローを作成し、
ファイル型の引数を追加する。

そしたらSharePointのアクション「ファイルの作成」を追加して、準備で作成したドキュメントライブラリとそのサイトを選択し、[ファイル名]に「triggerBody()[‘引数名’][‘name’]」を、
[ファイルコンテンツ]に引数自体(厳密にはcontentsByte)を入れる。
これでPower Automateの構築は完了。
⚠️ ファイルサイズに関する重要な注意

この方法(V2トリガー経由)は実装が手軽ですが、扱えるファイルサイズに上限があります。

  • 推奨サイズ: 50MB程度まで
  • リスク: それ以上のサイズ(特に70MB超)になると、Power Automateの処理制限やタイムアウトによりエラーになる可能性が高くなります。

動画などの大容量ファイルを扱う場合は、この方法ではなくAzure Blob Storageを経由するなどの高度な設計が必要になります。

Power Appsの作成

続いてPower Appsの作成。

キャンバスアプリを新規作成して、事前準備で作成したリストを追加、
画面に[編集フォーム]を追加し、
データソースにSPOリストを設定すると添付ファイルのDataCardができるので、その中のDataCardValueを切り取る。
切り取ったDataCardValueを任意の画面に貼り付けてエラーを消したら準備完了。
※エラーが出てるXとかYとかのプロパティは任意の値を設定し、Itemsプロパティは「空」に設定してOK

これでUIも完成。

Power AppsからPower Automateを呼び出す

[フローの追加]から先ほど作成したPower Automateのフローを追加し、
MaxAttachments(最大添付数)を1に設定して、アップロード可能なファイルを1個に制限する。
※複数アップロードしたい場合については後述。
最後にアップロードボタンを追加し、OnSelectに以下の数式を記入したら完成。

フロー名.Run({
    フローの引数名:
    {
        contentBytes:First(添付コントロール名.Attachments).Value,
        name:First(添付コントロール名.Attachments).Name
    }
});

動作確認

アプリを再生して、任意のファイルを添付してボタンを押すと、
Power Automateが動作して、
ファイルがドキュメントライブラリに保存される。

複数ファイルをアップロードしたい場合

複数アップロードしたい場合はMaxAttachmentsをアップロードを許可する数値に変更して、
ボタンの式を以下のように変更すれば完成。

ForAll(
    添付コントロール名.Attachments As attachment,
    フロー名.Run({
        フローの引数名:
        {
            contentBytes:attachment.Value,
            name:attachment.Name
        }
    })
);
複数ファイルを添付してアップロードボタンを押すと、
ファイルが複数アップロードされる。
※同じ名前のファイルがある場合は上書きされる。

画像コントロールを使用してdataUriを取得してアップロードする方法もあるけど、個人的にはこちらの方法の方が簡潔に実装できるのでおすすめ。

💡 ForAllを使う場合の注意点(重要)

上記のように ForAll 関数の中に Run を入れる実装は、「添付ファイルの数だけPower Automateのフローが起動」します。

例えばファイルを10個添付してボタンを押すと、裏側でフローが10回連続で実行されます。APIコール数を消費するため、大量のファイルを頻繁にアップロードする業務アプリでは注意してください。

※これを回避するには、Power Apps側でファイルをJSON文字列に変換してフローに渡し、フロー側でパース(解析)してループ処理する、という少し高度な実装が必要になります。

おすすめの記事

コメント

タイトルとURLをコピーしました