Partager via


À propos des requêtes de recherche rapide

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 :

  1. Ils incluent un seul filtre à l’aide d’un opérateur de filtre « 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.

  2. Le filtre « OR » est marqué comme filtre de recherche rapide :

  3. 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.

  4. Toutes les conditions du filtre utilisent l’opérateur « 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.

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 :

  1. 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.

  2. Créez une requête de recherche rapide qui teste la chaîne de recherche sur les colonnes de table de compte suivantes :

    • telephone2
    • telephone1
    • emailaddress1
    • accountnumber
    • name
  3. Filtre les comptes qui ne sont pas actifs.

  4. 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