連日はてなブログに投稿していて、はてなの株下がらないか不安なあきらです。
今回は業務シーンでも考えてみます。
(お客さんから問合せあったんで解説しようかと)
下みたいな機能を作りたいそうで、サクッと作ってみようと思います。
ちなみにテナント外部のかたに添付ファイルもらう場合は、この方法よりもうちょっと工夫が必要になりますので、いつか書きます(たぶん)
Microsoft Forms
適当なフォームを作ります。
このフォームは個人のフォームではなくチームのグループのフォームで作成してください。Formsトップの下の方に自分のグループというビューがあります。
こちらで作成するグループを選びます。
するとそのグループの人間がみんな作成できるフォームが作成できます。
違いとしては、
個人フォーム→回答の格納先が個人のOneDrive
グループフォーム→回答の格納先がSharePoint
という違いがあります。
グループフォームにしないで個人フォームで作成してしまうと、
作成した方が退職されてアカウント消したら、データも跡形もなく消えますからね。
やるなよ、絶対やるなよ!?
まぁどうしてもって言うならやればいいさ、どうなっても知らないけど。
こちらは例として以下のフォームを作りたいと思います。
ネーミングセンスが壊滅的なのは置いといて、フォーム名くらい覚えといておきましょう。
あと保険としてBrowserのアドレスバーから「#FormId=」以降の文字列をコピッてクリップボードにでも置いといてください。
Formsの操作は終了でございます。
Power Automate (クラウドフロー)
for Desktopじゃなくてすみませんねー
同じ製品郡でDesktop通すのは意味不明なのできちんとクラウドフローで取得しようと思います。
全体概要こんなんです。
1つずつ説明していきましょう。(このブログで詳細まで説明するなんてまぁ珍しい!)
Forms Trigger「新しい応答が送信されるとき」
まずはトリガーですが、「どのフォームが動いた時」かを指定してあげます。
今回は先ほど作成したフォームを使うので、フォームIDの欄をクリックして、
「カスタム値」を選択しましょう。
ここに先ほどcopyしておいた「#FormId=」以降の値を入力しておきます。
これでFormsのIDの指定が可能です。
Forms Action「応答の詳細を取得する」
トリガーはあくまでトリガー(着火)なのであくまでフローの「キッカケ」に過ぎないので、
次はAction=「何を行うか」が必要です。
なので応答内容を取得します。
Data Action「作成」
次に添付ファイルの配列をいったんなんかしらのアクションで置いときたいです。
別にこれアレイで変数作って突っ込んでも問題ないですけど、初学者の方だと「変数?変な数?」っていう、高次元の解釈するかたもいらっしゃいますので、
作成っていうaction使っておきましょうか。
このアクションのいいところはフローの途中でも使えるところです。
変数のアクションを使う場合はフローの上流で宣言しないといけないので、途中で変数化するのくっそメンドクサイのでワタシはこちらをよく使います。
先ほどの「応答の取得」の添付ファイルの回答だけを指定しておきましょう。
一旦テスト
一旦、作成しているフローを保存します。
その上で作成したFormsから何でもいいので添付ファイルを付けて回答しておきましょう。
上の内容で送信しました。
Power Automateに戻ると、フローが実行されることがわかります。
中身を確認してみると、先ほどの「作成」アクションがきちんと動いていることがわかります。
この部分をコピーして外部のJSON整形ツールかなんかで綺麗に表示します。
今回は以下のサイトを使用しました。
JSONきれい ~JSON整形ツール~ - instant tools (m-bsys.com)
綺麗に整形されました。
この整形したJSONをコピーしておきましょう。
Data Action「JSONの解析」
JSONの解析を使って先ほどcopyした整形JSONをフォーマットとして、解析材料にしてあげます。
このアクションは通常では取得できない項目を、あとで取得しやすくするActionだと思ってもらえればいいと思います。
まず「コンテンツ」エリアに先ほど作成した「出力」を指定してあげます。
スキーマのエリアには何も書かずに、下部の「サンプルの生成」をクリックします。
ポップアップに先ほどcopyした整形JSONをpasteして閉じると、コンテンツが勝手に入力されます。
これで添付ファイルが取得できるようになりました。
続いてSharePointのリストに格納していきます。
SharePoint Action「項目の作成」
まずは登録したいリストを作成します。
SharePointの任意の箇所に以下のようなリストを作成します。
作成できたらPower Automateで項目の作成Actionを追加します。
これで「添付ファイル」以外の項目をリストに作成することができました。
SharePoint Action「パスによるファイルコンテンツの取得」
パスによるファイルコンテンツの取得アクションを追加します。
サイトのアドレスエリアにはフォームが配置されているSharePointのアドレスを指定。
ここからFormsの回答を取りに行きます。
グループフォームの場合、フォームの添付ファイルの保存場所は、
サイト/ドキュメント/アプリ/Microsoft Forms/(フォーム名)/質問
の中にありますので、
サイトアドレス以下の
/Shared Documents/アプリ/Microsoft Forms/(フォーム名)/質問/
を記入して、最後に関数から「作成」の中の「name」を追加してフルパスにしておきます。
これでFormsの回答の添付ファイルを指定できました。
勝手にApply to eachというアクションが追加されますが、
取得した対象が配列だった場合、順番にこのアクションを行ってくれるものですので、
Apply to eachの枠内では複数ファイルを受け取って、そのActionを1ファイルずつ行ってくれる、という形で実行してくれます。
たまに変な動きをする原因になったり、フロー作成しまくるとわかりますが、沢山の処理を繰り返すとスーパー遅くなる原因にもなるActionですので、撲滅する動きが歴史的に行われています。工夫次第で「使わない」という選択も可能です。
今回はファイルものすごいっぱい使うこと想定してないので、まんま使えばいいと思います。
SharePoint Action「添付ファイルの追加」
さぁ、リストに添付ファイルを突っ込んでいきましょう。
よく「フォームを作成したサイトアドレス」と「リストを作成したサイトアドレス」を混同してわからなくなりますが、
どこから取得したいのか、どこに作りたいのか、など目的を明確化して、
今何を行うアクションなのか、を考えれば迷うことはありません。
Teams Action「チャットまたはチャネルでメッセージを投稿する」
最後に通知でも作りましょうかね。
Apply to eachの外側に作ってあげてください。
中に作ってしまうと添付ファイル分通知が来ます。
新手の嫌がらせをしたい場合は推奨しておきます。
テスト
フロー保存してFormsで新しい回答を飛ばしてみましょう。
通知が来て、リンク開いて、リストの添付ファイルについてれば成功です。
何も見ないでやってみましょう
割と「作っておわり!やったぜワイ天才!」って言う阿呆がいますが、
復習しましょうね。
慣れたら数分で作成できますからねこの仕組み。
周りの人に展開したいのならば、先ずは自分が鼻歌混じりに作れることが重要です。
大人になってから「定着」が味わえるのは本当に快感です。
是非体験をしてください。