Partager via


Dynamics CRM 2011 SDK 5.0.12 簡易検索レコードのパフォーマンス向上

みなさん、こんにちは。

先日 Update Rollup 10 で提供する簡易検索レコードのパフォーマンス向上
について紹介しましたが、今回は SDK からその機能を利用する方法を
紹介します。

サンプル

QueryExpression を利用して、以下のようなクエリを記述しているとします。 

QueryExpression query = new QueryExpression("contact");
query.ColumnSet.AddColumns("firstname", "lastname", "address1_city");

query.Criteria = new FilterExpression();
query.Criteria.FilterOperator = LogicalOperator.Or;
                  
query.Criteria.AddCondition("lastname", ConditionOperator.Like, "A%");
query.Criteria.AddCondition("firstname", ConditionOperator.Like, "A%");
query.Criteria.AddCondition("address1_city", ConditionOperator.Like, "A%");

このクエリで Update Rollup 10 の新機能を利用するには、一番最後に
以下の行を追加します。

query.Criteria.IsQuickFindFilter = true;

こうすることで実行されるクエリが変わります。

注意点

・FilterOperator で Or を指定している場合のみ利用可能です。And を指定
した FilterExpression を利用すると以下のエラーが出ます。

Message: A filter cannot be a quick find filter unless it has a LogicalOperator of “Or”

・複数の FilterExpression がある場合、1 つの FilterExpression にのみ
IsQuickFindFilter を指定することが可能です。複数の FilterExpression に
IsQuickFindFilter を指定すると、以下のエラーが出ます。

Message: Only one quick find filter is allowed per query

・IsQuickFindFilter が true に指定された FilterExpression には子フィルター
を指定することは出来ません。指定した場合、以下のエラーが出ます。

Message: A quick find filter cannot have any child filters

・IsQuickFindFilter が指定されている FilterExpression の条件は、null では
ないひとつの値を条件としてとる列のみを持つ必要があります。

既知の問題

現在アドレスが検索対象のはじめに来る場合、Generic SQL Error となる
問題が報告されており、修正モジュールを準備中です。この問題は時期
Update Rollup で修正される予定のため、現状は検索条件の並び順で
アドレスが最初に来ないようにするか、設定 | 管理 | システムの設定の
簡易レコード検索上限の設定を無効にしてください。

まとめ

SDK 内で QueryExpression を利用している場合、かつ特定のクエリの
パrフォーマンスに問題がある場合は、一度上記のサンプルを参考に
IsQuickFindFilter を試してください。

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