6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

リストフォームとSharePoint REST API を組合せて、「その他」でも表記ゆれしにくいアンケートを実施する

Posted at

はじめに

Microsoft の機能でアンケートと言えば、Microsoft Forms を使用するのが一般的でしょう。

Formsでは、選択式の質問でも「その他」で自由に回答してもらうことができます。
image.png

ただし、「その他」は回答者の匙加減によるところが大きいので、例えば同じ内容でも下記のように表記ゆれが発生してしまいます。
image.png

後から集計しようと思うと、この表記ゆれには困らされますよね。
今回は、Formsではなく、新しく使えるようになったMicrosoft Lists/SharePoint Listのフォーム機能使って、この問題に対処できないか考えてみました。

Lists のフォーム機能

先ほどの例と同じ回答ができるように、選択肢列を用意したリストを用意しました。
値を手動で追加できますにチェックを入れることで、「その他」のようなあらかじめ選択肢に用意されていない値を登録できる設定になります。
image.png

このリストに直接回答を登録できるフォームを作成しましょう。
リスト上部のメニューからフォームをクリックします。
image.png

新しいフォームを作成します。
image.png

リストの列を使って、そのままアンケートに使用できるようなフォームを作成できます。
image.png

フォームのタイトルを設定したり、不要なタイトル列を削除したりして整えました。
ちなみに、このフォームの画面で選択肢を追加したり設定を変更すると、フォームを使用するタイミングに限らず、リストの列の設定として変更が反映されます。(回答必須にしておきました)
image.png

プレビューから確認すると、このようにその他の値も登録できることがわかります。
image.png

現在、このフォームに回答できるのは同じ組織のユーザーのみです。
image.png

組織外のユーザーに対するアンケートには使用することができません。
※Forms の下記設定と同等です
image.png

「その他」回答があったら、新たに選択肢を追加する

では、このフォームを使って、用意した選択肢にない回答があった場合、新たに選択肢に登録するというフローを作成します。

例えば、誰かが選択肢にない「犬」という回答をした場合、リストの設定を変更して、選択肢に「犬」を登録するというようなフローです。こうすることで、以降の回答者は、用意された選択肢の「犬」を選んで回答することができます。
image.png

SharePoint REST API

フォームの設定はリストの設定と連動しています。
なので、直接フォームを編集しなくても、列の設定(選択肢)を変更できれば目的は達成できます。

前回の記事で、SharePoint REST API を使用して、Power Automate で選択肢を編集する方法を説明しています。

この方法を応用して、新しい回答をトリガーに、新たな選択肢を追加するフローを組み立てます。

フローの作成

流れとしては、

  1. 新たな回答をトリガーにする
  2. リストの設定を確認して選択肢を調べる
  3. 回答が既存の選択肢に含まれるかを調べる
  4. 含まれていない場合は選択肢を追加する

という順序になります。
image.png

①新たな回答をトリガーにする

トリガーはSharePoint コネクタの項目が作成されたときを使用します。
「フォームに回答があった=リストに項目が登録されたとき」に動くフローになります。

注意点として、このトリガーは定期的に新たな回答がないか確認しに行くような動作になりますので、短期間に連続で回答があった場合には、新たな選択肢がまだ登録できていない可能性もあります。
image.png

②リストの設定を確認して選択肢を調べる

前回説明したように、API を使用して選択肢を調べます。
image.png

ついでに、調べた選択肢を変数に格納しておきましょう。
image.png

変数の初期化
body('SharePoint_に_HTTP_要求を送信します-選択肢の取得')?['d/Choices/results']

③回答が既存の選択肢に含まれるかを調べる

条件を使って、すでに選択肢に含まれているかどうかを調べます。
image.png

条件
{
  "contains": [
    "@variables('Choices')",
    "@triggerBody()?['favorite']?['Value']"
  ]
}

含まれていて登録する必要がなければ、そこでフローを中断するようにしています。

④含まれていない場合は選択肢を追加する

登録するための、更新後の選択肢を作成します。
既存の選択肢に、新たな「その他」回答を加えて配列変数を設定します。
image.png

登録したい内容が作成できたら、APIを使って選択肢の設定を更新します。
前回の記事で説明した内容ですが、違いはボディに先ほど用意した変数を使っているところです。
image.png

これでフローは完成です。

おわりに

Lists の新しい機能である、フォームを活用した方法を紹介しました。

基本的には、この機能は、FormsとListsの転記作業を行っていたフローがいらなくなるという、Power Automate の使用頻度を減らすアップデートだと思います。
本来の意図とは違うことをしていますが、新たな機能ができれば新たな使い方ができるんじゃないか!と考えてみた結果の1つのソリューションでした。

Microsoft は多数のアプリや機能があり、それを組み合わせて使うことでとても多くのことができるサービスです。
この応用力がSaaS時代の武器にもなりますので、みなさんもいろいろと組み合わせて面白いものをつくってみてください!

6
7
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
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?