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

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

【解説編その3】[強化版]Microsoft Teams で特定のタグがつかわれたらアクションを実行する

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

フローはGitHubで公開しています。
github.com

解説の経緯

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

この回で解説する範囲

解説する範囲のフロー図

この回で解説する範囲は、フロー全体のうち下図の赤枠の部分です。このフローの最終的な目的である「タグに紐づいたアクションの実行」について解説します。

今回の範囲の目的は「タグに紐づいたアクションを実行すること」

解説編その2 の範囲で得たものは、下記のようなタグの配列です。

[
  {
    "displayName": "TagTrigger:ステータスを「受理済み」に更新"
  }
]

ステップごとの説明

1.「Apply to each」アクション

このアクションは「コントロール」>「Apply to each」です。今回の範囲のアクションは「Apply to each」によってタグごとに実行されるアクションのまとまりです。

解説編その2 の範囲で得たデータはタグの配列です。つまり、トリガーとなったひとつの投稿から取得されるタグは複数の場合があります。そのため、取得したそれぞれのタグごとにアクションを実行するために「Apply to each」を使用しています。

2.「作成」アクション

このアクションは「データ操作」>「作成」アクションです。

replace関数を使って "TagTrigger:" という文字列を空文字に置き換えています。それによって"アクションに紐づく文字列" の部分のみを後続のアクションに渡します。

コード:

"inputs": "@replace(item()?['displayName'],'TagTrigger:','')

3.「スイッチ」アクション

このアクションは「コントール」>「スイッチ」アクションです。前のステップから受け取った"アクションに紐づく文字列" をキーにしてどのアクション分岐にするかを判断します。

ここからは、"アクションに紐づく文字列"と"それによって実行されるアクション"の例です。

3-1.「リストに登録」分岐

"アクションに紐づく文字列"が「リストに登録」である場合に実行するアクションです。

3-1-1.「Html からテキスト(プレビュー)」アクション

このアクションは「Content Conversion」>「tml からテキスト(プレビュー)」です。

コード:

{
"inputs": {
"parameters": {
"Content": "

@{outputs('メッセージ詳細を取得する-親の投稿')?['body/body/Content']}

"
},
}
}

トリガーとなった投稿の本文をSharePointリストの複数行テキストに転記するために変換を行います。
変換元:

変換後:

3-1-2.「項目の作成」アクション

このアクションは「SharePoint」>「項目の作成」です。SharePointリストのアイテムを作成します。

コード:

{
"inputs": {
"parameters": {
"dataset": "https://m365x000309.sharepoint.com/sites/msteams_17f4f3/",
"table": "1863ed42-6a5c-443e-ab0f-d7b29b285a25",
"item/Title": "@outputs('メッセージ詳細を取得する-親の投稿')?['body/subject']",
"item/OData__x8a73__x7d30_": "@body('Html_からテキスト')",
"item/OData__x30b9__x30c6__x30fc__x30bf__x30": "未受理",
"item/OData__x89aa__x306e__x6295__x7a3f__x30": "@outputs('メッセージ詳細を取得する-親の投稿')?['body/id']"
},
}
}

ポイントはリストアイテムに投稿する列に「親の投稿のID」を含めていることです。これがあることで、トリガーとなったスレッドからリストアイテムを探せるようにしています。

「親の投稿のID」列は内部的に使う列なので非表示にしています。

3-1-3.「作成-フローによる返信の本文」アクション

このアクションは「データ操作」>「作成」アクションです。

フローが実行されたことをTeamsのスレッド上で表すために、フローの最後のアクションとしてスレッドへの返信を行います。「作成-フローによる返信の本文」アクションで本文を定義します。

3-1-4.「メッセージへの返信の投稿 (V2)(プレビュー)」アクション

このアクションは「Microsoft Teams」>「メッセージへの返信の投稿 (V2)(プレビュー)」です。スレッドに返信を行います。

コード:

{
"inputs": {
"parameters": {
"groupId": "@outputs('メッセージ詳細を取得する-親の投稿')?['body/teamId']",
"channelId": "@outputs('メッセージ詳細を取得する-親の投稿')?['body/channelId']",
"messageId": "@outputs('メッセージ詳細を取得する-親の投稿')?['body/id']",
"body/body/content": "

@{outputs('作成-フローによる返信の本文')}

"
},
},
}

これでこの分岐のアクションは以上です。

3-2.「ステータスを「受理済み」に更新」分岐

"アクションに紐づく文字列"が「ステータスを「受理済み」に更新」である場合に実行するアクションです。

3-2-1.「複数の項目の取得」アクション

このアクションは「SharePoint」>「複数の項目の取得」アクションです。「親の投稿のID」列の値をキーにしてスレッドに紐づくリストアイテムを取得します。

3-2-2.「作成-配列から目的のリストアイテムを取得」アクション

このアクションは「データ操作」>「作成」アクションです。

「複数の項目の取得」アクションの出力が配列であるため、first関数で目的のアイテムを取得します。

コード:

"inputs": "@first(outputs('複数の項目の取得')?['body/value'])"

3-2-3.「項目の更新」アクション

このアクションは「SharePoint」>「項目の更新」です。前アクションで取得したIDのアイテムの「ステータス」列を更新します。

Teamsへの返信

※ここは「リストに登録」分岐と同じなので割愛します。

3-3.「ステータスを「審議完了」に更新」分岐

この分岐は、3-2.「ステータスを「受理済み」に更新」分岐 とほぼ同じです。この分岐ではステータスを「審議完了」に更新します。

3-4.「既定」分岐

この分岐は、どの分岐にもタグの文字列が当てはまらなかったときのアクションを定義します。このフローは「特定のキーワードに紐づくアクションを実行」を目的としているため、この分岐は空のままにします。

最後に

これでこのフローの解説は以上です。フローはGitHubで公開していますので下記URLからダウンロードして使用してください。
github.com

タグの設定はフローに含まれないため、解説編を読んだうえでフローと合わせて設定を行ってください。

タグからフローを呼び出すアクションは色々な活用しかたがあると思います。面白い使い方を見つけたら教えていただけると嬉しいです。
(`・ω・´)