見出し画像

Microsoft Formsの複数の添付ファイルをハイパーリンクしてTeamsに投稿する!

いつもお世話になっている気ままに勉強会#44で教えていただいた、Formsの応答を取得して、エクセルに転記し、メールを送るという仕組み。
問い合わせを個人に集中させず、複数人でさばく!というのがとてもいいなと思い、早速作ってみました。
うちの組織ではエクセルに転記は不要かつ、連絡は問い合わせ担当者のチームへの投稿がよかったので、結果的にTeamsに投稿するだけのフローになっています。

この仕組み、添付ファイルのURLを取得してハイパーリンクにするというのがポイントなのですが、勉強会では添付が複数ある場合の処理は考えてやってみてね!とのことだったので、「データ操作」を使ってループなしで処理する方法を考えました。

フローの全体像はこんな感じ。※エクセルファイルに書き込む処理は省いています。

トリガ「新しい応答が送信されるとき」と、次の「応答の詳細を取得する」で、応答の詳細を取得すると、添付ファイルの部分の回答はJSON形式で取得されてきます。

JSON Pretty Linter Ver3にかけたところ。 ※いつもお世話になっております。

ですので、次はデータ操作の「JSONの解析」で、一旦取得したこのJSON形式のデータを「サンプルから生成」にコピペして、ファイル名に当たる「name」と、アップロードされたファイルのURLに当たる「link」の情報を取得できるようにします。
ここまでは勉強会で扱っていた内容で、この先が工夫した部分になります。

「JSONの解析」で取得した「name」と「link」を、チャネル投稿の本文に記載するハイパーリンクの形式に整えます。
ハイパーリンクは <a href="ここにURL">ここに名前</a> のように書くので、個々の添付ファイルの情報ごとに、この形式にしていきます。
これには、データ操作の「選択」を使います。
「選択」のインプットはさきほどのJSONの解析のbody、マップは、テキストモードにして、以下の式だけを設定します。

concat('<a href="',item()['link'],'">',item()['name'],'</a>')

すると、結果はこんな感じの一次配列になります。

[
"<a href="https:~~">ファイル名1</a>",
"<a href="https:~~">ファイル名2</a>",
"<a href="https:~~">ファイル名3</a>",
"<a href="https:~~">ファイル名4</a>"
]

 これを投稿の本文(HTML形式)にするために、1要素ごとに改行コードを入れて1つのテキストにします。
これには、データ操作の「結合」を使います。
結合する配列は、この「選択」のbody、次を使用して結合にはHTMLの改行コード「<br>」を設定します。

これを、「チャットまたはチャネルでメッセージを投稿する」のMessageに設定すると、添付された複数のファイルへのハイパーリンクが投稿の本文に入ります。

投稿のイメージ

ただし・・・
Formsの応答に添付がない場合は「JSONの解析」アクションがエラーになります。
なので、「JSONの解析」アクションの前に条件分岐を入れ、
応答の詳細を取得の添付ファイルの回答内容が空かどうかで分岐させ、空でない場合にだけ、上記の処理をする必要があります。
添付がない場合は、投稿の本文には「なし」と書きたいので、変数を用意して、添付があった場合は、さきほどの「結合」のbodyを、添付がなかった場合は「なし」を設定し、投稿のMessageにはこの変数を入れました。
※変数の初期化で、初期値を「なし」にしておいて、添付があった場合のみ書き換えるようにすると、アクションを一つ減らせますが、可読性ということで…。

「選択」で一配列を作ってから、「結合」でテキストに戻す(?)という技も、もちろん気ままに勉強会で教えていただいたもの。
ループ撲滅に大活躍で、めちゃくちゃ使っています。
ありがとうございます!


この記事が気に入ったらサポートをしてみませんか?