タイトル通りですが、Formsで社内アンケートを取ることを考えてみてください。

こんなことがやりたい

アンケートには複数選択可能な選択肢があるとします。

このフォームは、問い合わせフォームなので進捗状況や担当者を把握するために Planner を使いたいと考えました。その際「カテゴリ」として複数選択可能な項目をどう管理するか悩みましたが、今回はPlanner のラベルを使うこととしました。

なぜシーチキンなのかは不明

ユーザー操作としては、フォームに追加されたら Planner にタスクが追加され、必要に応じて担当者を割り当てたり、期限を設定することができます。

Automate フローで作るぞ

こんな感じを作りたい

さて、問題は forms > Planner へのタスク自動登録です。ラベルへの複数選択項目を割り振る方法が分かりません。

true/false ですかぁ

こんな時は関数を使います。※2 

contains関数を使えばいいのだ ※2

contains(outputs(‘応答の詳細を取得する’)?[‘body/fiao8jofdji8wajiopdfa0jidsa7′],’赤’)

contains関数 リファレンス

contains関数は、第一引数の中に第二引数の項目があるかどうかを確認します。 項目が見つかった場合は true を返し、見つからない場合は false を返します。この関数をそれぞれのラベルにセットします。

Body/ 以降の文字列は以下の図の”応答の詳細を取得する”で取得した、選択肢項目の文字列です。なので先に”応答の詳細を取得する”まで設定したフローでフォームの登録テストをすると良いです。

赤枠の中の ”” 内の文字列をゲットします。

第二引数は上の例文では 赤 となっていますが、今回はラベルを変更したので最終的には以下のような形になります。

contains(outputs(‘応答の詳細を取得する’)?[‘body/fiao8jofdji8wajiopdfa0jidsa7′],’制度’)
contains(outputs(‘応答の詳細を取得する’)?[‘body/fiao8jofdji8wajiopdfa0jidsa7′],’対応方法’)
contains(outputs(‘応答の詳細を取得する’)?[‘body/fiao8jofdji8wajiopdfa0jidsa7′],’ルール’)
contains(outputs(‘応答の詳細を取得する’)?[‘body/fiao8jofdji8wajiopdfa0jidsa7′],’誰に聞いたらいいか分からない’)
contains(outputs(‘応答の詳細を取得する’)?[‘body/fiao8jofdji8wajiopdfa0jidsa7′],’シーチキン’)

はい、いいえ ではなく、[カスタム値の入力]を選択すると、慣れ親しんだ 式 の入力ができるので、各項目に式として設定します

ラベルの色との対応を間違えないように

ラベルに設定できた!

ラベルにセットできた!

今回のPlannerの使い方はあくまでもTeamsスレッドの補助を目的としているので、Plannerで管理したいのは

  • タスクの完了漏れが無いように、タスクを記載する
  • 依頼本文が長文になっても気にしない ※1
  • 可能であれば担当者をセットする
  • 可能であれば期限をセットする

という割り切った使い方なのでシンプルです。おそらく担当者割り当てせずにPlannerのWebページで進捗確認だけする予定です。

※1 内容が長文の場合

目安箱という性質上、長文になることが想定されますが、Plannerのタイトルには255文字までしか設定できません。

substring関数で文字列を適当にカットします。

substring(outputs(‘応答の詳細を取得する’)?[‘body/r55e0837f649d461b9b2bdf20547f70f0’],0,250)

  • 第一引数で対象文字列(この場合 応答の詳細を取得する の応答結果で得たタイトル部分の文字列を使います。)
  • 第二引数で開始位置(たぶん)ゼロ
  • 第三引数で何文字までかを指定、250ぐらいでいいんじゃないかな

参考:Power Automateで文章から文字列を抽出する。

※2 いつもありがとうございます

ドやりながらここまで解説してきましたが、いつものおおたさんやHiroさんに助けてもらいながら作りました。以下のTwitterリンクから詳細を確認できます。

まだ完成してません

「こんな難しいことしなくても」Listsで管理できるよね? と思われるかもしれません。ほかにも要件があってPlannerで登録したかったのです。この環境はエンドユーザーの目に見えているのはTeamsのチャネルスレッドです。投稿された内容にオープンに議論するためTeamsに自動投稿をしています。

エンドユーザーには「この議論は終わりました。」とTeamsチャネルスレッドで「完了」コメントを最後に書きたいのですが、じゃあどのタスクだっけ?Teamsスレッドはどこ?などこれ以外にも要望があります。

その解決方法については別途書きたいと思います。