次の方法で共有


クイック検索クエリについて

モデル駆動型アプリは、 クイック検索 または グリッド検索を使用してレコードをすばやく検索するエクスペリエンスを提供します。 これらのエクスペリエンスでは、ユーザーは 1 つのテーブル内の複数の列に適用できる 1 つのテキスト入力を持ちます。

モデル駆動型アプリには、Dataverse 検索が有効な場合に Dataverse 検索 API を 使用する検索ボックスも用意されています。 Dataverse 検索を使用すると、より関連性の高い検索機能を得るための複数のテーブルからの結果を結果に含めることができます。 Dataverse 検索が有効になっていない場合、モデル駆動型アプリでは、最大 10 個のクイック検索クエリの結果を組み合わせた複数テーブルのクイック検索 (カテゴリ化された検索) エクスペリエンスが提供されます。 モデル駆動型アプリで使用できる検索オプションの詳細について説明します。

クイック検索クエリでは、すべての状況で使用できるエクスペリエンスが提供されない場合があります。 制限事項を参照してください

次のシナリオでは、クイック検索クエリの代わりに Dataverse 検索 API を使用することを検討してください。

クイック検索クエリとは

クイック検索クエリでは、次のパターンを使用します。

  1. "OR" フィルター演算子を使用する 1 つのフィルターが含まれます。

    さらにフィルターを追加できますが、クイック検索フィルターの結果が処理された後にのみ評価されます。

  2. "OR" フィルターは、クイック検索フィルターとしてマークされます。

  3. フィルターには複数の条件があります。 評価される条件が 1 つだけの場合、通常のクエリとして処理されるクエリのパフォーマンスが向上します。

  4. フィルター内のすべての条件では、"Like" 演算子が使用されます。

    'like' 演算子には、 %で終わる検索文字列が必要です。

    'Like' 演算子は、クイック検索クエリでサポートされている唯一の演算子です。 クイック検索クエリがサポートするように設計されているアプリケーション シナリオに必要な唯一の演算子です。 他の演算子はテストされていません。

例示

クイック検索クエリを記述する方法は、 QueryExpressionFetchXml のどちらを使用しているかによって異なります。

次のタブの各例は、同じことを行います。

  1. 1 つの検索文字列パラメーターを受け入れます。 この値には、部分的な名前、電話番号、電子メール アドレス、またはアカウント番号を指定できます。

  2. 次のアカウント テーブル列に対して検索文字列をテストするクイック検索クエリを作成します。

    • telephone2
    • telephone1
    • emailaddress1
    • accountnumber
    • name
  3. アクティブでないアカウントを除外します。

  4. アカウント名で結果を並べ替えます。

Dataverse SDK for .NET で QueryExpression を使用できます。

/// <summary>
/// Returns active accounts using quick find filter
/// </summary>
/// <param name="service">The authenticated IOrganizationService instance to use.</param>
/// <param name="searchString">The string to search for</param>
/// <returns>Collection of matching account records</returns>
static EntityCollection QuickFindActiveAccountsQueryExpression(
    IOrganizationService service, 
    string searchString)
{
    // Wildcard required for ConditionOperator.Like
    if (!searchString.EndsWith('%'))
    {
        searchString += '%';
    }

    QueryExpression query = new("account")
    {
        ColumnSet = new("accountid",
                        "name",
                        "accountnumber",
                        "primarycontactid",
                        "address1_city",
                        "telephone1",
                        "emailaddress1"),
        Criteria = new()
        {
            Filters =
            {
                new (LogicalOperator.Or)
                {    
                    // Specify Quick find filter
                    IsQuickFindFilter = true,
                    Conditions =
                    {
                        { new (attributeName: "telephone2", 
                            ConditionOperator.Like, 
                            value: searchString) },
                        { new (attributeName: "telephone1", 
                            ConditionOperator.Like, 
                            value: searchString) },
                        { new (attributeName: "emailaddress1", 
                            ConditionOperator.Like, 
                            value: searchString) },
                        { new (attributeName: "accountnumber", 
                            ConditionOperator.Like,
                            value: searchString) },
                        { new (attributeName: "name", 
                            ConditionOperator.Like,
                            value: searchString) }
                    }
                },
                // Condition to be evaluated after Quick find filter
                new (LogicalOperator.And)
                {
                     Conditions =
                    {
                        {new(attributeName:"statecode",
                            ConditionOperator.Equal, 
                            value: 0)}
                    }
                }
            }
        },
        Orders = {
            {
                new(attributeName: "name", 
                    orderType: OrderType.Ascending)
            }
        }
    };

    return service.RetrieveMultiple(query);
}

