Formsを利用した問い合わせフォームやアンケートの回答をPower Auomateを用いてSharePointリストに蓄積する際の小技シリーズです。
第4弾として、Formsの添付ファイルをSharePoinリストの添付ファイルに格納する場合について記載していきます。
はじめに
Power Automateにて「FormsのアクションとSharePointのアクションを用いて投稿内容をリストに転記する」というフローを作成する際には、基本的にFormsのアクションにて得られた動的アイテムをリストの項目に挿入することで回答を転記できます。
しかしながら、「項目の作成」アクションには自分で追加した列は表示されますが、デフォルトで生成されている列は「タイトル」以外は表示されません。
添付ファイル列もデフォルトで生成されている列のためここでは表示されず、操作する事もできません。
Formsの添付ファイルをどのようにSharePointリストアイテムに移動させるのか記載していきます。
フォームの種類と添付ファイルの格納場所
今回のフローの前提として、フォームの種類によって添付ファイルの格納場所が変わります。そのため、フローで使用するアクションも異なります。
フロー設定方法の前に、このフォームの種類や格納場所の違いについて説明します。
フォームは以下の2種類があります。
- ユーザーが所有する個人フォーム
- Microsoft 365グループが所有するグループフォーム
個人フォームの添付ファイル格納場所
個人フォームにて添付ファイルアップロードの質問を設けると...
フォーム作成者の個人のOneDrive内に以下の階層でフォルダが自動生成されます。
自分のファイル>アプリ>Microsoft Forms>{フォームタイトル}>{質問タイトル}
アップロードされたファイル名に回答者名が追記された名前でそれぞれ格納されます。
※ただし、フォームで回答者の名前を記録しない設定にすると回答者名の箇所はすべて「anonymous」となります。
なお、1つの質問に複数ファイルアップロードできる設定をしていても、「質問タイトル」フォルダ内に回答者が送信した1つの回答ごとのフォルダができるわけではありません。
グループフォームの添付ファイル格納場所
グループフォームの添付ファイル格納場所は個人フォームと異なり、グループのSharePointサイト内に格納されます。
生成されるタイミングは個人フォームと同じく質問が作成されたときです。
階層は以下の通りで、個人フォームとほぼ同様の階層が生成されます。
ドキュメント>アプリ>Microsoft Forms>{フォームタイトル}>{質問タイトル}
※質問タイトルのフォルダは質問保存時に自動生成されるため、フォームの保存タイミングによっては質問タイトルのデフォルト「質問」がフォルダ名に設定されます。(あとから質問タイトルを変更してもフォルダ名は変更されません。)
ファイルの格納方法、命名規則などは前項の個人フォームと同じ仕組みになっています。
以上が、フォームの種類による添付ファイルの格納場所の違いでした。
準備
Forms
添付ファイルの質問を設けます。ファイル数の制限はありません。
SharePointリスト
各アイテムにはデフォルトで添付ファイルの項目があるので特に列の作成は必要ありません。
ビューで添付ファイルがあるか表示させたい場合は、ビューの編集で添付ファイル列を表示するに設定しておきます。
Power Automate フローの設定
格納場所がフォームの種類によってOneDrive / SharePointと異なるため、それぞれ記載します。
個人フォームのフロー
各手順は以下に記載していきますが、全体の構成は下図の通りとなります。
(1)Formsのトリガーとアクションを設定する
添付ファイル以外のタイトルや自分で作成した列などをリストの項目に挿入しておきます。
(2)OneDriveの「フォルダー内のファイルのリスト」アクションを設定する
添付ファイルの格納場所の項にて説明したフォルダの階層を設定します。
/アプリ/Microsoft Forms/{フォームタイトル}/{質問タイトル}
フォルダ内にあるすべてのファイル情報を取得します。
(3)OneDriveの「ファイル コンテンツの取得」アクションを設定する
動的アイテムで前項の出力「ID」を挿入します。
挿入と同時に「Apply to each」が生成されます。以降のアクションはこの中に作成していきます。
(4)SharePointの「添付ファイルの追加」アクションを設定する
以下の動的アイテムを挿入します。
- ID
- 「項目の作成」アクションの出力である「ID」
- ファイル名
- 「フォルダー内のファイルリスト」アクションの出力である「表示名」
- ファイルコンテンツ
- 「ファイル コンテンツ取得」アクションの出力である「本文」
このアクションで添付ファイルがリストの添付ファイルにコピーされます。
(5)OneDriveの「ファイルの削除」アクションを設定する
「フォルダー内のファイルのリスト」アクションの出力である「ID」を挿入します。
次の回答でフローが実施される際に(2)のアクションにてフォルダ内すべてのファイル情報が取得されて同じファイルが重複して保存されるのを避けるために、リストに追加されたファイルはOneDriveの格納場所から削除しておきます。
以上が個人フォームのフローです。
グループフォームのフロー
個人フォームの場合のフローと構成は一緒で、使用するアクションが異なるフローとなります。
全体の構成は下図の通りとなります。
(1)Formsのトリガーとアクションを設定する
添付ファイル以外の項目でリストに項目を作成しておきます。
こちらのアクションは個人フォームの場合と同じですが、フォームIDの入力にて個人フォームの場合はドロップダウンリストからフォームを選択できますが、グループフォームはドロップダウンリストに表示されないためカスタム値でIDを入力します。
フォームIDはFormsのフォーム編集画面や回答収集URLの末尾「id=」以降の文字列がフォームIDとなります。
※回答収集URLでの例
https://forms.office.com/Pages/ResponsePage.aspx?id={ここがフォームID}
(2)SharePointの「ファイルの取得(プロパティのみ)」アクションを設定する
添付ファイルの格納場所の項にて説明したフォルダの階層を設定します。
/Shared Documents/アプリ/Microsoft Forms/{フォームタイトル}/{質問タイトル}
フォルダ内にあるすべてのファイル情報を取得します。
(3)SharePointの「ファイル コンテンツの取得」アクションを設定する
動的アイテムで前項の出力「識別子」を挿入します。
挿入と同時に「Apply to each」が生成されます。以降のアクションはこの中に作成していきます。
(4)SharePointの「添付ファイルの追加」アクションを設定する
以下の動的アイテムを挿入します。
- ID
- 「項目の作成」アクションの出力である「ID」
- ファイル名
- 「ファイルの取得(プロパティのみ)」アクションの出力である「拡張子付きのファイル名」
- ファイルコンテンツ
- 「ファイル コンテンツ取得」アクションの出力である「本文」
このアクションで添付ファイルがリストの添付ファイルにコピーされます。
(5)SharePointの「ファイルの削除」アクションを設定する
「ファイルの取得(プロパティのみ)」アクションの出力である「識別子」を挿入します。
個人フォームの場合と同様に、次の回答でフローが実施される際に(2)のアクションにてフォルダ内すべてのファイル情報が取得されるため、リストに追加されたファイルはOneDriveの格納場所から削除しておきます。
以上がグループフォームのフローです。
実行結果
紹介した2つのフローはアクションは異なりますが、実行結果は同様で、リストの添付ファイルに格納されます。
おわりに
今回はFormsの添付ファイルをSharePoinリストの添付ファイルに格納する場合でした。
フォームの種類によって、機能は一緒でも裏側の格納場所が異なるところが個人的にも苦戦したところです。
フロー作成に関しても、OneDriveとSharePointは基本的にはほぼ同様のアクションがあるため、構成は同様のもので成功したりするのですが、アクションや動的アイテムの名称が異なるところがあるので気を付けたいポイントです。