【PowerApps/PowerAutomate】アプリからSharePointのドキュメントへアップロードする簡単な方法

##やったこと
PowerAppsからSharePointのドキュメントにファイルを保存する際、
SharePointリストを介することで、簡単に作成ができるという内容です。
初心者向けだと思います。


【処理概要】
・PowerAppsの編集フォームの添付ファイルにアップロードしたいファイルを添付。
・SharePointリストの項目が新規作成されたことをトリガーにワークフローが動く。
・ワークフローでリストの添付ファイル情報を取得、ドキュメントに新規ファイル作成。

というように、アップロードというよりも実質はコピーです。


【メリット】
・**JSONを使わない**
・複数ファイルも対応
・画像、Excelなどファイルの種別を問わず実行可能
・(比較的)簡単につくれる
・ドキュメントフォルダに保存することで、その後のワークフローでExcelなどの中身をいじれる

【デメリット】
・PowerAutomateのライセンスが必要
・一時保存に使ったSharePointリストを削除する必要がある。(手動orワークフロー)

##作成手順
SharePointでリスト作成
↓
PowerAppsでアプリ作成
↓
PowerAutomateでワークフロー作成


##手順1.SharePointでリスト作成
まずリストを作成します。必要な列があれば作成してください。
サンプルではタイトルだけあれば問題ないです。

列の追加はしませんが、リスト作成時にデフォルトでSharePointが作成してくれる添付ファイルとIDを非表示→表示にします。
[列の追加の右の下向きマーク]>[列の表示/非表示]をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636203/90b1d050-d162-6d3c-9748-54baee903e0d.png)


必要な項目にチェックを付けて適用を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636203/d46d91f2-36b5-28fb-bb90-0370e1d8476a.png)

ID、添付ファイルが表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636203/a2a57700-3804-7a64-3ea2-29931e291687.png)



##手順2.PowerAppsでアプリ作成

今回のサンプルでは1つのスクリーンですべて収まりました。
左側がファイル登録用の編集フォームで、右が結果を表示するギャラリーです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636203/c6ec40ee-b0ee-8ad3-1aa2-0a13ce7c82dd.png)
左に「編集フォーム」を挿入。先ほどのSharePointリストを連携します。
右にギャラリーでこちらも同じSharePointリストを連携しました。

・ScreenのOnVisibleにNewform関数
・右上の丸矢印アイコンにReflesh関数
・保存ボタンにはSubmitForm関数
・編集フォームのOnSuccessにもNewform関数
　⇒スクリーンが一つしかないので、次の入力のためにOnSuccessにもNewform関数を設定する


__……ちょっと待って！__

OnVisibleは別スクリーンから移動したタイミングで実行される為、
1スクリーンしかない今回のアプリでは実行すると……

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636203/c866a2d7-def5-7a41-88a4-8e98558b4d22.png)


OnVisibleに設定したNewform関数が実行されずに「表示するアイテムがありません」となってしまいます。

1度保存して開き直してもいいですが、最初の1度だけなら
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636203/f6ec1c82-ada5-fd93-e078-217a7ec68537.png)

このようにタイトルのOnSelectにNewform関数を設定し、
1度クリックし実行してから消しておくという方法でカバーできます。
(もしかしたらホームスクリーンを作ったほうが早いかもしれませんね。ご参考までに）


##手順3.PowerAutomateワークフロー
【作成するフロー】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636203/b956c766-7a88-092d-85a4-475b3303029c.png)


詳しく説明していきます。
フローは「自動化されたクラウドフロー」から作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636203/63988675-4576-6dc0-3127-96066a8a988a.png)

フロー名を入力。トリガーは「項目が作成されたとき」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636203/bfe5632b-2563-8654-52a1-b4a527024f4a.png)

トリガーのサイトのアドレスとリスト名を候補から選択します。
サイトのアドレスが候補から出てこない場合はSharePointサイトのURLをコピーして貼り付けてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636203/235ac6d7-0510-574b-0760-96cf70e101d6.png)

