Morning Girl

Web API, Windows, C#, .NET, Dynamics 365/CRM etc..

【Dynamics CRM】【Web API】Lookupフィールド先のデータ取得

前回の記事で【Prefer : odata.include-annotations="*"】を利用した、Lookup表示名の取得を紹介しましたが、

じゃあ、Lookup先のデータをJoinする場合はどうすんの、というところですけど。

expandパラメータを指定して取得します。

https://msdn.microsoft.com/en-us/library/gg334767.aspx#bkmk_lookupProperty

ただ、注意として、このexpandパラメータを使用する場合、対象レコードを1つに絞る必要があります。

【accounts({レコードGUID})】みたいな形で。

面倒ですね。素直にJoinさせろよというところですが。

【Request】

https://***.api.crm7.dynamics.com/api/data/v8.0/accounts(2bb50cdf-71a5-e511-80de-c4346bc4ef3c)?$select=name&$expand=primarycontactid($select=fullname,firstname,lastname)

【Result】

{
    "@odata.context": "https://***.api.crm7.dynamics.com/api/data/v8.0/$metadata#accounts(name,primarycontactid,primarycontactid(fullname,firstname,lastname))/$entity",
    "@odata.etag": "W/\"712019\"",
    "name": "フォース コーヒー (サンプル)",
    "accountid": "2bb50cdf-71a5-e511-80de-c4346bc4ef3c",
    "primarycontactid": {
        "@odata.etag": "W/\"556653\"",
        "fullname": "早川 諭 (サンプル)",
        "firstname": "諭 (サンプル)",
        "lastname": "早川",
        "contactid": "91b50cdf-71a5-e511-80de-c4346bc4ef3c"
    }
}

ですので、expandアプローチは紹介しておいて、個人的にはそこまでおすすめしません。

別途Viewを利用した方法とFetchXMLを利用した方法がありますので、そちらのほうが通常のSQL Joinらしくてスマートです。