はじめに
Teamsが新しくなって、スレッドを新しいタブで開くことができるようになりました。
そのほかにも、チャットやタブ、アプリバーも新しいウィンドウで開けます。
この記事はメニューにない、チャネルを新しいウィンドウで開くためのボタンをPower Automate で作成するフローです。
動作イメージは以下の通りです。
スレッド単位じゃなくて、チャネル単位で新しいウィンドウで開きたかったので、フローで何とかした
— おいしみ (@ksgiksg) December 23, 2023
副産物として、リンクの取れないプライベートチャネルでも開けるようになりました! pic.twitter.com/eGxpx1jDgp
Teamsの設定
この機能を使うためには、設定:Teams ウィンドウでコンテンツを開いています
を新しいウィンドウを選択した状態にしておくことが必要です。
この設定をONにしておくと、例えばこのような通知トーストをクリックしたときにも、新しいウィンドウで開く動作となります。
この設定を利用してチャネルを新しいウィンドウで開くためのボタンを作成します。
チャネルのリンク
チャネルには、「標準チャネル」「共有チャネル」「プライベートチャネル」の3種類があります。
この3種類は、チャネルを作成するときにも確認できますね。
このうち、「標準チャネル」はチャネルへのリンクを取得することができます。
ここで取得したリンク先に、ブラウザなどTeamsの外からアクセスしてみます。
Teamsデスクトップアプリで開くか確認されるので「開く」をクリック。
先ほどTeamsの設定を変えておいたので、新しいウィンドウでチャネルが開かれます。
これを利用すればチャネルが新しいウィンドウで開けるのですが、ブラウザにいちいち移動するのは面倒ですし、なにより「共有チャネル」「プライベートチャネル」ではリンクが取得できません。
これらの問題を解決するために、Power Automateを使用します。
フローの作成
選択したメッセージを起点にチームを特定し、タスクモジュールで応答で作成したリンクをアダプティブカードにして表示させます。
このトリガーは、プライベートチャネルでは使用できないので、標準チャネルか共有チャネルのメッセージから呼び出す必要があります。
チャネルの一覧表示
必要なチャネルの情報を取得するためのアクションです。
チームの指定は、カスタム値からトリガーのチームIDを使用します。
このアクションで、チャネルへのリンクとなるwebUrl
が取得できるので、あとはこのリンクを開くボタンを作ってあげればOKです。
アダプティブカード
説明の順番とフローの順番が前後しますが、最終的にはこのタスクモジュールでアダプティブカードを表示させます。
実際の動きとしてはこのような画面をTeamsで表示し、ボタンをクリックできるようにしています。
ということで、最終的に作りたいカードから先に考えておきます。
リンクが開けさえすればよいので、Action.OpenUrl
のボタンを配置できればなんでも大丈夫です。
チャネルの数だけボタンを配置したいので、テーブルを使ってこのように作成しました。
テーブル要素の作成
取得したチャネルの情報から、アダプティブカードの要素を作成します。
選択アクションで必要な部分のみ取り出して、ループを回して文字列変数に追加して・・・とやってもよいのですが、アクションの節約のために、選択アクション1個でやっちゃいました。
json(
concat(
'{"type":"TableRow","cells":[{"type":"TableCell","items":[{"type":"TextBlock","text":"',
item()?['membershipType'],
'","wrap":true}]},{"type":"TableCell","items":[{"type":"ActionSet","actions":[{"type":"Action.OpenUrl","title":"',
item()?['displayName'],
'","url":"',
item()?['webUrl'],
'"}]}]}]}'
)
)
アダプティブカードの作成
選択アクションで作成したテーブル要素を入れ込んで、作成アクションでカード全体を完成させます。
{
"type": "AdaptiveCard",
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"version": "1.4",
"body": [
{
"type": "Table",
"columns": [
{
"width": 1
},
{
"width": 3
}
],
"rows": @{body('選択')}
}
]
}
以上でフローが完成です。
説明が前後しちゃったので、全体像と見比べてみてください。
おわりに
こういうちょっとした便利を作れるのがPower Automate の醍醐味だと、個人的には思っています。
「利便性とフロー作成の手間が釣り合ってないやないかい!」というご指摘は耳にしない主義ですので悪しからず。(∵)