この記事は「RPA(ロボティック・プロセス・オートメーション) Advent Calendar 2023」 に参加しています。13日目の記事です。
(偉い人)<「Teamsの〇〇チームを見たが、君たち名前を呼び捨てで入力してるんだね。目上の人に対して失礼じゃないのかね?」
(課長)<「ははー 早急に対処いたします」
………
(課長)<「明日からうちのチームでメンションする時は "役職"も付けるように」
👨👩👩🦰<「承知しました(な、なんだってー)」
……なんて事があった時に役立つかもしれないPower Automate クラウドフローです。
- このフローで実現できること
- フロー実行イメージ
- フロー全体
- フロー解説#1 初期導入用フロー
- フロー解説#2 更新用フロー
- 残課題
- さいごに
- 参考にしたサイト
このフローで実現できること
- チームメンバーの表示名+役職のタグを一括作成します
- メンションするときにタグを選択すれば役職名付きメンションです
- メンバーがチームから脱退したり、ユーザーが削除されるとタグは自動的に削除されます
フロー実行イメージ
フローを実行すると、メンバーの表示名+役職のタグが作られます。
メンションする時にタグを選択すれば、1アクションで名前+役職が入力されます。
メンションされた人のアクティビティフィードにも役職つきのタグで通知されますので安心
フロー全体
既存メンバーの名前+役職タグを作成します。
フロー#1 初期導入用フロー
フロー#2 更新用フロー
フロー#1を実行した後で、新規でメンバー追加された際に自動的に名前+役職タグを作成するフローです。
フロー解説#1 初期導入用フロー
1.トリガー 手動でフローをトリガーします
このフローは初期導入時に既存メンバーのタグを作成するために使いますので、「手動でフローをトリガーします」トリガーで、手動で一度だけ実行します。
2.作成-TeamId
処理を実行するチームのgroupIdを指定しています。
groupIdは【チームへのリンクを取得】で取得できるURLのgroupId=以降から&までの文字列です。
3.スコープ-チームメンバーの情報を取得する
3-1.[Office 365 Groups]グループメンバーの一覧表示
- グループID
- @{outputs('作成-TeamId')}
チームのメンバー情報を取得します。Office 365 Group コネクタの「グループメンバーの一覧表示」アクションで取得することができます。
3-2.[データ操作]アレイのフィルター処理-役職ありメンバーのみ
- 差出人
- @outputs('グループ_メンバーの一覧表示')?['body/value']
- 条件
-
@{empty(item()?['jobTitle'])}
- 次の値に等しい
-
false
-
役職が設定されているメンバーのみにフィルターします。
3-3.[データ操作]選択-TeamMembernameList
- 開始
- @{body('アレイのフィルター処理-役職ありメンバーのみ')}
- マップ
- displayName
- @{item()?['displayName']}_@{item()?['jobTitle']}
チームのメンバーリストから、存在すべき名前+役職タグの名称の配列を作成します。
3-4.[データ操作]選択-TeamMemberNameAndIdList
- 開始
- @{body('アレイのフィルター処理-役職ありメンバーのみ')}
- マップ1
- displayName
- @{item()?['displayName']}_@{item()?['jobTitle']}
- マップ2
- id
- @{item()?['id']}
チームのメンバーリストから、存在すべき名前+役職タグの名称とユーザーidの配列を作成します。
4.スコープ-氏名+役職タグ情報を作成する
4-1.[Microsoft Teams]チームのタグをすべて一覧表示する
- チーム
- @{outputs('作成-TeamId')}
「チームのタグをすべて一覧表示する」アクションでチームの既存のタグを取得します。
4-2.[データ操作]アレイのフィルター表示-新規のみ抽出
- 差出人
- @body('選択-TeamMemberNameList')
- 条件
-
@{contains(outputs('チームのタグをすべて一覧表示する')?['body/value'], item())}
- 次の値に等しい
-
false
-
チームに存在するタグと比較し、未作成のタグのみにフィルターします。
4-3.Apply to each (役職タグを作成する)
- 以前の手順から出力を選択
- @{body('アレイのフィルター処理-新規のみ抽出')}
4-2でタグが存在しないユーザーの表示名のアレイが作られていますので、1つずつタグを作成しています。
4-3-1.[データ操作]作成-targetDisplayName
- 入力
- @{items('Apply_to_each')?['displayName']}
4-3-2.[データ操作]アレイのフィルター処理-Id取得
- 差出人
- @body('選択-TeamMemberNameAndIdList')
- 条件
- @{item()?['displayName']}
- 次の値に等しい
- @{outputs('作成-targetDisplayname')}
現在のアイテムの名前で名前+IDの配列をフィルターします。
4-3-3.[データ操作]作成-targetId
- 入力
-
@{first(body('アレイのフィルター処理-Id取得'))?['Id']}
-
4-3-2.で抽出したidです。
4-3-4.[Microsoft Teams]チームのタグを作成する
- チーム
- @{outputs('作成-TeamId')}
- 表示名
- @{outputs('作成-targetDisplayname')}
- ユーザーID
- @{outputs('作成-targetId')}
TeamIdとタグ名、取得したユーザーIdを指定してタグを作成します。
フロー解説#2 更新用フロー
新規でメンバー追加された際に名前+役職タグを作成するフローです。
1.トリガー[Microsoft Teams] 新しいチームメンバーが追加されたとき
- チーム
- 敬称タグを作成するチーム
このトリガーを指定することチームにメンバーが追加されたらフローが実行されます。
2.ユーザープロフィールの取得(V2)
- ユーザー(UPN)
- トリガーの出力のユーザーID
1.の出力にはユーザーIDしかありませんので、ユーザープロフィールの取得アクションでユーザーの表示名を取得します。
3.条件-役職ありユーザーだったら
- 条件
-
@{empty(outputs('ユーザー_プロフィールの取得_(V2)')?['body/jobTitle'])}
- 次の値に等しい
-
false
-
4.チームのタグを作成する
2で取得した名前+役職 でタグを作成します。
- チーム
- @{trigger()['inputs']['parameters']['groupId']}
- trigger関数を使って、「新しいチームメンバーが追加されたとき」トリガーで指定したチームを取得しています。
- 表示名
- ユーザの名前+'_'+役職
-
@{concat( outputs('ユーザー_プロフィールの取得_(V2)')?['body/displayName'], '_', outputs('ユーザー_プロフィールの取得_(V2)')?['body/jobTitle'] )}
- ユーザーID
- @{triggerOutputs()?['body/id']}
残課題
- 役職がない方への対応
- 今回は役職が設定されていない場合はタグを作成しませんでした。"さん”付のタグを作成するのも一つの考えです。
- 氏名・役職変更への追従
- 今回のフローではユーザーの名前や役職が変更された場合には対応していません。フロー#1を実行すれば新しいは作成されますが、旧表示名のタグが削除されませんので手動で削除する必要があります。改姓であれば旧姓でのメンションが引き続きできるというメリットにもなりますが、昇進したのに旧役職のタグが残っていては失礼に当たるかもしれません。
- 最大200人までのメンバー数のチームで利用可能
- タグの仕様としてチームごとの作成できるタグの上限が200までとなっているためです。この為用途でタグが使用されている場合はその数だけ役職つきタグは使用できなくなります。
- または、役職でフィルターして一定以上の役職の方だけタグを作るというのも一つの考えかもしれません。
- プライベートチャネル・共有チャネルでは使用できない
- Teamsの仕様でタグが使用できない為解決は難しいです。
さいごに
今回のフローは以前作成したこちらのフローの派生バージョンです。少しの変更で役職にも対応可能だったので作ってみました。あくまでネタフローです。誰の所にもこのフローが役立つ日が来ないことを祈ります。
参考にしたサイト
trigger関数の存在を知ることができました。ありがとうございます✨✨✨