MoreBeerMorePower

Power Platform中心だけど、ノーコード/ローコード系を書いてます。

メッセージセンターのPlanner同期結果をTeamsにお知らせ

はじめに

Microsoft 365 管理センターの「メッセージセンター」に最近 Planner との同期設定が追加されました。メッセージセンターに届いたメッセージの中で、管理者側でアクションが必要なものをタスク化することが目的です。

この同期機能についてはすでに複数のブログで素敵なまとめが書かれていますので、下記を参照してください。

shanqiai.weblogs.jp

art-break.net

この同期機能では定期的な同期手段としてPower Automateのスケジュールフローが利用されていますが、このフローは大変シンプルすぎて何かほかの設定を施す余地もなさそうに見えます。

f:id:mofumofu_dance:20200823013211p:plain
メッセージセンターからPlannerへの同期フロー

今回はこのフローを少し改良して、同期結果 (追加・変更されたタスクの一覧) を Microsoft Teams にお知らせする方法をご紹介します。

送られる通知は以下のようなカードです。追加されたタスクのタイトルと、詳細を表示するためのタスクへのリンクがボタンで用意されています。

f:id:mofumofu_dance:20200823014030p:plain

フローの修正点

先ほどのフローを下図のように修正しました。ポイントは

  • 同期アクションの前後にPlanner のタスク一覧を取得する
  • フィルターアクションで、同期後のタスク一覧のうち、同期前と一致しないモノを抽出

の2点です。これができれば最後の通知方法は、別にAdaptive Cardsを必ずしも使う必要はありません。

f:id:mofumofu_dance:20200823014512p:plain
フローのメイン部分

気を付けるのはフィルターアクションのところです。どれを比較するのか、何と比較するのかを説明します。

f:id:mofumofu_dance:20200823014912p:plain

  • ① まずフィルターの元データになるのは 同期後のタスク一覧です
  • ②, ③の 条件は、同期前のタスク一覧含まれない で抽出します

条件の詳細設定で関数を使って書けば以下の通りです。

@not(contains(outputs('List_tasks')?['body/value'], item()))

これだけで同期されたメッセージの差分抽出までできました。

通知

通知は今回も Adaptive Card を利用しています。配列データから一覧形式のカードを作成する際の手順については以前の投稿を参照してください。

mofumofupower.hatenablog.com

無駄な通知を送らないために、フィルターアクションの後に条件分岐で、「フィルター結果の配列の長さが0出ないこと」を判定しています。

f:id:mofumofu_dance:20200823015857p:plain

念のため、Selectアクションのマッピング (Adaptive Cardの繰り返し部分)は以下のようなJSONです。

{
  "type": "ColumnSet",
"separator":true,
  "columns": [
    {
      "type": "Column",
      "width": 80,
      "items": [
        {
          "type": "TextBlock",
          "text": "@{item()?['title']}",
          "separator": true,
          "wrap": true,
          "weight": "Bolder"
        }
      ]
    },
    {
      "type": "Column",
      "width": 20,
      "items": [
        {
          "type": "ActionSet",
          "actions": [
            {
              "type": "Action.OpenUrl",
              "title": "Link",
              "url": "https://tasks.office.com/xxxxxxx.com/Home/Task/@{item()?['id']}"
            }
          ]
        }
      ]
    }
  ]
}

ここで、実際にタスクの詳細画面を開くための Action.OpenUrl の url ですが、テナントに固有のパス+タスクのIDで構成されています。 実際作る場合にはタスクの詳細画面を実際に開いてみて、/Tasks/までのURLを確認してください。

まとめ

タスクが生成される都度メッセージや通知を送るのに比べて、今回紹介した方法であれば日毎の一覧を通知することができるのでわずらわしさが減ります。

フィルター後は、単に『追加のタスクがありますよ~』というお知らせを管理者向けに送るのでも十分かもしれません。 ケースに合わせて試してカスタマイズしてみてください!