Power Automate Formsの回答結果をSharePointのリストに取り込むときに使う関数まとめ

Microsoft Fomsってすごく便利だなと思っていて、何が便利かと言うと、UI調整が一切必要ないというところに個人的に魅力を感じる。

さほど入力数がないUIを作る場合は、Power AppsよりFormsでいいんじゃないかな?と思っている今日この頃。

その上で、Microsoft Formsの回答結果をPower Automate経由でSharePointリストに入れ込むときに、Power Automateの関数が必要になるところがあったので、その内容まとめ

スポンサーリンク

事前準備:Forms作成

今回用意したFormsの質問はこんな感じ。
  • テキスト
  • テキスト(整数)
  • 日付
  • テキスト(浮動小数点)
  • オプション(その他あり)
  • 評価

事前準備:SharePointリスト

Formsのデータを蓄積するSharePointリストはこんな感じ。
  • 1行テキスト
  • 数値(整数)
  • 日付と時刻
  • 数値(小数点あり)
  • 選択肢
  • 数値(整数)

このリストへFormsの回答結果をPower Automate経由で入れていく。

事前準備:Power Automate

「自動化したフロー」から
Formsの「新しい応答が送信されるとき」トリガーを選択
トリガーに今回作成したFormsを指定したら、Fomrsの「応答の詳細を取得する」アクションを追加して、「新しい応答が送信されるとき」アクションのIDを入れる。
最後にSharePointリストの「項目の作成」アクションを追加して、Power Automateの準備完了!

Forms → Power Automate → SharePointリストで使う関数

Formsで回答した項目は、全てテキスト型でPower Automateに運ばれてくる

このテキストの値をSharePointリストに格納する際、その列に応じた型に変換してあげる必要がある。

Forms「テキスト」→SharePointリスト「1行テキスト」

テキストToテキストの場合は、何も意識せず動的なコンテンツを追加するだけでOK

Forms「テキスト」→SharePointリスト「数値(整数)」

続いて、FormsのテキストをSharePointリストの整数に変える場合は、int関数を使用する。

「動的なコンテンツ」→「式」からintを選んで、
int関数の引数に「動的なコンテンツ」→「Formsの整数に変換したい回答」を指定すればOK

Forms「テキスト」→SharePointリスト「数値(小数点有り)」

小数点有りの場合はfloat関数を使用する。

やり方は変わらず「動的なコンテンツ」→「式」からfloatを選んで、
float関数の引数に「動的なコンテンツ」→「Formsの少数に変換したい回答」を指定すればOK

Forms「日付」→SharePointリスト「日付と時刻」

Formsの「日付」回答結果を、SharePointリストの「日付と時刻」に入れたい場合は、formatDateTime関数を使用する。

「動的なコンテンツ」→「式」からformatDateTimeを選んで、
formatDateTime関数の引数に「動的なコンテンツ」→「Formsの日付に変換したい回答」を指定すればOK

Forms「オプション」→SharePointリスト「選択肢」

Formsの「オプション」回答結果を、SharePointリストの「選択肢」に入れる場合は、テキストに入れる場合と同様、何も意識せず動的なコンテンツを追加するだけでOK

「カスタム値の入力」から
入れたい値を選ぶ。

ちなみに、「その他」オプションがある選択肢で、SharePointリストの選択肢に存在しない回答を入れても問題なく動く

A、B、O、ABの選択肢列に
Formsで「ボンベイ型」とか答えても
選択肢に存在しない「ボンベイ」がSharePointリストの列に入る

Forms「評価」→SharePointリスト「数値(整数)」

最後、Formsの「評価」回答結果をSharePointリストの「数値(整数)」に入れる場合、「テキスト → 数値」と同様にint関数を使用する。

「動的なコンテンツ」→「式」からintを選んで、
int関数の引数に「動的なコンテンツ」→「Formsの整数に変換したい回答」を指定すればOK

複数選択可能な質問

Formsの非必須項目(空白有り)の場合

Formsの回答には「必須」項目と「非必須」項目があって、「非必須」の時は回答結果として「空白」がPower Automateに飛んでくることがある。

例えば準備で用意したFormsの回答項目を全て「非必須」に変えて、全部回答せずにFormsを回答すると、こんな値がPower Automateに飛んでくる。
これに単純にint関数やfloat関数、formatDateTime関数を使ってしまうと、こんな感じで引数エラー(これらの関数は空白を引数にできない)が発生する。

これを回避するために、Formsの「非必須」回答項目を、SharePointリストの「数値」や「日付と時刻」に入れる際は、if関数をかませる必要がある。

例えば非必須項目を「数値」に変える場合はこんな感じの式に、

if(
    empty(outputs('応答の詳細を取得する')?['body/r2cf09ac74d9b4a749b3e0c4d0c9a1ede']),
    null,
    int(outputs('応答の詳細を取得する')?['body/r2cf09ac74d9b4a749b3e0c4d0c9a1ede']))
)
「日付と時刻」に直す場合は、第3引数をint関数からformatDateTime関数に変えてあげればよい。

if(
    empty(outputs('応答の詳細を取得する')?['body/r2cf09ac74d9b4a749b3e0c4d0c9a1ede']),
    null,
    formatDateTime(outputs('応答の詳細を取得する')?['body/r2cf09ac74d9b4a749b3e0c4d0c9a1ede']))
)

※式は見やすい用に改行しています。

※ちなみに、Formsの非必須項目をSharePointリストの「1行テキスト」列や「選択肢」列に入れるときは、これらの列が空白を受け入れることができるためif文は不要

ということで、Formsの回答が全て非必須項目だったら、Power Automateはこんな感じになる。
実行すると何も入っていないリストアイテムができあがる。

もちろん、SharePointリストの列に「入力必須」項目があると、このPower Automateはエラーを起こすが、そのときは第2引数の「null」を規定値に変えてあげれば、問題なく動作する。

コメント

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