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

アダプティブカードをTeamsに送ってみるのはどうかにゃ?
回答はリストにまとめればOKにゃ。
やりたいこと
対象者にアダプティブカードでアンケートを送付し、その回答をSharePointリストに格納したい。
アダプティブカードの作り方についてはこちらの記事に書いています。
事前準備
以下を準備します。
1.送付先メンバーリスト
2.回答データリスト
送付先メンバーリスト
アンケートの送付対象となるメンバーを管理するリストです。
今回はEmployeeという名前でリストを作成し、「氏名」「メールアドレス」「退職フラグ」の列を作りました。
今回は退職フラグがたっていない「栃 おとめ」さんと「富士 りんご」さんにカードを届けます。

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

列名 | データ型 | デフォルトの列 | 格納するデータ |
タイトル | 1行テキスト | 〇 | 回答者の氏名 |
Q_1 | 複数行テキスト | Q1の回答(自由記述) | |
Q_2 | 1行テキスト | Q2の回答(選択肢) | |
Q_3 | 1行テキスト | 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_1 | outputs(‘Send_adaptivecard’)?[‘body/data/projectDescription’] |
Q_2 | outputs(‘Send_adaptivecard’)?[‘body/data/satisfactionLevel’] |
Q_3 | outputs(‘Send_adaptivecard’)?[‘body/data/relationshipsLevel’] |
Q_4 | outputs(‘Send_adaptivecard’)?[‘body/data/freeText_Q4’] |
回答者メールアドレス | 動的なコンテンツ > [項目の取得]で取得した「会社メールアドレス」 |
回答日 | addHours(utcNow(), 9) |
実行結果
実行すると・・・
「栃 おとめ」さんと「富士 りんご」さん2人に、同時にカードが届きました。
以下のように回答すると・・・
▼富士 りんご

▼栃 おとめ

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

コメント