PowerAutomateでAzureADの従業員IDを取得する


はじめに

当社ではMicrosoft365を導入しているので、MS365で使用できるAzureAD(以下、AAD)に社員の情報を集約しています。当社には社員を一意に識別する社員番号があるのですが、それをAADのどこに入れるか悩んでいました。AADには「employeeId」というフィールドがあるんですが、Azure Active Directory管理センターでは「employeeId」を入力するところがなかったので、「employeeId」を使うことを諦めていました。
PowerShellを使えば「employeeId」に値をセットできますが、当社ではMS365アカウントを作成するのは非IT部門のためPowerShellを使うのは敷居が高いです。

2020年8月前半に久しぶりにAzure Active Directory管理センターを見たら「従業員ID」なる項目が増えていました。元々あったのか見落としていたのか分かりませんが、管理センターのUIであれば非IT部門でも編集できるので、「従業員ID」を使うことにしました。「employeeId」の和名が「従業員ID」のようです。

いつからあったんだ。。?

やりたいこと

PowerAutomateでメールアドレスから従業員IDを取得する。

(参考)PowerShellで従業員IDを更新

こんな感じです。従業員IDは拡張項目なんですね。

Set-AzureADUserExtension -ObjectId "メールアドレス"  -ExtensionName "employeeId" -ExtensionValue "従業員ID"

PowerAutomate

ユーザの情報を取得

AADなので、AzureADコネクタの「Get user(ユーザーの取得)」アクションと思いきや、これだと取得できません。
Office 365 Usersの「Get user profile (V2)(ユーザー プロフィールの取得 (V2))」アクションを使用します。

「フィールドの選択」は任意項目ですが、従業員IDは指定しないと返却されないので、「employeeId」を入力します。フィールド名を入力するとこのフィールドの値しか返却されなくなってしまうので、他のフィールドも返却して欲しい場合はカンマ区切りでフィールドを指定します。
試しに実行してみると従業員IDのみが返却されます。

従業員IDを取得

この後のアクションで従業員IDを使用できるか確認します。通常であれば「動的なコンテンツ」で指定できるはずですが、従業員IDというコンテンツは見当たりません。

こういう場合は仕方なくJSONから値を取得します。

JSONの解析

Get user profile (V2)アクションの戻り値はJSONですが、それを解析するには「JSONの解析」アクションを使用します。

コンテンツにはGet user profile (V2)アクションの戻り値である「Graph APIからのユーザ」を指定します。
スキーマは「サンプルから生成」で作成しました。Get user profile (V2)アクションの戻り値をそのまま使用すると良いでしょう。

{
  "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users(employeeId)/$entity",
  "employeeId": "従業員ID"
}

終わりに

従業員IDの存在を知るまではCommon Data Serviceに従業員ID相当の値を入れていたのですが、これで使わなくて済みます。CDSの場合、Excelで簡単に編集できるんですが、PowerAutomateだといつからかは知りませんがDynamics365コネクタが非推奨になってしまったので。