Dynamics CRM 2011 SDK 5.0.13 新機能 ExecuteMultiple 紹介

みなさん、こんにちは。

今回は開発者の方向けの情報として、SDK 5.0.13 で提供される
ExecuteMultiple メッセージを紹介します。

ExecuteMultiple メッセージ

ExecuteMultipleRequest は引数にリクエストの配列をとります。例えば
既存のプログラムでレコードを 1000 件作成する際、 CreateRequest を
1000 回 Web サービスに対して実行していましたが、それらのリクエスト
を引数に渡して、一度の ExecuteMultipleRequest 実行で処理できます。

これにより Web サービスに対する通信の回数が大幅に削減されること
から、Web サービス内で各リクエストが処理される時間が変わらずとも
トータルの処理時間が削減可能となります。

複数のメッセージを処理することから、以下の制限があります。

既定では一度に引数に含められるメッセージ数上限は 1000 件です。
ExecuteMultipleRequest の同時実行数上限は 2 件です。

処理オプション

複数のリクエストを含んでいることから、以下の処理オプションを選択
可能です。

- あるリクエストの処理が失敗した場合に、次の処理を続けるか
- 結果を返すか

 

サンプル紹介

SampleCode\CS\DataManagement\ExecuteMultiple\ExecuteMultiple.cs

上記フォルダにサンプルがあります。内容は非常にシンプルで、 数件のレコードを作成するもので、各種オプションをそれぞれ変えて 結果を確認するものです。一度実行してみてください。

パフォーマンス検証

今回はサンプルを改造して、以下の検証を行いました。環境は Microsoft Dynamics CRM Online です。

1. ExecuteMultipleRequest に 100 件の CreateRequest を設定します。 それにより取引先企業を100 件作成します。

2. 作成したレコードを削除する DeleteRequest を 100 件作成し、再度 ExecuteMultipleRequest で処理します。

3. Create メソッドを 100 回実行し、レコードを 100 件作成します。

4. Delete メソッドを 100 回実行し、作成したレコードを 100 件削除します。

以下に結果を示します。

[1 回目]

image

[2 回目]

image

[3 回目]

image

1000 件で実行した場合

image

まとめ

オンライン環境はサーバーまでのネットワークによりパフォーマンスが
出にくい場合がありますが、ExecuteMultiple を活用することで、より
影響を抑えることが可能です。私の手元では概ね、6 ~ 7 倍の差が
ありました。是非お試しください。

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