Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les applications basées sur des modèles fournissent des expériences pour rechercher rapidement des enregistrements à l’aide de la recherche rapide ou de la recherche Grid. Avec ces expériences, les utilisateurs disposent d’une entrée de texte unique qui peut être appliquée à plusieurs colonnes dans une seule table.
Les applications basées sur des modèles fournissent également une zone de recherche qui utilise les API de recherche Dataverse lorsque la recherche Dataverse est activée. Avec la recherche Dataverse, les résultats peuvent inclure les résultats de plusieurs tables pour une fonctionnalité de recherche plus pertinente. Lorsque la recherche Dataverse n’est pas activée, les applications basées sur des modèles fournissent une expérience de recherche rapide à plusieurs tables (catégorisée) qui combine les résultats de 10 requêtes de recherche rapide maximum. En savoir plus sur les options de recherche disponibles pour les applications basées sur des modèles.
Note
Les requêtes de recherche rapide peuvent ne pas fournir d’expériences utilisables pour chaque situation. Voir limitations
Envisagez d'utiliser les API de recherche Dataverse au lieu des requêtes de recherche rapide pour les scénarios suivants :
Qu’est-ce qu’une requête de recherche rapide ?
Les requêtes de recherche rapide utilisent le modèle suivant :
Ils incluent un seul filtre à l’aide d’un opérateur de filtre « OR ».
- Avec FetchXml, l’attribut d’élément
typede filtre est défini sur'or'. - Avec QueryExpression, filterExpression.FilterOperator est défini sur LogicalOperator.Or.
Vous pouvez ajouter d’autres filtres, mais ils sont évalués uniquement après le traitement des résultats du filtre de recherche rapide.
- Avec FetchXml, l’attribut d’élément
Le filtre « OR » est marqué comme filtre de recherche rapide :
- Avec FetchXml, l’attribut d’élément
isquickfindfieldsde filtre est défini sur'1'. - Avec QueryExpression, filterExpression.IsQuickFindFilter est défini sur
true.
- Avec FetchXml, l’attribut d’élément
Le filtre a plusieurs conditions. Quand une seule condition est évaluée, la requête a de meilleures performances lorsqu’elle est traitée en tant que requête ordinaire.
Toutes les conditions du filtre utilisent l’opérateur « Like » :
- Avec FetchXml, l’attribut de l’élément de condition
operatorest défini sur'like'. - Avec QueryExpression, ConditionExpression.Operator utilise ConditionOperator.Like.
L’opérateur « like » nécessite une chaîne de recherche qui se termine par
%.Note
L’opérateur « Like » est le seul opérateur pris en charge pour les requêtes de recherche rapide. Il s’agit du seul opérateur nécessaire pour les scénarios d’application, que les requêtes de recherche rapide sont conçues pour prendre en charge. D’autres opérateurs n’ont pas été testés.
- Avec FetchXml, l’attribut de l’élément de condition
Examples
La façon dont vous écrivez une requête de recherche rapide dépend de l’utilisation de QueryExpression ou fetchXml.
Chacun des exemples des onglets suivants fait la même chose :
Acceptez un paramètre de chaîne de recherche unique. Cette valeur peut être un nom partiel, un numéro de téléphone, une adresse e-mail ou un numéro de compte.
Créez une requête de recherche rapide qui teste la chaîne de recherche sur les colonnes de table de compte suivantes :
telephone2telephone1emailaddress1accountnumbername
Filtre les comptes qui ne sont pas actifs.
Commande les résultats par nom de compte.
Vous pouvez utiliser QueryExpression avec le Kit de développement logiciel (SDK) Dataverse pour .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);
}
Limites des enregistrements de recherche rapide
Dans le Centre d’administration Power Platform, un paramètre Dataverse appelé Limites d’enregistrement Recherche rapide est activé par défaut. La colonne QuickFindRecordLimitEnabled de la table d’organisation stocke ce paramètre.
Important
Nous vous recommandons vivement de laisser le paramètre limites d’enregistrement de Recherche rapide activé. Ce paramètre vous protège contre la lenteur du système et les interruptions de service potentielles lorsque des requêtes de recherche rapide épuisent les ressources disponibles.
Étant donné que les requêtes de recherche rapide prennent en charge des expériences utilisateur spécifiques dans les applications, elles doivent retourner rapidement des résultats ou échouer rapidement. L’utilisateur n’attend pas longtemps pour les résultats et ces requêtes peuvent utiliser beaucoup de ressources système, car elles peuvent avoir des conditions sur plusieurs colonnes de la table.
Lorsque le paramètre limites de recherche rapide des enregistrements est activé, les requêtes de recherche rapide retournent une erreur lorsque le nombre de résultats dépasse 10 000 lignes. L’erreur retournée est la suivante :
Nom :
QuickFindQueryRecordLimitExceeded
Code :0x8004E024
Nombre :-2147164124
Message :The number of records for this search exceeds the Quick Search record limit. Please refine your query and try again.
Vous n’avez pas besoin d’afficher cette erreur dans votre application, mais vous devez vous attendre à ce qu’elle puisse se produire. Vous pouvez atténuer ce problème en procédant comme suit :
- Limitation du nombre de champs recherchés par votre requête.
- Incluez des conditions de limitation dans votre requête.
- Exiger que l’utilisateur entre davantage de caractères dans la zone de recherche pour fournir moins de correspondances totales.
Si la requête réussit peut dépendre davantage du nombre d’enregistrements dans la table que de la façon dont la requête est définie. Pour comprendre cela, vous devez comprendre comment la limite des éléments de recherche est calculée.
Calcul de la limite des éléments de recherche
La limite des éléments de recherche est calculée à l’aide uniquement des éléments du filtre de recherche rapide. Lors du traitement de la requête, Dataverse détecte s’il existe un filtre de recherche rapide et le traite d’abord, même avant d’appliquer des filtres de sécurité. Si les résultats du filtre de recherche rapide dépassent 10 000 lignes, Dataverse lève l’exception QuickFindQueryRecordLimitExceeded et aucun autre filtre n’est traité. L’ajout de filtres supplémentaires pour obtenir un plus petit nombre total d’enregistrements retournés ne réduit pas le potentiel de l’exception QuickFindQueryRecordLimitExceeded . Une personne qui interroge une table sans privilèges pour afficher tous les enregistrements correspondants peut obtenir cette erreur.
Contourner la limite des résultats de recherche rapide
Lorsque le paramètre des limites d’enregistrement de Recherche rapide est activé et que vous devez tester une requête qui dépasse temporairement la limite de recherche rapide, utilisez FetchXml pour composer la requête et définissez l’attribut de l’élément de filtreoverridequickfindrecordlimitdisabled sur '1'.
Appliquer la limite d’enregistrement de recherche rapide
Lorsque le paramètre de limites d’enregistrement Recherche rapide est désactivé et que vous devez tester une requête avec les limites appliquées temporairement, utilisez FetchXml pour composer la requête et définir l’attribut d’élémentoverridequickfindrecordlimitenabled de filtre sur '1'.
Limites
Les requêtes de recherche rapide peuvent ne pas fournir d’expériences utilisables pour chaque situation.
Étant donné que la limite des éléments de recherche est calculée avant d’appliquer des filtres de sécurité, le nombre total d’enregistrements correspondants dans le système peut dépasser la limite de 10 000 enregistrements lorsque la table contient un grand nombre d’enregistrements, quel que soit le nombre d’enregistrements que l’utilisateur appelant a des privilèges de sécurité à afficher. L’affinement de la requête ou l’utilisation d’un critère de recherche plus spécifique peut ne pas suffire pour fournir une expérience utilisable pour un utilisateur.
Dans le pire des scénarios, les utilisateurs voient une QuickFindQueryRecordLimitExceeded exception, sauf s’ils entrent une chaîne de recherche spécifique, qui ne fournit pas l’expérience « recherche rapide » attendue.
Voir aussi
Interroger des données à l’aide de FetchXML
Générer des requêtes avec QueryExpression
API de recherche Dataverse