はじめに
Teams のチームタグの管理を Power Automate を使って自動化したので、手順を記録します。
Teamsの大規模なチームでは、タグの作成や編集をメンバーに任せると、管理が難しくなります。
タグの乱立、改変、放置のほか、後出の制限事項に抵触することも想定されます。
一方で、タグの管理権限をチーム所有者に限定すると、チーム所有者に負担が集中します。
そのような場面で、この自動化を行うことで、チーム所有者の負担を軽減することができます。
https://learn.microsoft.com/ja-jp/microsoftteams/limits-specifications-teams#tags
事前準備
SharePoint 又は OneDrive の任意のフォルダーに Excel ファイルを格納します。
今回は、SharePoint のドキュメントに「タグ管理」フォルダーを作成して格納します。
なお、Excel ファイルの名前は、Teams のタグの名前になります。
Excelファイルは、「タグ管理」テーブルを設定し、「メールアドレス」列を作ります。
メールアドレスの対象者が、タグのメンバーになります。
タグの上限(200名)に合わせて、テーブルの範囲は、201行目までとします。
フローの作成手順
手順 |
内容 |
1 |
チームの情報を取得 |
2 |
タグ名とタグIDの辞書を作成 |
3 |
Excelファイルの数だけ、手順4~7を繰り返す |
4 |
Excelファイルを読み取る |
5 |
タグに設定する者を特定する |
6 |
既存のタグがある場合の処理 |
7 |
既存のタグがない場合の処理 |
1. チームの情報を取得
任意のトリガーを配置し、フローを開始します。スケジュール実行がおすすめです。
続けて、以下の手順により、タグの管理を行うチームの情報を取得します。
内容 |
画像 |
Teams コネクタの「チームの取得」で情報を取得します。 |
 |
office 365 グループコネクタの「HTTP 要求 V2 を送信する」でチームのメンバーを取得します。 |
 |
office 365 グループコネクタの「HTTP 要求 V2 を送信する」でチームの所有者を取得します。 |
 |
データ操作の「作成」を用い、union関数によって、メンバーと所有者の重複を削除したチーム全員の配列を作ります。 |
 |
