【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件までみたいです。
とりあえず今回はここまで。