Power AppsからSharePoint Online(以降SPO)のドキュメントライブラリにファイルをアップロードする方法をメモ。
事前準備
まずはSPOにファイルをアップロードするドキュメントライブラリを作って、
何でもよいのでSPOリストを1個用意する。
※添付コントロールを使うために必要。
※添付コントロールを使うために必要。
これで準備は完了。
Power Automateの作成
まずはPower Appsから呼び出してファイルをアップロードするPower Automateを作成する。
Power Apps(V2)トリガーのフローを適当な名前で「作成」し、
引数として「ファイル」を追加して適当な名前を付ける。
そしたらSharePointのアクション「ファイルの作成」を追加して、準備で作ったドキュメントライブラリとそのサイトを選択して、[ファイル名]には「triggerBody()[‘引数名’][‘name’]」を、
[ファイルコンテンツ]には引数自体を入れる。
これでPower Automateの準備は完了!
Power Appsの作成
続いてPower Appsの作成。
キャンバスアプリを新規作成して、事前準備のリスト(それ以外のリストでもOK)を追加、
画面に[編集フォーム]を追加し、
データソースにさっきのリストを追加すると添付ファイルのDataCardができるので、その中のDataCardValueを切り取る。
それを適当なところ(今回はScreen1)に貼り付けてエラーを消したら準備完了。
※エラーが出てるXとかYとかのプロパティは適当に直せばよくて、Itemsについては空にしちゃってOK
※エラーが出てる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を取得してアップロードする方法もあるけど、個人的にはこっちの方が簡潔に実装できるのでこちらの方法をよく使うかな。
コメント