新しいステップをクリックし「添付ファイルの取得」を追加します。

「添付ファイルの取得」と「添付ファイルのコンテンツの取得」という2つのアクションがあるので間違えないようにしてください。
一番下のIDは動的な値から選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636203/8d3ea4f4-5ff3-f937-ebeb-38e40d2a1333.png)

続いて「添付ファイルのコンテンツの取得」を追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636203/f9344f75-1d8f-03f7-92b2-362ab0f4ca76.png)
上の「ID」には「項目が作成されたとき」のIDを使用しますが
下の「ファイル識別子」には「添付ファイルの取得」のIdを使用してください。


「ファイル識別子」を動的な値から選択すると、Apply to eachが自動で作成されました。
これは添付ファイルには"2つ以上のファイルが含まれていることがある"からです。
このように1つだけとは限らない値を入力した場合はApply to Eachが自動で作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636203/83d19871-0937-e7a4-96d5-785fd2869d64.png)

次のアクションはこのApply to eachの中に追加します。
添付ファイルのコンテンツ取得のすぐ下、赤枠で囲った「アクションの追加」から追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636203/329706f3-e9ef-3f81-4928-c9e71c7a3a69.png)

ファイル作成を追加します。
フォルダーのパスにはファイルを保存するSharePointドキュメントのパスを入力します。
フォルダのパスは右のフォルダマークをクリックすると出てくる一覧から選択することもできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636203/97cee3df-ae7b-8fb2-b8d1-2ea12c08c537.png)


今回は関数を使ってアプリで入力したタイトルをフォルダ名として使ってみます。
※concat関数は,(カンマ)で区切った複数の文字列を一つの文字列として繋げてくれます。
フォルダーのパスにカーソルを合わせて、動的なコンテンツを入力する吹き出しの中で右の「式」をクリックすると、式の入力欄が出てきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636203/8b7f7fc3-a80a-b2e1-eafd-7c82db49471e.png)


設定する式は以下の通りです。
*triggerOutputs()?['body/Title']*の部分はトリガーの「項目が作成されたとき」のタイトルを返してくれます。

```
concat('/Shared Documents/添付ファイル保存/',triggerOutputs()?['body/Title'])
```

式を入力したら必ずOKを押しましょう。(PowerAppsのように迂闊に欄外をクリックすると消えます……)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636203/80ced7c1-464f-e0b9-c93f-d3a1c438a80c.png)

ファイル名には「DisplayName」を、ファイルコンテンツには「添付ファイルのコンテンツ」を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636203/4fa58f22-7dd2-300e-03f9-f99480f0807d.png)

フローは以上で完成です。
以下は全体図です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636203/b956c766-7a88-092d-85a4-475b3303029c.png)

##動作確認
タイトルを入力し、添付ファイルを選択します。
今回はExcelファイルと画像ファイルを選択してみました。
タイトルは最後にファイルを格納するフォルダ名となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636203/9c426725-65c7-8eb2-1c17-f336320e78ff.png)

保存ボタンを押すと左側がクリアされ、右のギャラリーにデータが1件増えました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636203/72e7730d-c059-be1a-655c-d81b5697d296.png)

PowerAutomateを開いて確認します。
ワークフローは正常に終了しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636203/15350482-b928-a285-bc16-70f35137da62.png)

SharePointドキュメント内の「添付ファイル保存」というフォルダ内に「テスト」と「テスト2」というフォルダが作成されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636203/bb50000b-be9f-1113-bcca-c7b0d175b428.png)

テスト2の中には添付ファイルで選択した2つのファイルが作成されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636203/ec18855b-792a-59a5-965a-d02bcd93910c.png)

##終わり
最初に触れましたが、ドキュメントフォルダ内にExcelファイルを作成することで
Excelファイル内のテーブルや行を取得したり変更したりすることができます。

フォルダ名にタイトルを使用すると被る可能性があるので、必ずフォルダを分けたい場合はIDと組み合わせるなど工夫が必要です。