https://learn.microsoft.com/ja-jp/graph/api/group-list-members?view=graph-rest-1.0&tabs=http
https://learn.microsoft.com/ja-jp/graph/api/group-list-owners?view=graph-rest-1.0&tabs=http
https://learn.microsoft.com/ja-jp/azure/logic-apps/workflow-definition-language-functions-reference#union
2. タグ名とタグIDの辞書を作成
後続の処理をスムーズに行うため、既存のタグ名とタグIDの辞書を作成します。
Teams コネクタの「チームのタグをすべて一覧表示する」で既存のタグの情報を取得します。
次に、データ操作の「選択」により、取得した情報から、タグ名とタグIDを取り出します。
項目 |
パラメーター(参考) |
From |
range(0,length(outputs('チームのタグをすべて一覧表示する')?['body/value'])) |
Map左 |
outputs('チームのタグをすべて一覧表示する')?['body/value']?[item()]?['displayName'] |
Map右 |
outputs('チームのタグをすべて一覧表示する')?['body/value']?[item()]?['id'] |
続けて、データ操作の「作成」を配置し、join関数とreplace関数により、タグ名とタグIDの組合せをカンマ区切りの文字列に変えます。
項目 |
パラメーター(参考) |
入力 |
replace(replace(join(body('選択:タグ名とID'),','),'{',''),'}','') |
最後に、データ操作の「作成」を配置し、json関数とconcat関数により、タグ名とタグIDの辞書を作ります。
項目 |
パラメーター(参考) |
入力 |
json(concat('{',outputs('作成:タグ結合'),'}')) |
3. Excelファイルの数だけ、手順4~7を繰り返す
事前準備でセットした Excel ファイル1件につき、1つのタグの管理を行います。
まずは、SharePoint コネクタの「フォルダーの一覧」により、「タグ管理」フォルダーに格納されているファイルの情報を取得します。
続けて、Excelファイルの数だけ、後続の手順を繰り返すため、コントロールの「それぞれに適用する」を配置します。手順4以降のアクションは、このフレームの中に配置します。
4. Excelファイルを読み取る
事前準備のとおり、Excel ファイルの名前を Teams のタグの名前にします。
データ操作の「作成」を使用し、タグの名前を作ります。
項目 |
パラメーター(参考) |
入力 |
replace(item()?['Name'],'.xlsx','') |
次に、Excelファイルの「タグ管理」テーブルのデータを読み取ります。
Excel Online (Bussiness) コネクタの「表内に存在する行の一覧表示」を配置します。
フィルタークエリを使い、メールアドレスが空欄ではない行を取得します。
項目 |
パラメーター(参考) |
Path |
items('全てのExcelファイルに適用')?['Path'] |
フィルター クエリ |
メールアドレス ne '' |
https://learn.microsoft.com/ja-jp/graph/filter-query-parameter?tabs=http
5. タグに設定する者を特定する
手順1で作成したチーム全員の配列と Excel のデータを照らし合わせて、タグに設定する対象者を特定します。まずは、データ操作「選択」を配置し、読み取った Excel のデータから、メールアドレスのみを取り出して配列を作ります。
項目 |
パラメーター(参考) |
From |
range(0,length(outputs('表内に存在する行を一覧表示')?['body/value'])) |
Map |
outputs('表内に存在する行を一覧表示')?['body/value'][item()]?['メールアドレス'] |
次に、データ操作「アレイのフィルター」を使用し、チーム全員の配列から、直前で作成したメールアドレスの配列にヒットする者を抽出します。
項目 |
パラメーター(参考) |
From |
outputs('作成:チーム全員') |
Filter Query 左 |
body('選択:メールアドレス') |
Filter Query 中 |
contains |
Filter Query 右 |
item()?['mail'] |
最後に、フィルターの結果から、タグに設定する対象者のユーザーIDを取り出します。
データ操作「選択」を配置し、ユーザーIDの配列を作成します。
項目 |
パラメーター(参考) |
From |
range(0,length(body('アレイのフィルター処理:タグ設定対象者'))) |
Map |
body('アレイのフィルター処理:タグ設定対象者')?[item()]?['id'] |
6. 既存のタグがある場合の処理
(1)タグの有無を確認
既存のタグがある場合、タグメンバーの修正を行います。
手順2で作成したタグの辞書に、手順4で取得したタグ名が含まれているか、確認します。
項目 |
パラメーター(参考) |
条件:左 |
contains(outputs('作成:タグ辞書'),outputs('作成:タグ名')) |
条件:中 |
is equal to |
条件:右 |
true |
(2)タグメンバー情報を取得
Teams コネクタの「タグのメンバーを一覧表示する」により、タグメンバー情報を取得します。
注意点として、タグの項目は、タグのIDを設定する必要があるため、辞書から取り出して設定します。
項目 |
パラメーター(参考) |
タグ |
outputs('作成:タグ辞書')?[outputs('作成:タグ名')] |
タグメンバー情報には、タグ固有のタグメンバーIDと、ユーザーIDが含まれます。
手順5で取得したタグの設定対象者との差分の確認には、ユーザーIDの情報が必要です。
データ操作「選択」を配置し、タグメンバー情報から、ユーザーIDの配列を作成します。
項目 |
パラメーター(参考) |
From |
range(0,length(outputs('タグのメンバーを一覧表示する')?['body/value'])) |
Map |
outputs('タグのメンバーを一覧表示する')?['body/value']?[item()]?['userId'] |
(3)タグメンバーの追加
手順5のタグの設定対象者が、タグメンバーにいない場合、タグへの追加対象とします。
データ操作「アレイのフィルター」を使用し、追加対象を抽出します。
項目 |
パラメーター(参考) |
From |
body('アレイのフィルター処理:タグ設定対象者') |
Filter Query 左 |
contains(body('選択:タグメンバーUserId配列'),item()?['id']) |
Filter Query 中 |
is equal to |
Filter Query 右 |
false |
前工程で抽出した追加対象をタグに追加します。
Teamsコネクタの「タグにメンバーを追加する」を配置し、全員分、繰り返し追加します。
(4)タグメンバーの削除
手順5のタグの設定対象者に含まれていないタグメンバーは、タグからの削除対象とします。
データ操作「アレイのフィルター」を使用し、削除対象を抽出します。
項目 |
パラメーター(参考) |
From |
outputs('タグのメンバーを一覧表示する')?['body/value'] |
Filter Query 左 |
contains(body('選択:タグ設定対象者ID配列'),item()?['userId']) |
Filter Query 中 |
is equal to |
Filter Query 右 |
false |
前工程で抽出した削除対象をタグから削除します。
Teamsコネクタの「タグからメンバーを削除する」を配置し、全員分、繰り返し追加します。
注意点として、このアクションでは、ユーザーIDではなく、タグメンバーIDを指定します。
7. 既存のタグがない場合の処理
既存のタグがないときは、新しいタグを作ります。
まずは、既存のタグがないこと、タグの設定対象者が1名以上いることを確認します。
項目 |
パラメーター(参考) |
条件1:左 |
contains(outputs('作成:タグ辞書'),outputs('作成:タグ名')) |
条件1:中 |
is equal to |
条件1:右 |
false |
条件2:左 |
length(body('選択:タグ設定対象者ID配列')) |
条件2:中 |
is greater or equal to |
条件2:右 |
1 |
最後に、タグを作成します。
Teams コネクタの「チームのタグを作成する」を配置します。
メンバーのIDは、セミコロンで結合し、まとめてセットすることができます。
項目 |
パラメーター(参考) |
メンバーのID |
join(body('選択:タグ設定対象者ID配列'),';') |
以上でフローの作成は完了です。
参考
このフローでは、タグメンバーの追加、削除の繰り返し処理により、Power Platform 要求 (PPR)を大きく消費するため、フローを実行するライセンスのPPR上限に注意する必要があります。
https://learn.microsoft.com/ja-jp/power-platform/admin/api-request-limits-allocations
何が Power Platform 要求と見なされますか?
だれの Power Platform 要求制限がクラウド フローで使用されますか?
https://learn.microsoft.com/ja-jp/power-platform/admin/power-automate-licensing/faqs#what-counts-as-power-platform-request
Discussion