今日もローコードで業務改善をしたい

Power AutomateやPower Appsなど、Power Platformに関して学んだことを書いています。

FormsとPower Automateで1日先着〇名まで受付する簡易予約システムを作ってみる

はじめに

Microsoft FormsとSharePoint Onlineリスト、Power Automateを組み合わせることで、簡易的な予約システムを作成することができます。


今回は、同じ日に予約できる枠を先着3名までとし、4名以上から申請があった場合、自動で予約受付不可メールを送るシナリオをサンプルにご紹介します!

フロー全体図


用意するもの

Microsoft Forms

今回は講習会申請を想定して、日付設問のあるフォームを作成します。
(講習会は常時受付しており、ユーザーは自由に日付を選択してもらうパターンにします。)

SharePoint Onlineリスト

任意のサイトで新規のリストを作成します。
Formsの回答を格納し、カレンダー表示させるためにSharePoint Onlineリストを利用します。

「列の追加」から「日付と時刻」の列を作成します。

私は列名を「Date」にして「保存」をクリックしました。
※「時間を含める」は必ず「いいえ」にしてください。

右上の「すべてのアイテム」から「新しいビューを作成する」をクリックします。

ビューの作成画面が表示されるので、以下を設定し「作成」をクリックします。


ビュー名:任意の名前
表示方法:カレンダー
予定の開始日:Date
予定の終了日:Date

リストの表示形式がカレンダーに変わりました。

以上で準備は完了です。

フローの作成手順

1.新しい応答が送信されるとき

トリガーにはMicrosoft Formsの「新しい応答が送信されるとき」を選択し、以下を指定します。


フォームID:事前に作成したアンケート

2.応答の詳細を取得する

「+新しいステップ」からMicrosoft Formsの「応答の詳細を取得する」アクションを選択し、以下を指定します。


フォームID:事前に作成したアンケート
応答ID:動的なコンテンツの追加から「新しい応答が送信されるとき」の「応答ID」

3.ユーザープロフィールの取得(V2)

「+新しいステップ」からOffice 365 Usersの「ユーザープロフィールの取得(V2)」アクションを選択し、以下を指定します。


ユーザー(UPN):「応答の詳細を取得する」アクションから「Responder's Email」

このアクションでFormsに回答した人のOffice365ユーザー情報を取得します。

4.複数の項目の取得

「+新しいステップ」からSharePointの「複数の項目の取得」アクションを選択し、以下を指定します。


サイトのアドレス:リストを作成したSharePoint Onlineサイトのアドレス
リスト名:事前に作成したリスト名

「詳細オプションを表示する」をクリックし、「フィルタークエリ」で以下を指定します。

Date eq '@{outputs('応答の詳細を取得する')?['body/raca8d897979b44128d7563b13dc301d3']}'

※Date eq から右にある '' の中は、事前に作成したアンケートの日付設問を動的に指定してください。

Formsで回答された日付と同じ日付列になっているレコードをこのアクションで取得します。

注意点

「複数の項目の取得」アクションは、デフォルトだと100レコードまでしか取得されません。
もし100を超えるレコードを管理する場合は、「上から順に取得」で100以上の数を指定しましょう。

5.条件

「アクションの追加」からコントロールの「条件」アクションを選択し、以下を指定します。


左辺:式から以下を入力

length(Outputs('複数の項目の取得')?['body/value'])

右辺:3

この条件アクションで、「複数の項目の取得」アクションで取得されたレコード数が3つ以上あるかを判定します。

6.はいの場合「メールの送信(V2)」

Formsで回答した日付が既に3枠埋まっている場合、予約受付不可のメールを送るアクションを作ります。

「アクションの追加」からOffice365 Outlookの「メールの送信(V2)」アクションを選択し、以下画像のようにお好みで指定します。


宛先:応答の詳細を取得するアクションから「Responders' Email」

7.いいえの場合「項目の作成」

Formsで回答した日付にまだ空きがあった場合、回答をSharePoint Onlineリストに格納し、予約受付完了メールを送るアクションを作ります。


「アクションの追加」からSharePointの「項目の作成」アクションを選択し、以下を指定します。


サイトのアドレス:リストを作成したSharePoint Onlineサイトのアドレス
リスト名:事前に作成したリスト名
Title:ユーザープロフィールの取得(V2)アクションの「表示名」
Date:応答の詳細を取得するアクションの日付設問

8.いいえの場合「メールの送信(V2)」

「アクションの追加」からOffice365 Outlookの「メールの送信(V2)」アクションを選択し、以下画像のようにお好みで指定します。

フローの実行

早速Formsを回答して、実行してみましょう。

動作を確認するために、「2022/7/11」を4回分回答してみます。
想定では、回答の3回目までは「受付完了」となり、4回目から「受付不可」になります。

1~3回目まで

「2022/7/11」を3回回答したことにより、SharePoint Onlineリストに3レコードが登録されました。


メールも3回目の人までは、受付完了メールが届きます。

Power Automateの条件アクションで、「いいえ」のアクションが実行されたことになります。

4回目以降

既に3枠埋まっている状態で、もう一度「2022/7/11」を回答してみます。

結果、「受付不可」メールが届きました。


既に3枠埋まっているため、SharePoint Onlineリストに回答内容が格納されることもありません。

Power Automateの条件アクションで、「はい」のアクションが実行されたことになります。


4回同じ日付で回答したときに受信したメール結果です。
先着3名までは「受付完了」になり、4名以上はすべて「受付不可」のメールが送信されています。

さいごに

「複数の項目の取得」アクションでフィルタークエリを用いることで、Formsで回答した日付と一致したレコードを取得し、
「条件」アクションで一致したレコードが3つ以上あった場合、受付不可メールを送るというフローのご紹介でした。


今回はFormsアンケートが日付設問であることを前提に作成しましたが、選択肢設問でも同じようなことができると思います。
是非色んなパターンで試してみてください!