のいのログ

【Power Apps】Office365ユーザーで従業員ID(employeeId)を取得する

Power Platformにおいて、社員情報の取得の定番といえば「Office 365 ユーザー」コネクタですよね。Entra IDの情報を簡単に取得できるので非常に便利です。

ただ、不便な点もないわけではないんです。

実はPower Appsからだと従業員ID(employeeId)がMyProfileV2()UserProfileV2()では取得できないんですよね。社員番号・従業員番号は使用機会が多い情報なので結構不便です。

今回は従業員ID(employeeId)をPower Apps単体で取得する方法を解説します。

目次(クリックでジャンプできます)

【結論】Office365ユーザー.HttpRequest()を使う

結論としては、Office365ユーザー.HttpRequest()でMicrosoft Graph APIのuserにGETリクエストを飛ばすのが最も簡単でパフォーマンスが良い方法です。

関数の全体像は以下のとおりです。

PowerFx
Text(
    Office365ユーザー.HttpRequest(
        "https://graph.microsoft.com/v1.0/users/natsugure@exmaple.com?$select=employeeid",
        "GET",
        ""
    ).employeeId
)

Office365ユーザー.HttpRequest()で必要な引数は以下のとおりです。
※関数バーに表示されるヒントに基づいて表記しています。

  • Uri
    • アクセスするURIをテキスト型で渡す。
  • Method
    • HTTPメソッドをテキスト型で渡す。
  • file
    • 要求の本文を指定。Microsoft Learnでは必須扱いになっていませんが、省略するとエラーになります。今回のように何も本文を渡す必要がない場合は、空文字列""を指定します。

URIにはGraph APIの/users/{id | userPrincipalName}$selectクエリパラメータを付けたものを指定します。

$select=employeeIdを付けないと、通常のUserProfileV2()で返ってくるものと同じ列しか取得できないので注意しましょう。

URI
https://graph.microsoft.com/v1.0/users/natsugure@exmaple.com?$select=employeeid

Text関数で型変換する

Office365ユーザー.HttpRequest()の戻り値は、型指定されていないオブジェクト(Dynamic、旧名・UntypedObject)です。

以下の例は従業員IDが10002のユーザーの結果を取得した場合の戻り値です。

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

Microsoft Learnの「型指定されていないオブジェクトのデータ型」の説明では、明示的な型変換が必要と書かれています。

型指定されていないオブジェクト は、複雑なものでも単純なものでも、あらゆるデータ構造を保持できる Power Fx のデータ型です。 直接使用することはできず、データ型への明示的な変換が必要です。 型指定されていないオブジェクト のレコードのフィールドは、ドット表記を使用してアクセスでき、フィールドの存在は実行時にのみ検証されます。

型指定されていないオブジェクトのデータ型 – Power Platform | Microsoft Learn

そのため、Text関数でPower Apps内で使用できるテキスト型に変換してあげます。

PowerFx
Text(
    Office365ユーザー.HttpRequest(
        "https://graph.microsoft.com/v1.0/users/natsugure@exmaple.com?$select=employeeid",
        "GET",
        ""
    ).employeeId
)

従業員IDが数字のみで構成されていて、数値の大小等の比較を行いたい場合はIntValue関数で数値型に変換してやれば良いです。

【余談】UserProfileV2でも裏側では取得できてる

UserProfileV2()$selectパラメータにemployeeIdを指定した時、我々開発者は利用できませんが、実はPower AppsとGraph APIとの間で行われる通信ではきちんと取得できていたりします。

PowerFx
Set(UserProfile, Office365ユーザー.UserProfileV2(id, { '$select': "employeeId" }))

Power Appsのライブ監視を開いた状態で、上記の関数を実行します。

すると、応答にはきちんとemployeeIdが取れていることが確認できます。

しかし、変数には格納されていません。そもそもemployeeId列が存在しません。

なぜ取得できるいるにもかかわらず、関数の戻り値であるレコードには反映されないのでしょうか。

これはUserProfileV2の戻り値がGraphUser_V1というレコードだと決まっているからです。

GraphUser_V1には$selectパラメータを未指定で取得したときの既定フィールドで構成されており、employeeIdは含まれていません。

あらかじめレコードの列がわかっているから、私たちはPower Apps上のInteliiSense(コード補完)で簡単にプロパティにアクセスできるというメリットがありつつ、取れる力はあるのに利用できない列が生まれてしまうという、ちょっと不便な面もありますね。

おわりに

個人的にPower Appsの開発だと、ついついHTTPリクエストを使うという選択肢が頭から抜けてしまいます。

今回のようにGraph APIを活用できる場面では、Office 365 ユーザー以外のコネクタも含めて、じゃんじゃん活用していきたいですね。

シェアしていただけると嬉しいです!
  • URLをコピーしました!

この記事を書いた人

ローコード・RPAエンジニア。DX・業務効率化を専門に開発。

前職では鉄道運転士として働きながら、社内複業でSwift・Power Platformで業務効率化を推進していた。

応援する

コメント

コメントする

CAPTCHA


目次(クリックでジャンプできます)