Dynamics CRM 2011 SDK API ごとのクエリー制限

みなさん、こんにちは。

今回は開発者向けの情報として、 Microsoft Dynamics CRM 2011 SDK
のデータ取得に利用できる API ごとのクエリーの制限について紹介します。

情報元 : Dynamics CRM 2011 SDK Query Limitations by API

===============================================================

Microsoft Dynamics CRM 2011 SDK は状況によって使い分けれるよう、データ
取得の方法を数種類提供しています。しかしこれらの API は完全に同一の
機能を提供するわけではないため、開発時にはどの手法をどこで利用するか
検討が必要です。今回はそれらの制限を明確に示すとともに、どのように各種
API を使い分けるべきかの指針を紹介します。

すこし話はそれますが、パフォーマンスを考慮した結果、フィルター化された
ビューからデータを取得しているという話をたまに耳にします。取得するデータ
を事前に効率よくフィルターすることで、パフォーマンスを向上させているので
あれば、各種 API がサポートしないクエリがあるため良いのですが、そうでない
場合、フィルター化されたビューの性質上、パフォーマンスチューニングの余地
はあまりありません。API を利用することで Update Rollup 10 で追加された機能
を利用することができます。

※追加された機能についてはこちらの記事を参照してください。

では早速各 API の制限を示します。

SQL Query Limitations by API

FetchXML

QueryExpression

LINQ*

OData**

LEFT OUTER JOIN

X

X

GROUP BY

X

X

X

Aggregate Functions (COUNT,  SUM, AVG, MAX, MIN)

X

X

X

Statistical Aggregates (STDEV, VAR, etc.)

X

X

X

X

FULL OUTER JOINs

X

X

X

X

RIGHT OUTER JOINs

X

X

X

X

Composite JOINs

X

X

X

X

Strictly Non-equi JOINs

X

X

X

X

NOT EXISTS/IN [sub-query]

X

X

X

X

Combining Multiple Result Sets (UNION, INTERSECT, EXCEPT)

X

X

X

X

*LINQ は条件式左側で CRM エンティティの列を指定する必要があります。
**OData で関連エンティティを取得する場合は、6 段階まで取得が可能です。
また既定では50 件のレコードだけが返ります。ページングに関しては、
こちらの記事を参照してください。

FetchXML、QueryExpression、LINQ

上記の表より、FetchXML が最も高機能であることが分かります。しかし、
多くの Microsoft Dynamics CRM 4.0 開発者は以前の経験から FetchXML
より QueryExpression を利用する傾向にあります。Microsoft Dynamics
CRM 2011 の SDK では FetchXML を RetrieveMultiple メソッドに渡した場合
EntityCollection を返すため、QueryExpression と同じように開発できます。

グルーピングや集計を利用する場合は、FetchXML を利用してください。

LINQ クエリは Microsoft Dynamics CRM 2011 SDK で新しくサポートされ、
一部機能が制限されるものの、既存の .NET 開発者が容易に利用できる
言語です。

以上のことより、完全な機能が必要な場合は FetchXML を利用し、学習
時間を短縮するには LINQ を利用することが可能です。

RESTful Endpoint

完全に性質が異なるものとして、クライアントサイドで利用可能な技術に
RESTful Endpoint があります。これは OData を利用したクエリで、URI を
利用したクエリが可能です。データは JSON 形式を利用でき、ネットワーク
負荷を下げることができます。

フィルター化されたビュー

各 API の制限が問題になる場合、設置型であればフィルター化された
ビューを直接クエリすることが可能です。レポート開発における、FetchXML
とフィルター化されたビューの比較は、こちらの記事を参考にしてください。

===============================================================

- Dynamics CRM サポート 中村 憲一郎