Dynamics CRM 2011 REST エンドポイント

みなさん、こんにちは。

今日も、Dynamics CRM 2011 開発関連の情報をお送りします。Dynamics CRM は
4.0 の頃から Web サービスを提供してきましたが、 Dynamics CRM 2011 では、
新たに REST エンドポイントを追加でサポートしました。今回はこのエンドポイントに
スポットを当てたいと思います。

REST エンドポイントとは

REST エンドポイントは、URI を利用してデータの操作が行える機能を提供します。
例えば、取引先企業のデータを取得する場合を考えます。

Dynamics CRM 4.0 では、複雑な SOAP リクエストを作成して、Web サービスに
問い合わせをして、結果を SOAP で受け取っていました。一方 REST を利用すると
以下のような URI をブラウザに入力するだけで、データが取得可能です。

https://[CRM組織のURL]/XRMServices/2011/OrganizationData.svc/AccountSet

つまり、複雑な SOAP を作成する必要も、その中に認証情報を入れる必要もなく、
アドレスを入力するだけで情報が取得できるのが REST エンドポイントです。
このエンドポイントは、Silverlight と JScript から利用します。

上記はデータを取得する例ですが、それ以外にもデータの作成や更新、削除が
行え、HTTP 動詞の GET、POST、MERGE、DELETE が利用されます。

尚、結果は XML データとして返りますが、Internet Explorer の設定で RSS
フィードを整形するようになっている場合には、 XML が表示されません。
インターネットオプション | コンテンツ | フィードと Web スライスの設定より
フィードの読み取りビューを有効にするのチェックを外してください。

サポートされるクエリオプション

データの取得が URI で容易に行えることは説明しましたが、上記の例では
取引先企業のすべての列の情報が返ります。実際の XML には以下のように
全ての列や情報が含まれ、情報も膨大になります。

image
(中略)
image
(中略)
image

しかしクエリオプションを指定することで、取得できるデータの結果セットを操作できます。

$select クエリオプション
パフォーマンスを考慮して、特定の列のみ取得したい場合には、$select を
使用します。例えば取引先企業の Name と ID のみ取得したい場合には、
以下のURI を実行します。

...省略.../AccountSet?$select=Name,AccountId

返される XML データは以下のようになります。ご覧の通り属性が AccountId と
Name だけに絞られています。
image

$filter クエリオプション
T-SQL の Where 句にあたるオプションとして、$filter があります。例えば
先ほどの結果から、さらにステータスが有効なレコードだけを取得したい場合
以下のURI を実行します。

...省略.../AccountSet?$select=Name,AccountId&$filter=StatusCode/Value eq 1

また $filter では関連レコードの値でも絞込みが可能です。取引先企業の
所有者の GUID で絞り込む場合には、以下の URI を実行します。

...省略.../AccountSet?$filter=OwnerId/Id eq (guid'ユーザーのGUID' )

その他のクエリオプション
他にも $expand, $orderby, $top, $skip をサポートしています。詳細は
SDK 「OData System Query Options Using the REST Endpoint」 を
参照してください。

メタデータの参照

REST エンドポイントは、エンティティーのデータだけでなく、メタデータの参照も
サポートしています。以下の URI を利用してください。

...省略.../XRMServices/2011/OrganizationData.svc/$metadata

REST エンドポイント機能と制限

以下に REST エンドポイントの機能と制限を紹介します。

- レコードの作成、読み取り、更新、削除をサポート (CRUD 操作)
- Execute メソッドは提供しない
- REST エンドポイントは Web リソース内の JScript および Silverlight のみサポート
- すべての OData クエリオプションをサポートするわけではない
- Silverlight の開発において、遅延バインディングは使用できない

今回は REST エンドポイントの紹介を行いましたが、実際にどう使えるのかが
興味のあるところだと思います。次回より JScript から REST を使用する場合と
Silverlight から REST を使用する場合のサンプルを紹介していきます。

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