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

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

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

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

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

github.com

解説の経緯

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

フローの使用イメージ

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

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

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

ステップごとの解説

「スコープ-更新対象のタグを選択する」アクション

このアクションは「コントロール」>「スコープ」です。このスコープはフローの可読性を上げるために複数のアクションをグループ化するために使用します。

このスコープに含まれるアクションは下図の6つです。

「チームのタグをすべて一覧表示する」アクション

このアクションは「Microsoft Teams」>「チームのタグをすべて一覧表示する」です。

"parameters": {
    "groupId": "@triggerBody()?['entity']?['teamsFlowRunContext']?['channelData']?['team']?['aadGroupId']"
},

このアクションの出力はこちらです。

Value の配列部分がタグの情報です。タグが2つあるのがわかります。

「選択-タグの名前とIDを取得」アクション

このアクションは「データ操作」>「選択」です。前アクションで取得したタグの情報から、タグのタイトルとIDのみを取得します。

"inputs": {
    "from": "@outputs('チームのタグをすべて一覧表示する')?['body/value']",
    "select": {
        "Title": "@item()?['displayName']",
        "Value": "@item()?['id']"
    }
},

このアクションの出力はこちらです。

アダプティブ カードを投稿して応答を待機する」アクション

このアクションは「Microsoft Teams」>「アダプティブ カードを投稿して応答を待機する」です。

"parameters": {
    "poster": "Flow bot",
    "location": "Chat with Flow bot",
    "body/body/messageBody": "{\n    \"type\": \"AdaptiveCard\",\n    \"body\": [\n        {\n            \"type\": \"TextBlock\",\n            \"size\": \"Medium\",\n            \"weight\": \"Bolder\",\n            \"text\": \"指定したタグに指定したスレッドの発言者を追加する\"\n        },\n        {\n            \"type\": \"TextBlock\",\n            \"text\": \"メンバーを追加する対象のタグを指定してください\",\n            \"wrap\": true\n        },\n        {\n            \"type\": \"TextBlock\",\n            \"text\": \"メンバー\",\n            \"wrap\": true,\n            \"weight\": \"Bolder\"\n        },\n        {\n            \"type\": \"TextBlock\",\n            \"text\": \"@{outputs('作成-投稿者のdisplayNameの配列')}\",\n            \"wrap\": true\n        },\n        {\n            \"type\": \"TextBlock\",\n            \"text\": \"タグ\",\n            \"wrap\": true,\n            \"weight\": \"Bolder\"\n        },\n        {\n            \"type\": \"Input.ChoiceSet\",\n            \"choices\": @{body('選択-タグの名前とIDを取得')},\n            \"id\": \"TagsInTeam\",\n            \"wrap\": true,\n            \"style\": \"expanded\"\n        },\n        {\n            \"type\": \"ActionSet\",\n            \"actions\": [\n                {\n                    \"type\": \"Action.Submit\",\n                    \"title\": \"メンバーの追加を実行\"\n                }\n            ]\n        }\n    ],\n    \"$schema\": \"http://adaptivecards.io/schemas/adaptive-card.json\",\n    \"version\": \"1.4\"\n}",
    "body/body/updateMessage": "実行要求を受け付けました。",
    "body/body/recipient/to": "@{triggerBody()?['entity']?['teamsFlowRunContext']?['from']?['aadObjectId']};"
},

上記のJSONによって作成されたAdaptive Card は下図の通りです。「メンバー」欄に、スレッドに投稿をしたユーザーの表示名を箇条書きで一覧表示しています。また、これらのメンバーの追加先とするタグをラジオボタンで選択できるようにしています。

箇条書きとラジオボタンのインプットとなっている情報は「解説編その1」の「今回の解説範囲で得た出力」で触れています。

このアクションの出力はこちらです。赤枠で囲んでいるdata というプロパティがAdaptive Card でユーザーが入力した情報です。後続のアクションでこの情報を使用することができます。

「作成-更新対象のタグのID」アクション

このアクションは「データ操作」>「作成」です。前アクションの出力から、タグIDのみを取得します。

"inputs": "@outputs('アダプティブ_カードを投稿して応答を待機する')?['body/data/tagsInTeam']",

このアクションの出力はこちらです。XXXです。

「アレイのフィルター処理」アクション

このアクションは「データ操作」>「アレイのフィルター処理」です。「選択-タグの名前とIDを取得」アクションで取得したタグ一覧のうち、Adaptive Card で指定されたタグとIDが一致するものを取得します。

"inputs": {
    "from": "@body('選択-タグの名前とIDを取得')",
    "where": "@equals(item()?['Value'], outputs('アダプティブ_カードを投稿して応答を待機する')?['body/data/tagsInTeam'])"
},

このアクションの出力はこちらです。

  「作成-更新対象のタグの名前」アクション

このアクションは「データ操作」>「作成」です。前アクションで取得した情報から、タグの名前のみを取得します。。

"inputs": "@first(body('アレイのフィルター処理'))?['Title']",

このアクションの出力はこちらです。

「Apply to each-対象の人数分だけ追加処理を行う」アクション

このアクションは「コントロール」>「Apply to each」です。対象のタグに対してメンバーを追加します。メンバーの追加は1回のメンバーの追加アクションにつきひとりを追加するため、追加するメンバーの人数だけ繰り返し処理を行います。

この繰り返し処理のインデクサは「解説編その1」の範囲で取得した「スレッドに投稿にしたユーザーのID一覧」です。

今回の例では5名のユーザーが投稿を行っているため、5回の繰り返し処理が行われます。

「タグにメンバーを追加する」アクション

このアクションは「Microsoft Teams」>「タグにメンバーを追加する」です。アクション名の通り、タグにメンバーを追加します。

"parameters": {
    "groupId": "@triggerBody()?['entity']?['teamsFlowRunContext']?['channelData']?['team']?['aadGroupId']",
    "tagId": "@outputs('作成-更新対象のタグのID')",
    "body/userId": "@item()"
},

このアクションによってタグにユーザーが追加されます。

次回「解説編その3」では処理結果を通知する方法です

フローの実行者に処理結果をチャットで通知するアクションについて解説します。


今回は以上です。