【Dynamics CRM】【Web API】Lookupフィールドの表示名取得
Dynamics CRM Web APIのQueryに関する記事です。
これから細々と投稿していきます。
意外とめんどくさい、Lookupフィールドの取得。
例えば単純に以下Lookupフィールド【primarycontactid(取引先責任者)】をSelectするリクエストを投げると、エラーが返ってきます。
【Request】
https://***.api.crm7.dynamics.com/api/data/v8.0/accounts?$select=name,primarycontactid
【Result】
{
"error": {
"code": "",
"message": "The navigation properties are not supported with $select clause",
"innererror": {
"message": "The navigation properties are not supported with $select clause",
"type": "Microsoft.Crm.CrmHttpException",
"stacktrace": " at Microsoft.Crm.Extensibility.OData.CrmODataUtilities.ThrowIfSelectClauseHasNavigationProperty(SelectExpandClause selectExpandClause, Boolean isCalledFromEntitySet)\r\n at Microsoft.Crm.Extensibility.OData.CrmODataServiceDataProvider.RetrieveEdmEntityCollection(CrmODataExecutionContext context, String entityCollectionName, ODataQueryOptions queryOptions)\r\n at Microsoft.Crm.Extensibility.OData.EntityController.GetEntitySetInternal(String entitySetName, String
****中略****
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()"
}
}
}
正しいリクエストの投げ方は、Lookupフィールドの書き方を【primarycontactid】から【primarycontactid_value】というように【{FieldName}_value】に変更します。
でも、これだけですと、GUIDしか返ってきません。 【Request】 https://***.api.crm7.dynamics.com/api/data/v8.0/accounts?$select=name,_primarycontactid_value
【Result】
{
"@odata.context": "https://***.api.crm7.dynamics.com/api/data/v8.0/$metadata#accounts(name,_primarycontactid_value)",
"value": [
{
"@odata.etag": "W/\"712018\"",
"name": "フォース コーヒー (サンプル)",
"_primarycontactid_value": "91b50cdf-71a5-e511-80de-c4346bc4ef3c",
"accountid": "2bb50cdf-71a5-e511-80de-c4346bc4ef3c"
},
{
その問題を解決するために、
HTTPリクエストのHeaderに注釈【Prefer : odata.include-annotations="*"】を追加して、リクエストを投げます。
すると追加情報として、OData.Community.Display.V1.FormattedValueという形で表示名が取得できます。
annotationsはワイルドカードを今回指定してますが、FormattedValueだけ取得したい場合は、【Prefer : odata.include-annotations="OData.Community.Display.V1.FormattedValue"】でもかまいません。
【Request】
https://***.api.crm7.dynamics.com/api/data/v8.0/accounts?$select=name,_primarycontactid_value
Prefer : odata.include-annotations="*"
【Result】
{
"@odata.context": "https://***.api.crm7.dynamics.com/api/data/v8.0/$metadata#accounts(name,_primarycontactid_value)",
"value": [
{
"@odata.etag": "W/\"712018\"",
"name": "フォース コーヒー (サンプル)",
"_primarycontactid_value@Microsoft.Dynamics.CRM.associatednavigationproperty": "primarycontactid",
"_primarycontactid_value@Microsoft.Dynamics.CRM.lookuplogicalname": "contact",
"_primarycontactid_value@OData.Community.Display.V1.FormattedValue": "早川 諭 (サンプル)",
"_primarycontactid_value": "91b50cdf-71a5-e511-80de-c4346bc4ef3c",
"accountid": "2bb50cdf-71a5-e511-80de-c4346bc4ef3c"
},