6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

メンテナンス不要!どんなForms クイズでも採点するPower Automate フロー

Last updated at Posted at 2024-02-03

はじめに

このフローの動作イメージです。

Forms側でのクイズの設問数の追加や、答えの修正、点数の変更など。様々な変更に対応した採点フローです。
クイズの方を変更しても、フローの方は一切メンテナンスなしで正しい総得点が通知できています。

注意
Forms の機能として採点ができないもの(レビューが必要なもの)や、正解が設定されていない設問は点数を取得できません。

例:『日付』形式の設問
image.png

回答内容の確認方法いろいろ

フローの解説に入る前に、Forms クイズの回答結果を確認してみましょう。

Forms の編集画面から

回答があった場合、編集画面の「応答」タブから回答を確認することができます。

image.png

このページでは回答の割合など、概要のみが表示されますが、「解答のレビュー」から個別の回答を確認することもできます。

ユーザーごとの回答を確認すると、そのユーザーが回答した内容だけでなく、設定された正解と照らし合わせた点数も表示されます。

この点数がPower Automate でも取得できればいいのですが・・・

image.png

Excel にエクスポートされる回答内容

同じく「応答」タブから、Excel にエクスポートして回答を確認することもできます。

image.png

こちらも同じように、合計点数を確認することができます。
image.png

Power Automate で取得できる回答内容

肝心のPower Automate で取得できる情報です。
Forms コネクタのアクションには「応答の詳細を取得する」のみが存在していますが、この方法で詳細を確認しても、取得できる情報はユーザーが何と回答したかのみです。

image.png

結論として、Power Automate のFormsコネクタでは点数は取得できず、フロー内で採点するためには、そのためのメモが必要です。

具体的には、正解の情報とその設問に対する配点の情報をそれぞれ記述しておく必要があります。

正解や配点のメモは、フロー内に直接書くのでも、あるいはSharePointリストなどの外部ソースに置いておいくのでもよいのですが、どちらにせよクイズを変更した際にはそうしたメモも同時に編集しなければなりません。

備考
メンテナンスが大変なだけでなく、回答のチェックもかなり面倒です。
複数回答可能な選択肢形式の設問や、ランキング形式の設問は特に採点が大変なので、あまりやりたい方法ではありません。

フローの解説

以上、フロー内での採点が難しいということを確認した上で、今回のフローの解説に移ります。

「具体的にどうやって採点してるんだよ?」 ということを端的に説明すると、先ほど紹介したExcel にエクスポートする機能を使います。

エクスポートしたExcel に採点結果が出力されるので、フローでExcel をエクスポートできたら採点結果もわかりますね?

フローの全体像

全体像はこちらです。
少し長いので折りたたんでおきます。

フローのスクリーンショット

image.png

トリガー

トリガーは単純にFormsからの回答を受け取ればOKです。
image.png

注意
2024年2月3日現在では、トリガーの「分割」設定が従来のデザイナーと異なる設定になるようなので注意してください。

各種IDの取得

トリガーから、このフローに必要な情報を抜き出します。
トリガーの出力には、応答IDだけでなくフォームIDも含まれているので、この値を変数に格納します。

image.png

応答IDは動的なコンテンツからも選択できます。
image.png

フォームIDの方は動的なコンテンツからは指定できないので、数式で指定します。
image.png

formId
triggerOutputs()?['body/resourceData/formId']

以降は、ここで変数に保存されたIDを使用するため、このフロー全体を通してメンテナンスが必要な設定はトリガーのみになります。

別のクイズを採点したい場合は、トリガーで別のFormを指定するだけで同じフローが使い回せるということです。

Excel のエクスポート

先ほどのIDを使って回答をExcel にエクスポートします。
Excelを取得する手順は、わたるふさんの以下の記事を参考にさせていただきました。


参考にさせていただいた記事


image.png

ただし、今回は回答の全体を取得する必要はなく、トリガーとして発動された回答のみの結果を取得できればよいので、minResponseId1から始めずに容量を最小限にしています。

SharePoint に HTTP 要求を送信します:URI
/formapi/DownloadExcelFile.ashx?formid=@{variables('formId')}&timezoneOffset=180&minResponseId=@{variables('responseId')}&maxResponseId=@{variables('responseId')}

追記
FormsAPIの仕様はMicrosoft 公式のLearn での解説が無いようです。
「SharePoint に HTTP 要求を送信します」アクションを使用しているように、リクエストはSharePoint REST API 経由となります。
以上より、あまり一般的な方法ではありませんので、実務などで使用される場合はその点ご留意の上お使いください。

その後、取得したExcelをOneDriveの適当な場所に保存します。

image.png

ファイル名は重複しないように、タイムスタンプやGUIDなどを使うとよいでしょう。
今回は簡単にGUIDを使用しています。

ファイルの作成:ファイル名
@{guid()}.xlsx

得点の取得

エクスポートしたExcelから採点結果を取得します。
一旦、エクスポートされたExcel ファイルの中身を実際に開いて確認してみましょう。
image.png

トリガーとなったID9の回答の点数が、Total points列に出力されていることが確認できますね。
Excel コネクタを使ってこの点数を取り出すことができれば目的は達成です。

information
他にも、各設問の回答内容とその得点数などが記載されていることが確認できます。
(今回は使用しません)
image.png

ということでExcel コネクタの登場です。
1件の情報が取得できればよいので、「表内に存在する行を一覧表示」アクションではなく、「行の取得」アクションを使用します。

image.png

テーブルキー列はカスタム値の入力で画面の通り手入力すればOKです。

最後に取得できた行からTotal points列の値を取得します。
まだ存在しないExcel テーブルからは、動的なコンテンツとして取得することができないので、数式を使って以下のように取り出します。
image.png

作成(得点の取得)
body('行の取得')?['Total points']

あとは目的に応じて、通知を送るなりなんなりしてあげてください。
image.png

おわりに

取得できない点数を、Excel へのエクスポート機能、さらにそれをフローで行うためのAPI 操作と、かなりトリッキーなフローでした。

一度作ってしまえば、FormのIDだけを変更して使いまわせるので、formIdをインプットにした子フローにしておくと、使い勝手が良いかもしれません。

一見関係なさそうな機能でも、意外とつながってくることが多いので、Microsoft 全般のさまざまな知識を身に着けることが、フローの引き出しを増やすことにつながります!

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?