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 サポート 中村 憲一郎