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

※添付コントロールを使うために必要。

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






この方法(V2トリガー経由)は実装が手軽ですが、扱えるファイルサイズに上限があります。
- 推奨サイズ: 50MB程度まで
- リスク: それ以上のサイズ(特に70MB超)になると、Power Automateの処理制限やタイムアウトによりエラーになる可能性が高くなります。
動画などの大容量ファイルを扱う場合は、この方法ではなくAzure Blob Storageを経由するなどの高度な設計が必要になります。
Power Appsの作成
続いてPower Appsの作成。



※エラーが出てるXとかYとかのプロパティは任意の値を設定し、Itemsプロパティは「空」に設定してOK

これでUIも完成。
Power AppsからPower Automateを呼び出す

※複数アップロードしたい場合については後述。

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



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

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

※同じ名前のファイルがある場合は上書きされる。

画像コントロールを使用してdataUriを取得してアップロードする方法もあるけど、個人的にはこちらの方法の方が簡潔に実装できるのでおすすめ。
上記のように ForAll 関数の中に Run を入れる実装は、「添付ファイルの数だけPower Automateのフローが起動」します。
例えばファイルを10個添付してボタンを押すと、裏側でフローが10回連続で実行されます。APIコール数を消費するため、大量のファイルを頻繁にアップロードする業務アプリでは注意してください。
※これを回避するには、Power Apps側でファイルをJSON文字列に変換してフローに渡し、フロー側でパース(解析)してループ処理する、という少し高度な実装が必要になります。



コメント