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

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

Power Apps でローカルからアップしたファイルをSharePoint のドキュメントライブラリに保存する ~その1~


スポンサードリンク

はじめに

今回はPower Apps でローカルからアップロードしたファイルをSharePoint のドキュメントライブラリに保存する方法を3パターン纏めたいと思います。

Power Apps でローカルからアップしたファイルをSharePoint のドキュメントライブラリに保存する ~その2~
Power Apps でローカルからアップしたファイルをSharePoint のドキュメントライブラリに保存する ~その3~

参考文献

Power Apps Easiest Way To Upload Files To A SharePoint Document Library

Power AppsからExcelファイルを取り込んでDataverse for Teamsにデータ登録 - MoreBeerMorePower

Power Appsにおける画像の扱いについて - Qiita

各やり方の特徴

1つ目

まず1つ目はSharePoint リストを経由してドキュメントライブラリに保存する。という方法です。
多分このやり方が理論的には一番簡単です。

メリデメは各やり方を記載したあとに纏めますが、本来不要なSharePoint リストを用意してあげなきゃいけないです。

2つ目

2つ目のやり方は、Power Apps にアップロードされたファイルのコンテンツ情報をdatauri に変換してPower Automate に渡し、ドキュメントライブラリにファイルを保存する。という方法です。

これは、Power Apps でのファイルの扱いについて理解しているかどうか?で理解度が変わってくるかと思います。

3つ目

3つ目のやり方は、Power Automate のPower Apps V2 トリガーを利用する。という方法です。
Power Apps V2 トリガーを利用することにより、トリガー内でデータ定義を行えるようになりました。

恐らく今後Power Apps とPower Automate 間でのファイルの受け渡しといえばこの方法が主流になってくるんじゃないかな?とか個人的には考えています。
ただし後述しますが、このやり方では実現できないこともあります。

Power Apps からアップロードされたファイルをSharePoint ドキュメントライブラリに保存する

Power Apps でローカルからファイルをアップロードするためには、添付ファイルコントロールが必要です。

ただしこれを利用するためには、SharePoint リストなどのデータソースで添付ファイルを含む列を作成し、そのデータソースへの追加 / 編集を行うためのフォームコントロールを配置することで、初めて得られることができます。

f:id:koruneko:20210704200026g:plain

そうして得られたコントロールをフォーム外へコピペし、エラー内容を取り除くことで初めて利用できるコントロールとなっています。

ただ毎回この操作やるのめんどくさいですよね?

なので、このように、コンポーネント化しておくことを推奨します。

f:id:koruneko:20210704200404p:plain

こうすることにより、比較的簡単に添付ファイルコントロールを扱えるようになります。

SharePoint リストを経由してドキュメントライブラリに保存

まずは、ファイルを一時保存するためのSharePoint リストを作成します。
添付ファイルの項目以外はとりあえず今回は不要なので、必須入力を外しておきましょう。

タイトル(Title)項目が必須入力になっていると思いますので、サイトコンテンツより対象リストの設定を開き、タイトルの必須入力を外します。

f:id:koruneko:20210706001623p:plain

Power Apps を開き、データから先ほど追加したSharePoint リストを選択します。

f:id:koruneko:20210706002859p:plain

編集フォーム(フォーム > 編集)を追加し、データソースに先ほどのSharePoint リストを設定します。

添付ファイルコントロールが表示されていなければ、フィールドの編集より添付ファイルを追加します。

ボタンもしくは、Screen の OnVisible

NewForm(Form1)

を追加します。

これで、フォームを新規で登録できるようになりました。

続いてフォームの内容をリストに保存する処理を記載します。
ボタンを追加して OnSelect

SubmitForm(Form1)

を設定します。

これで添付ファイルをSharePoint リストに登録することができました。

次にSharePoint リストにデータが追加されたことをトリガーに動くフローをPower Automate で作成します。

全体のフローはこんな感じです。

f:id:koruneko:20210706004141p:plain

"サイトのアドレス"及び"リスト名"には先ほど作成したリストを選択するように設定します。

"添付ファイルの取得"及び"添付ファイルのコンテンツの取得"アクションの"ID"には"項目が作成されたとき"で取得したIDを用います。

@{triggerOutputs()?['body/ID']}

"添付ファイルのコンテンツの取得"の"ファイル識別子"には"添付ファイルの取得"で取得したファイル識別子を用います。
これを設定すると、Apply to each が追加されます。
添付ファイルの取得では複数項目を返す可能性があるからですね。

@{items('Apply_to_each_2')?['Id']}

"ファイルの作成"の"ファイル名"には"項目が作成されたとき"で取得したDisplayName を使用します。

@{items('Apply_to_each_2')?['DisplayName']}

"ファイルコンテンツ"には"添付ファイルのコンテンツの取得"で取得した添付ファイルのコンテンツを利用します。

@{outputs('添付ファイルのコンテンツの取得')?['body']}

処理の流れを簡単に説明しますと(かいてあるままですが。。。)

  1. ユーザがPower Apps でファイルを読込
  2. 1で読込んだファイルをPower Apps からSharePoint リストへ追加
  3. 2をトリガーにフローが実行
  4. SharePoint リストへ追加されたレコードの添付ファイルを取得
  5. 添付ファイルのファイルコンテンツを取得
  6. 4, 5の内容をもとに指定のSharePoint ドキュメントライブラリへファイルを作成

となっています。

ここまでみながら作成されてみた方の中で、
「実際に試してみたけどフローが動かない!」
という方がおられるかもしれません。

それはPower Automate の制限によるものです。
詳しくは以下公式ドキュメントをご確認ください。

制限と構成 - Power Automate | Microsoft Docs

もしくはPower Automate の画面にて、"Ctrl + Alt + A"を押してプラン情報を参照してみます。

こんな感じのJSON 形式のデータをみることができます。

f:id:koruneko:20210706012719p:plain

これの"maximumRecurrenceFrequency"となっている箇所がトリガーの実行間隔の値になります。
この値の単位は[秒]です。

複数"maximumRecurrenceFrequency"が表示されている場合は、そのユーザに複数のライセンスが割り当てられているということになります。
この場合、最も短い時間が適用されます。

このように、フローはリスト追加後すぐには動かないので、少し待ってから確認をしてみてください。

おわりに

この方法のメリットは以下です。

  • 処理のロジックが簡単
  • 複数ファイルを作成できる

ですが、以下デメリットがあります。

  • 無駄にSharePoint リストを作成する必要がある
  • 処理のタイミングが即時じゃない

次回紹介するファイルのコンテンツ情報をdatauri に変換してドキュメントライブラリに保存する方法は少しロジックが難しいかもしれませんが、複数ファイルを処理でき、また、即時でファイルがSharePoint ドキュメントライブラリに作成することがきます。


スポンサードリンク