Morning Girl

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

【Dynamics CRM】【Web API】Queryのきほん

新しいWeb APIでのQueryの基本を抑えておきたいと思います。

といっても以前までREST APIを使われていた方なら、以下のMSDNを見ればほとんどわかるかと思います。

Query Data using the Web API

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

やはりXrm.SDKを使うよりとっつきやすくて、とてもいいと思います。

レコードの取得方法

新しいWeb APIを用いたエンティティのレコード取得方法に関しては、とりあえず3種類のアプローチがあるかと思います。(Functionを除く)

本記事から解説する【Basic Query】によるリクエスト

CRM専用のクエリである【Fetch XML】を用いたリクエスト

CRMのビューの情報を用いた【ViewID】を用いたリクエスト

それぞれ一長一短がありますが、それはまた別途整理してお伝えしたいと思います。

Basic Queryについて

Basic Queryを用いたデータの取得に関しては、

・エンティティの【LogicalCollectionName】(LogicalNameでは無いので注意。)

・Filter条件などをしている【URL Params】

・データ取得時のオプションを付与するHTTPリクエスドヘッダの【Prefer】

でHTTPリクエストを構成して、取得できます。

【Request例】

取引先企業の名前と取引先責任者の情報を取得するためのHTTP GET リクエスト

GET https://***.api.crm7.dynamics.com/api/data/v8.0/accounts?$select=name,_primarycontactid_value HTTP/1.1

Prefer: odata.include-annotations="*"

LogicalCollectionName

エンティティの物理名称を指定するのですが、Dynamics CRMカスタマイズ時に指定するLogicalNameではなく内部でのみ利用しているLogicalCollectionNameになります。

例えば取引先企業ですと以下のような形で複数形になるので、注意が必要です。

LogicalName : account

LogicalCollectionName : accounts

いちいち調べるのが面倒ですが、一応以下のReferenceから確認することが可能です。

https://msdn.microsoft.com/en-us/library/mt608066.aspx

URL Params

取得時の各種条件を指定します。そのままです。

$select : 取得対象フィールドの指定

$top : 取得対象の上位何件の取得かを指定

$filter : 取得時の抽出条件の指定

$orderby : 並び替えの指定

$count : 対象エンティティのレコード件数の取得

$expand : 関連付けに対するJoin等の指定

$filterに関しては、【eq】や【ne】といった通常のoperatorsを利用しますが、CRMから提供されている特殊なFilter条件も下記Query Functionを用いて指定できます。

Web API Query Function Reference

https://msdn.microsoft.com/en-us/library/mt607843.aspx

Prefer

取得時のオプションを指定します。Lookupの表示名や、ページングの処理のための記述をします。

この辺りの詳しい説明は、次回以降していきたいと思います。

odata.include-annotations="OData.Community.Display.V1.FormattedValue"

odata.maxpagesize=3

Queryの注意

1リクエストにおけるレコード取得制限は5000件までみたいです。

とりあえず今回はここまで。