Power Automateとアダプティブカードで作るアンケートシステム|回答をSharePointリストに格納する手順

Power Automate

一斉にアンケートをとって集計したいけど、何かいい方法ないかなぁ。

アダプティブカードをTeamsに送ってみるのはどうかにゃ?
回答はリストにまとめればOKにゃ。

やりたいこと

対象者にアダプティブカードでアンケートを送付し、その回答をSharePointリストに格納したい。
アダプティブカードの作り方についてはこちらの記事に書いています。

事前準備

以下を準備します。
1.送付先メンバーリスト
2.回答データリスト

送付先メンバーリスト

アンケートの送付対象となるメンバーを管理するリストです。
今回はEmployeeという名前でリストを作成し、「氏名」「メールアドレス」「退職フラグ」の列を作りました。
今回は退職フラグがたっていない「栃 おとめ」さんと「富士 りんご」さんにカードを届けます。

回答データリスト

回答されたデータを格納するリストです。
期限に間に合わず、当月に回答できないユーザーがいた場合、当月分のデータに不整合が起きてしまう…ので、必要に応じて回答日を手動で修正できるようにする目的で、登録日時とは別に「回答日」の列を作っています。

列名データ型デフォルトの列格納するデータ
タイトル1行テキスト回答者の氏名
Q_1複数行テキストQ1の回答(自由記述)
Q_21行テキストQ2の回答(選択肢)
Q_31行テキストQ3の回答(選択肢)
Q_4複数行テキストQ4の回答(自由記述)
更新者ユーザーまたはグループ
更新日時日付と時刻
登録者ユーザーまたはグループ
登録日時日付と時刻
回答者メールアドレス1行テキスト回答者のメールアドレス
回答日日付と時刻回答された日時

アダプティブカードの作成

今回作成したカードはこちら。
Q1とQ4は自由記述で、Q2とQ3は選択肢です。

Power Automateフローの作成

全体像はこんな感じ↓

項目の取得

在籍しているユーザーを取得するよう、退職フラグがたっていない(Retirement ne 1)フィルターをかけました。

変数の初期化

アダプティブカードのJSONをそのままメッセージ内に書いてもよいのですが、選択肢だけ変数にしてみました。
もし「選択肢の内容を書き替えたい」という時にメンテナンスがしやすいです。

アダプティブカードを投稿して応答を待機する

取得したメンバーの数だけループ処理を行いたいため、「Apply to each」の中にアダプティブカードを投稿するアクションを追加します。
処理を逐次実行ではなく並列実行にしたい場合は、「Apply to each」の設定([…])から「コンカレンシー制御」を有効にすることを忘れないように。。。

また、後続の「項目を作成する」アクションで式を入力する際、日本語のアクション名を参照するとエラーになることがありました。ので、アクション名は「Send_adaptivecard」など、英語に書き換えておくのが安全です。

さらに、「項目を作成する」アクションでどの値を格納するか指定するには、アダプティブカード内の各設問に設定した id を使います。この id の設定を忘れると、回答を正しく取得できないので注意が必要です。

今回作成したカードのコードはこちら
{
    "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
    "version": "1.3",
    "type": "AdaptiveCard",
    "body": [
        {
            "type": "TextBlock",
            "text": "今月のファームアンケート",
            "wrap": true,
            "fontType": "Default",
            "size": "Large",
            "weight": "Bolder",
            "color": "Accent"
        },
        {
            "type": "TextBlock",
            "text": "みなさんの生産状況を教えてください!",
            "wrap": true,
            "size": "Small"
        },
        {
            "type": "TextBlock",
            "text": "Q1. 最近の収穫はどうでしたか?",
            "weight": "Bolder",
            "size": "Default",
            "maxLines": 0
        },        
        {
            "type": "Input.Text",
            "id": "projectDescription",
            "isMultiline": true,
            "placeholder": "詳細を記入してください。",
            "isRequired": true,
            "errorMessage": "このフィールドは必須です。"
        },
        {
            "type": "TextBlock",
            "text": "Q2. 日当たりの満足度はいかがですか?",
            "weight": "Bolder",
            "size": "Default"
        },
        {
            "type": "Input.ChoiceSet",
            "id": "satisfactionLevel",
            "isRequired": true,
            "choices":@{variables('Q2')},
            "placeholder": "選択してください。",
            "errorMessage": "このフィールドは必須です。"
        },
        {
            "type": "TextBlock",
            "text": "Q3. 最近は良く熟せてますか?",
            "weight": "Bolder",
            "size": "Default"
        },
        {
            "type": "Input.ChoiceSet",
            "choices":@{variables('Q3')},
            "placeholder": "選択してください。",
            "isRequired": true,
            "id": "relationshipsLevel",
            "errorMessage": "このフィールドは必須です。"
        },        
        {
            "type": "TextBlock",
            "text": "Q4. 実りの良かったフルーツについて教えてください。",
            "wrap": true,
            "size": "Default",
            "weight": "Bolder"
        },
        {
            "type": "Input.Text",
            "id": "freeText_Q4",
            "isMultiline": true,
            "placeholder": "ご自由にご記入ください。"
        },       
        {
            "type": "ActionSet",
            "actions": [
                {
                    "type": "Action.Submit",
                    "title": "送信",
                    "id": "submit"
                }
            ]
        }
    ]
}

項目の作成

データを格納したいリストがあるサイトとリストを選択し、各項目(リストの列)に何のデータをいれるか指定します。

項目名
タイトル動的なコンテンツ > [項目の取得]で取得した「氏名」
Q_1outputs(‘Send_adaptivecard’)?[‘body/data/projectDescription’]
Q_2outputs(‘Send_adaptivecard’)?[‘body/data/satisfactionLevel’]
Q_3outputs(‘Send_adaptivecard’)?[‘body/data/relationshipsLevel’]
Q_4outputs(‘Send_adaptivecard’)?[‘body/data/freeText_Q4’]
回答者メールアドレス動的なコンテンツ > [項目の取得]で取得した「会社メールアドレス」
回答日addHours(utcNow(), 9)

実行結果

実行すると・・・
「栃 おとめ」さんと「富士 りんご」さん2人に、同時にカードが届きました。

以下のように回答すると・・・

▼富士 りんご

▼栃 おとめ

SharePointの「回答データ」リストに格納されました!

コメント

タイトルとURLをコピーしました