簡易検索 クエリについて
モデル駆動型アプリは、簡易検索 または グリッド検索 を使用してレコードをすばやく検索するエクスペリエンスを提供します。 これらのエクスペリエンスにより、ユーザーは 1 つのテキスト入力を 1 つのテーブル内の複数の列に適用できるようになります。
モデル駆動型アプリは、Dataverse 検索が有効になっている場合、Dataverse 検索 API を使用する検索ボックスも提供します。 Dataverse 検索では、より関連性の高い検索機能を提供するために、結果に複数のテーブルからの結果を含めることができます。 Dataverse 検索が有効になっていない場合、モデル駆動型アプリは 複数テーブル 簡易検索 (分類検索) 最大 10 個の 簡易検索 クエリの結果を組み合わせたエクスペリエンスを提供します。 モデル駆動型アプリで利用可能な検索オプションの詳細について解説します。
注意
簡易検索 クエリは、あらゆる状況で使用可能なエクスペリエンスを提供するわけではありません。 詳細: 制限
次のシナリオでは、簡易検索 クエリの代わりに Dataverse 検索 API の使用を検討してください。
簡易検索クエリとは何か?
簡易検索 クエリは次のパターンを使用します:
これらには、「OR」フィルター演算子を使用する単一のフィルターが含まれます。
- FetchXml では、フィルター要素 の
type
属性は'or'
に設定されます。 - QueryExpression では、FilterExpression.FilterOperator が LogicalOperator.Or に設定されます。
さらにフィルターを追加することもできますが、簡易検索フィルターの結果が処理された後にのみ評価されます。
- FetchXml では、フィルター要素 の
「OR」フィルターは 簡易検索 フィルターとしてマークされます。
- FetchXml では、フィルター要素 の
isquickfindfields
属性は'1'
に設定されます。 - QueryExpression では、FilterExpression.IsQuickFindFilter が
true
に設定されます。
- FetchXml では、フィルター要素 の
フィルターには複数の条件があります。 1 つの条件のみが評価される場合、クエリは通常のクエリとして処理されるときよりもパフォーマンスが向上します。
フィルター内のすべての条件で「Like」演算子が使用されます。
- FetchXml では、条件要素 の
operator
属性は'like'
に設定されます。 - QueryExpression では、ConditionExpression.Operator は ConditionOperator.Like を使用します。
「like」演算子には、
%
で終わる検索文字列が必要です。注意
「Like」演算子は、簡易検索 クエリでサポートされている唯一の演算子です。 簡易検索 クエリがサポートするように設計されているアプリケーション シナリオに必要な唯一の演算子です。 他の演算子はテストされていません。
- FetchXml では、条件要素 の
使用例
簡易検索クエリの記述方法は、QueryExpression を使用するか、 FetchXml を使用するかによって異なります。
次のタグの各例で同じことが実行されます。
単一の検索文字列パラメータを受け入れます。 この値は、名前の一部、電話番号、電子メール アドレス、またはアカウント番号である可能性があります。
次のアカウント テーブル列に対して検索文字列をテストする 簡易検索 クエリを作成します。
telephone2
telephone1
emailaddress1
accountnumber
name
アクティブでないアカウントを除外します。
結果をアカウント名で並べ替えます。
QueryExpression は Dataverse SDK for .NET で使用できます。
/// <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 設定 があり、これはデフォルトでオンになっています。 この設定は organization table QuickFindRecordLimitEnabled 列 が格納します。
重要
簡易検索 レコード制限 設定を有効のままにすることを強くお勧めします。 この設定により、簡易検索 クエリが利用可能なリソースを使い果たした場合に、システムの速度低下や潜在的なサービス中断から保護されます。
簡易検索 クエリはアプリケーションの特定のユーザー エクスペリエンスをサポートするため、結果を返さなければすぐに失敗します。 ユーザーは結果が出るまで長時間待機することはなく、これらのクエリはテーブルの複数の列に条件を設定できるため、大量のシステム リソースを使用する可能性があります。
簡易検索 レコード制限 設定が有効になっている場合、簡易検索クエリは結果の数が 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 検索 APIs