クイック検索でのレコード制限

Power Platform 管理センター内には、クイック検索レコードの制限と呼ばれる Dataverse 設定があり、既定で有効になっています。 組織テーブル QuickFindRecordLimitEnabled 列には、この設定が格納されます。

Important

[クイック検索レコードの制限] 設定は有効のままにすることを強くお勧めします。 この設定により、クエリが使用可能なリソースを使い果たしたときに、システムの速度低下やサービス中断の可能性を防ぐことができます。

クイック検索クエリはアプリケーションで特定のユーザー エクスペリエンスをサポートするため、結果を返すか、すぐに失敗する必要があります。 ユーザーは結果を長時間待つことはありません。これらのクエリでは、テーブルの複数の列に条件を設定できるため、多くのシステム リソースを使用できます。

[クイック検索レコードの制限] 設定が有効になっている場合、クイック検索クエリでは、結果の数が 10,000 行を超えるとエラーが返されます。 返されるエラーは次のとおりです。

名前: QuickFindQueryRecordLimitExceeded
コード: 0x8004E024
数: -2147164124
メッセージ: The number of records for this search exceeds the Quick Search record limit. Please refine your query and try again.

アプリケーションでこのエラーを表示する必要はありませんが、発生する可能性があることを想定してください。 これを軽減するには、次の方法があります。

  • クエリで検索されるフィールドの数を制限する。
  • クエリに制限条件を含めます。
  • 検索ボックスに入力する文字数を増やして、合計一致数を減らすようにユーザーに要求します。

クエリが成功するかどうかは、クエリの定義方法よりもテーブル内のレコードの数によって異なります。 これを理解するには、検索項目の制限がどのように計算されるかを理解する必要があります。

検索項目の制限の計算方法

検索アイテムの制限は、クイック検索フィルターの項目 のみを 使用して計算されます。 クエリを処理すると、Dataverse は、セキュリティ フィルターを 適用する前であっても、クイック検索フィルターがあるかどうかを検出し、最初に処理します。 クイック検索フィルターの結果が 10,000 行を超える場合、Dataverse は QuickFindQueryRecordLimitExceeded 例外をスローし、他のフィルターは処理されません。 返されるレコードの合計数を減らすためにフィルターを追加しても、 QuickFindQueryRecordLimitExceeded 例外の可能性は低下しません。 権限のないテーブルに対してクエリを実行して、一致するすべてのレコードを表示すると、このエラーが発生する可能性があります。

クイック検索レコードの制限をバイパスする

[クイック検索レコードの制限] 設定が有効になっていて、一時的にクイック検索の制限を超えるクエリをテストする必要がある場合は、FetchXml を使用してクエリを作成し、フィルター要素overridequickfindrecordlimitdisabled属性を'1'に設定します。

クイック検索レコードの制限を適用する

[クイック検索レコードの制限] 設定が無効になっており、制限が一時的に適用されたクエリをテストする必要がある場合は、FetchXml を使用してクエリを作成し、フィルター要素overridequickfindrecordlimitenabled属性を'1'に設定します。

制限事項

クイック検索クエリでは、すべての状況で使用できるエクスペリエンスが提供されない場合があります。

検索項目の制限はセキュリティ フィルターを適用する前に計算されるため、呼び出し元ユーザーが表示するセキュリティ特権を持つレコードの数に関係なく、テーブルに多数のレコードが含まれている場合、システム内の一致するレコードの合計数が 10,000 レコードの制限を超える可能性があります。 クエリを絞り込むか、より具体的な検索条件を使用するだけでは、ユーザーに使いやすいエクスペリエンスを提供できない場合があります。

最悪のシナリオでは、ユーザーが特定の検索文字列を入力しない限り、 QuickFindQueryRecordLimitExceeded 例外が表示されます。これは、予期される "クイック検索" エクスペリエンスを提供しません。

こちらもご覧ください

FetchXML を使用してデータのクエリを実行する
QueryExpression でクエリを作成する
Dataverse Search API