みなさん、こんにちは。
今回は開発者の方向けの情報として、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 回目]
[2 回目]
[3 回目]
1000 件で実行した場合
まとめ
オンライン環境はサーバーまでのネットワークによりパフォーマンスが
出にくい場合がありますが、ExecuteMultiple を活用することで、より
影響を抑えることが可能です。私の手元では概ね、6 ~ 7 倍の差が
ありました。是非お試しください。
- Dynamics CRM サポート 中村 憲一郎