掲題のフローについての解説編その3です。
このフローをGitHubで公開しました。下記リンク先からダウンロードしてください。
- 解説の経緯
- フローの使用イメージ
- 今回の投稿で解説する範囲
- ステップごとの解説
- 変数を初期化する-タグに含まれているメンバー一覧
- 「スコープ-フローの実行者に処理結果をチャットで通知する」アクション
- 「タグのメンバーを一覧表示する」アクション
- 「Apply to each-メンバーのIDをもとに「表示名」「メールアドレス」配列を作成」アクション
- 「ユーザー プロフィールの取得 (V2)」アクション
- 「条件-今回追加したユーザーである」アクション
- 「配列変数に追加-タグに含めるメンバー一覧」アクション
- 「配列変数に追加-タグに含めるメンバー一覧 2」アクション
- 「HTML テーブルの作成-タグに含まれているメンバー一覧」アクション
- 「作成-チャットの本文」アクション
- 「チャットまたはチャネルでメッセージを投稿する」アクション
- 最後に
解説の経緯
フローの使用イメージ
フローの使用イメージについては概要編に記載しています。概要編を未読のかたはそちらを先に参照ください。
今回の投稿で解説する範囲
今回の投稿で解説する範囲は下図の赤枠の部分です。
ステップごとの解説
変数を初期化する-タグに含まれているメンバー一覧
このアクションは「変数」>「変数を初期化する」です。後続の処理でメンバー一覧を格納する配列変数を定義します。この時点の設定値(= 初期値)はnullとします。
「スコープ-フローの実行者に処理結果をチャットで通知する」アクション
このアクションは「コントロール」>「スコープ」です。このスコープはフローの可読性を上げるために複数のアクションをグループ化するために使用します。
このスコープに含まれるアクションは下図の5つです。
「タグのメンバーを一覧表示する」アクション
このアクションは「Microsoft Teams」>「タグのメンバーを一覧表示する」です。
"parameters": { "groupId": "@triggerBody()?['entity']?['teamsFlowRunContext']?['channelData']?['team']?['aadGroupId']", "tagId": "@outputs('作成-更新対象のタグのID')" },
このアクションの入力は下記の通りです。
- 「チーム」欄:トリガーの起点となるスレッドが投稿されているチーム
-「タグID」欄:「作成-更新対象のタグのID」アクションの出力
「作成-更新対象のタグのID」アクションの出力(参照:「解説編その2」)
このアクションの出力は下図の通りです。
「Apply to each-メンバーのIDをもとに「表示名」「メールアドレス」配列を作成」アクション
このアクションは「コントロール」>「Apply to each」です。繰り返し処理を行います。
繰り返し処理の入力情報はタグに含まれるメンバーを表示名の昇順で並び替えた配列です。
この繰り返し処理によって「タグに含まれるメンバー一覧」という名前の配列変数に要素を追加します。この配列変数がフロー実行者宛に送られるメンバー一覧の表になります。
「ユーザー プロフィールの取得 (V2)」アクション
このアクションは「Office 365 Users」>「ユーザー プロフィールの取得 (V2)」です。ユーザーIDに紐づくユーザープロファイルを取得します。
"parameters": { "id": "@items('Apply_to_each-メンバーのIDをもとに「表示名」「メールアドレス」配列を作成')?['userId']" },
このアクションの出力はこちらです。
ユーザープロファイルを取得している理由はフロー結果をチャットで送る際の表に載せる情報を取得するためです。
「条件-今回追加したユーザーである」アクション
このアクションは「コントロール」>「条件」です。タグに追加したユーザーが既にタグに存在していたかどうかを判定しています。
equals":["@contains(outputs('作成-重複を排除'),item()?['userId'])",true]}
「はいの場合」の分岐
「配列変数に追加-タグに含めるメンバー一覧」アクション
このアクションは「変数」>「配列変数に追加」です。「今回追加した」欄が「○」である要素を配列に追加します。
"inputs": { "name": "タグに含まれているメンバー一覧", "value": { "表示名": "@{outputs('ユーザー_プロフィールの取得_(V2)')?['body/displayName']}", "メールアドレス": "@{outputs('ユーザー_プロフィールの取得_(V2)')?['body/mail']}", "今回追加した": "〇" } },
「いいえの場合」の分岐
「配列変数に追加-タグに含めるメンバー一覧 2」アクション
このアクションは「変数」>「配列変数に追加」です。「今回追加した」欄が「(空白)」である要素を配列に追加します。
"inputs": { "name": "タグに含まれているメンバー一覧", "value": { "表示名": "@{outputs('ユーザー_プロフィールの取得_(V2)')?['body/displayName']}", "メールアドレス": "@{outputs('ユーザー_プロフィールの取得_(V2)')?['body/mail']}", "今回追加した": "" } },
「HTML テーブルの作成-タグに含まれているメンバー一覧」アクション
このアクションは「データ操作」>「HTML テーブルの作成-タグに含まれているメンバー一覧」です。配列変数に格納しているデータをHTMLテーブルに変換します。
"inputs": { "from": "@variables('タグに含まれているメンバー一覧')", "format": "HTML" },
このアクションの入力は下図の通りです。
このアクションの出力は下図の通りです。
「作成-チャットの本文」アクション
このアクションは「データ操作」>「作成」です。チャットの本文を定義します。
"inputs": "指定したスレッドの発言者をタグに追加しました。\n\n【タグの名前】\n@{outputs('作成-更新対象のタグの名前')}\n\n【メンバー】\n@{body('HTML_テーブルの作成-タグに含まれているメンバー一覧')}\n\n【元のスレッド】\n<a href=\"@{triggerBody()?['entity']?['teamsFlowRunContext']?['messagePayload']?['linkToMessage']}\">スレッドを開く</a>",
「チャットまたはチャネルでメッセージを投稿する」アクション
このアクションは「Microsoft Teams」>「チャットまたはチャネルでメッセージを投稿する」です。
"parameters": { "poster": "Flow bot", "location": "Chat with Flow bot", "body/recipient": "@{triggerBody()?['entity']?['teamsFlowRunContext']?['from']?['aadObjectId']};", "body/messageBody": "<p>@{replace(outputs('作成-チャットの本文'),decodeUriComponent('%0A'),'<br/>')}</p>" },
最後に
解説編の投稿が遅くなりましたが、これでこのフローについては以上です。
(`・ω・´)シャキーン