ルドルフもわたるふもいろいろあってな

Microsoft 365、Power Platform、PowerShellについて調べたことや検証したことなどを投稿します。技術の話は面白い。

【解説編その1】Microsoft Formsのフォームに回答していないひとに対して自動でメンションする


掲題のフローの解説編その1です。

フローをGitHubで公開しました。
github.com

解説の経緯

今回の投稿は概要編 の続きです。

この回で解説する範囲のフロー図

アクションの設定を閉じた状態のフロー図

この回で解説する範囲は、フロー全体のうち下図の赤枠の部分です。

開いた状態のフロー図

下図は赤枠部分のアクションを開いたフロー図です。
 ※ 「Σ(´・ω・`)なんだこの縦に長いの !?」と思っていただければしてやったり

この範囲にあるアクションの目的

この範囲にあるアクションの目的は以下の通りです。

  • 手動実行トリガーで入力された情報を取得する
  • フォームへの回答を行ったかどうか監視するメンバーを定義する
  • 指定した日時までフローを一時停止する(= 指定した日時に目的のアクションを自動実行する)

ステップごとに解説します。

ステップごとの解説

「手動でフローをトリガーします」トリガー

このトリガーは名前のとおり手動で実行するトリガーです。
 ※縦に長いため波線部分で省略しています。

この手動トリガーでは、フローの開始時に情報を入力するよう設定することができます。選択できるデータ型は以下の通りです。

選択できるデータ型:

  • テキスト
    • 一行テキスト
    • 選択肢(ドロップダウンリスト。値は単数)
    • 選択肢(複数選択が可能なリスト)
  • はい/いい
  • ファイル
  • 電子メールアドレス
  • 数値
  • 日付

このフローの開始フォームに作成した入力項目は以下の通りです。

フロー開始時の入力項目:

  • フォームURL
    • 必須入力
    • データ型:一行テキスト
  • 未回答者にメンションする(左:しない、右:する)
    • 任意入力
    • データ型:はい/いいえ
  • トリガーの日付(未指定の場合は即時実行)
    • 任意入力
    • データ型:日付
  • トリガーの時刻
    • 任意入力
    • ドロップダウンリスト

入力を必須にするか任意にするかはメニューで選択できます。


完成したものが下図のフォームです。

完成したフォーム:


フォームに入力した内容は、トリガーの出力(= "動的なコンテンツ"や triggerBody関数で呼び出せるデータ )としてフロー内のアクションで使用することができます。


このトリガーのフォーム作成におけるポイントは、選択できるデータ型に時刻がないことですそのため、このフローでは選択肢のドロップダウンリストを使って時刻の入力を実現しています。

参考:「トリガーの時刻」項目の作成手順

「入力の追加」をクリックします。

項目名(ここでは"トリガーの時刻" )を入力します。

「・・・」>「オプションのドロップダウン リストを追加する」を選択します。

「オプションのドロップダウンリスト」欄に 0:00 から 23:00 までの時刻を30分刻みで入力します。項目の数は48個です、がんばって入力してください。


(`・ω・´) がんばりました。シャキーン

「マイ プロフィールの取得 (V2)」アクション

これは「Office 365 Users」>「マイ プロフィールの取得 (V2)」アクションです。

このフローでは「スケジュール実行の設定時」と「チェック結果を投稿時」にフローの実行者にチャットで通知します。チャットの通知先であるフロー実行者のメールアドレスをこのアクションで取得します。

「変数を初期化する-チェック対象メンバー」アクション

これは「変数」>「変数を初期化する」アクションです。このアクションで、「いいね」をしているかどうかを確認する対象のメンバーを指定しています。

このステップで指定したメンバーが、このフローの最終的なアクションである「Teamsへの返信」で記載する表に表示されます。

「作成-フォームID」アクション

これは「データ操作」>「作成」アクションです。フロー開始時に入力した回答フォームのURLから、関数によってフォームIDを抽出します。

関数:

split(split(triggerBody()['text'],'&id=')[1],'&')[0]


この関数によって、下記のような回答フォームURLから「id=」のValueを取得することができます。

https://forms.office.com/Pages/ResponsePage.aspx?id=o96MaMLu10q2WzsrLlNYiJXYCzX_j15Gss7zlDt9K0NUOEtPS0QzVVNTVTNSN1N
FWVUwSU5LNDdaVy4u

追記(2022/6/24):短縮URLは使用しないでください。

このフローは回答フォームのURLに含まれるフォームIDを取得します。短縮URLではこのフォームIDを取得することができません。
そのため、フローを実行するに使用する「回答フォームのURL」をコピーする際には「URLを短縮する」のチェックボックスはオフのままにしてください。

追記(2022/6/30):フォームIDの取得アクションを改良しました。

詳しくはこちらを参照してください。
wataruf.hatenablog.com

GitHubにアップしているフローを更新しました。
github.com

「条件 - 日付が未指定であるか」アクション

このアクションは「コントロール」>「条件」アクションです。このアクションでは、フロー開始時のフォームで日付が指定されだかどうかを判定しています。


フォームの「トリガーの日付」に入力されたの値をempty関数を使って空であるかを判定し、true(= 空であるが) である場合は「はい」に分岐します。反対に、false(= 空でない)である場合は「いいえ」に分岐します。

コード:

  • empty(triggerBody()?['date'])
  • 次の値に等しい
  • true

「はい」に分岐した場合

true(= 空であるが) である場合は「はい」に分岐します。この分岐では何も行わずに後続の工程にフローを進めます。

「いいえ」に分岐した場合

false(= 空でない)である場合は「いいえ」に分岐します。この分岐では、フォームにある2つの項目「トリガーの日付」と「トリガーの時刻」に入力された日時までフローを一時停止するアクションを実行します。

”フローを一時停止するアクション” は、過去に解説したフローである「Microsoft Teamsで投稿に「いいね」をしていないひとに対してスケジュール実行でメンションする]と同じ仕組みです。
そちらのフローの解説で使用しているアクションについて触れています。そのため、今回は解説は割愛します。
wataruf.hatenablog.com

解説編その2 の内容

次回の解説編その2では、Power Automate からMicrosft Forms のAPIを使って「フォームの情報」と「回答内容」を取得するアクションについて触れます。

今回は以上です。

追記:解説編その2を投稿しました。

wataruf.hatenablog.com