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

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

【Power Automate】【解説編その3】スレッドでの発言者を既存のタグに追加する

掲題のフローについての解説編その3です。

このフローをGitHubで公開しました。下記リンク先からダウンロードしてください。

github.com

解説の経緯

今回の投稿は概要編解説編その1解説編その2の続きです。

フローの使用イメージ

フローの使用イメージについては概要編に記載しています。概要編を未読のかたはそちらを先に参照ください。

今回の投稿で解説する範囲

今回の投稿で解説する範囲は下図の赤枠の部分です。

ステップごとの解説

変数を初期化する-タグに含まれているメンバー一覧

このアクションは「変数」>「変数を初期化する」です。後続の処理でメンバー一覧を格納する配列変数を定義します。この時点の設定値(= 初期値)は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>"
},

最後に

解説編の投稿が遅くなりましたが、これでこのフローについては以上です。

(`・ω・´)シャキーン