Teamsで複数人にメンションをかける方法が知られています。リンク先の方法では、複数のメールアドレスが配列として得られています。一方で、複数人の宛先を記述するよくやる方法として、カンマ,やセミコロン;で区切って複数のメールアドレスを書き並べた文字列を作ることがあります。本記事では、このようなケースでカンマ区切り文字列から複数のメールアドレスの配列を生成します。
なお、この記事で紹介するフローであれば、カンマ区切りで連結していない単独のメールアドレスが入力であるときも正常に動作します。
フローの全体像
Power Automateのフローは以下の通りです。各処理の中身は後述します。
各アクションの解説
カンマ区切りのメールアドレス
組み込み>データ操作>作成アクションを使用して、このフローで使用するカンマ区切りテキスト形式のメールアドレスを格納します。実際のフローでは、PowerAppsトリガーなどを経由して値を渡します。
ここでは “aa@exaple.com, bb@example.com, cc@example.com” のような形でメールアドレスが記述されています。
メールアドレス配列の初期化
組み込み>変数>変数を初期化するアクションを使用して、カンマ区切り文字列から配列を生成します。
split関数に分割する文字列と、分割する位置を指定する文字(ここではカンマ,)を与えることで、文字列を分割します。注意すべきことに、split関数を使うだけではPower Automateのフローで繰り返し操作の対象となる配列になりません。split関数の出力は文字列です。変数を初期化するアクションに配列のもとと「値」に、このsplit関数の出力を渡す必要があります。
式にはsplit(outputs(‘カンマ区切りメールアドレス’),’,’)のように記述します。
この配列は「メールアドレス配列」という名前で後段で使用できます。
メンショントークンの初期化
各メールアドレスから生成したメンショントークンを格納します。組み込み>変数>変数を初期化するアクションを使用して、空の配列を用意します。
Apply to each
組み込み>コントロール>それぞれに適用するアクションを使用して、「メールアドレス配列」から各メールアドレス要素を取り出してメンショントークンを生成する処理を行います。
ユーザープロフィールの取得
標準>Office365Users>ユーザープロフィールの取得(V2)アクションを使用して、メールアドレスからユーザープリンシパル名を取得します。@mentionトークンを取得するのにユーザープリンシパル名が必要なのに対して、所属組織によってはメールアドレスがユーザープリンシパル名と異なる場合があるためです。
ここで入力には以下のように記述しています。
trim(items(‘Apply_to_each’))
trim関数はスペースを削除する関数です。カンマ区切りテキスト形式でメールアドレスを入力する際に、メールアドレス間にスペースを入力することが多いので、スペースを除去する処理を介在させた方が安全です。
ユーザーの@mentionトークンを取得する
Teamsの当該アクションで、ユーザープリンシパル名から@mentionトークンを生成します。
配列変数に追加
組み込み>変数>配列変数に追加アクションで、生成した@mentionトークンを配列に格納します。
メンショントークンの結合
組み込み>データ操作>結合アクションで、「メンショントークン」配列の要素を結合します。「次を使用して結合」はカンマ,を使用していますが、半角スペースなどでもOKです。
チャットまたはチャネルでメッセージを投稿する
「メンショントークンの結合」アクションの出力をメッセージの中で使用すれば、メンションがかかります。
なお、複数のメンショントークンを作成し、結果としてひとつのメッセージの中で同じユーザーに対して何度もメンションがかかるような本文ができたときは、本文中で最初にそのユーザーが登場する部分だけメンションがかかったように表示されます。
なお、Teamsの制限としてひとつのメッセージでメンションできるユーザーの上限は20人までです。20人以上に同時にメンションするにはタグメンションやチームメンションの使用が必要です。
ユーザーへのメンションに拘る場合、メッセージを投稿した上でスレッドに返信する形でメンションを並べる形が考えられます。。PowerAppsでの実装例を別のページに示します。PowerAutomateではChunk関数を使ってメンションの宛先を分割する方法があります。