Microsoft Forms で作成されたフォームの複数回答可能な選択肢の回答データを、Power Automate を利用して SharePoint リストの選択肢列に登録したいと思ったのですが、これを実現するにはちょっとややこしい手順が必要になります。

少し専門的な知識も必要になることと、こうした方法は時々しか使わないと忘れてしまうので、処理の実現方法をメモしておきたいと思います。

前提環境

Microsoft Forms で作成されたフォームには次のような設問があります。

そして、SharePoint リストにも選択肢列として、フォームの選択肢と同じ項目のものを作成しておきます。もちろん、こちらも複数選択を許可しておきます。

ためしてみると分かるのですが、こうした状態で Microsoft Forms のフォームから回答されたデータを SharePoint リストに登録しようとすると、どうやらすんなりいきません。

Forms の回答データ形式を SharePoint リストの選択肢列の形式に変換する

すんなりいかない理由は簡単です。Microsoft Forms の選択肢の回答データ形式と、SharePoint リストが期待している選択肢列のデータ形式が異なるためです。

Microsoft Forms から複数回答可能な選択肢は次のようなデータを出力します。

["オプション 1","オプション 3","オプション 4","オプション 5"]

これに対して、SharePoint リストが期待している選択肢列のデータ形式は次のような形になります。

[
  {
    "Value": "オプション 1"
  },
  {
    "Value": "オプション 3"
  },
  {
    "Value": "オプション 4"
  },
  {
    "Value": "オプション 5"
  }
]

全然違いますね。そのため、Power Automate の処理を工夫してデータ形式を変換します。

変数とループを上手く使う

今回のデータ形式の変換を行うためには、変数とループを上手く組み合わせます。

ここから少し詳しく説明します。

まずは、SharePoint リストに渡す選択肢列のデータ形式が格納される変数を作成します。「変数の初期化する」アクションを利用して、アレイの変数を作成しましょう。

ループの条件としては、Forms の選択肢で選択された項目分だけ処理が実行されるようにしていします。そのため、今回は json() 関数を利用してループの条件を設定しました。json() 関数の引数には、Forms の選択肢の回答データを指定しています。

このように設定したループ処理の中で、「配列変数に追加」アクションを利用して、SharePoint が期待しているデータ形式を作っていきます。

これでデータ形式の変換が完了しました。あとは SharePoint リストの選択肢列に値が入った変数を設定しましょう。

応用: データ変換に選択アクションを利用する

今回は分かりやすく変数とループを利用しましたが、データ変換の「選択」アクションを利用すると一発で変換できます。「開始」には Apply to each に設定したのと同じ json() 関数を利用します。

これであれば変数を利用する必要もなく簡単にできますね。

さいごに

このあたりの処理をきちんと理解しようとすると JSON を知っておく必要がありますが、手順としては簡単ですので、そのままパターンとして覚えてしまうのでも大丈夫でしょう。

本当はもう少し簡単に出来れば良いんですけどね。