Partager via


À propos des requêtes de recherche rapide

Les applications pilotées par modèle offrent des expériences permettant de trouver rapidement des enregistrements à l’aide de la recherche rapide ou de la recherche dans la grille. Avec ces expériences, les utilisateurs disposent d’une saisie de texte unique qui peut être appliquée à plusieurs colonnes d’une table unique.

Les applications pilotées par modèle 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 Dataverse la recherche n’est pas activée, les applications basées sur un modèle offrent une expérience à tables multiples Recherche rapide (recherche catégorisée) qui combine des résultats allant jusqu’à 10 requêtes Recherche rapide. En savoir plus sur les options de recherche disponibles pour les applications pilotées par modèle.

Notes

Les requêtes de recherche rapide peuvent ne pas fournir d’expériences utilisables pour toutes les situations. 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. Elles incluent un seul filtre qui utilise un opérateur de filtre « OR ».

    Vous pouvez ajouter d’autres filtres, mais ils ne sont évalués qu’après le traitement des résultats du filtre Recherche rapide.

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

  3. Le filtre dispose de plusieurs conditions. Lorsqu’une seule condition est évaluée, la requête présente de meilleures performances lorsqu’elle est traitée comme une 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 %.

    Notes

    L’opérateur « Like » est le seul opérateur pris en charge pour les requêtes de recherche rapide. C’est le 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. Les autres opérateurs n’ont pas été testés.

Examples

La façon dont vous écrivez une requête Recherche rapide dépend de si vous utilisez QueryExpression ou FetchXml.

Chaque exemples des onglets suivants font la même chose :

  1. Accepte un seul paramètre de chaîne de recherche. 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ée une requête de recherche rapide qui teste la chaîne de recherche par rapport aux colonnes suivantes de la table des comptes :

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

  4. Trie les résultats par nom de compte.

Vous pouvez utiliser QueryExpression avec le SDK pour .NET Dataverse.

/// <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 d’enregistrement de recherche rapide

Dans le Power Platform Centre d’administration, il existe un Dataverse paramètre appelé Recherche rapide limites d’enregistrement qui est activé par défaut. La colonne QuickFindRecordLimitEnabled de la table d’organisation stocke ce paramètre.

Important

Nous vous recommandons fortement de laisser le paramètre Limites d’enregistrement de recherche rapide activé. Ce paramètre vous protège du ralentissement du système et des interruptions potentielles du service lorsque les 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 renvoyer des résultats ou échouer rapidement. L’utilisateur n’attendra pas longtemps les résultats et ces requêtes peuvent utiliser beaucoup de ressources système, car elles peuvent contenir des conditions sur plusieurs colonnes de la table.

Lorsque le paramètre Recherche rapide de limites d’enregistrement est activé, les requêtes Recherche rapide renvoient une erreur lorsque le nombre de résultats dépasse 10 000 lignes. L’erreur renvoyée est :

Nom : QuickFindQueryRecordLimitExceeded
Code : 0x8004E024
Numéro : -2147164124
Message : The number of records for this search exceeds the Quick Search record limit. Please refine your query and try again.

Il n’est pas nécessaire d’afficher cette erreur dans votre application, mais vous devez vous attendre à ce qu’elle puisse se produire. Vous pouvez l’atténuer en procédant comme suit :

  • Limitez le nombre de champs recherchés par votre requête.
  • Incluez des conditions de limite dans votre requête.
  • Demandez à l’utilisateur de saisir plus de caractères dans la zone de recherche pour fournir moins de correspondances totales.

La réussite de la requête 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 d’éléments de recherche est calculée.

Modalités du calcul de la limite des éléments de recherche

La limite d’éléments de recherche est calculée en utilisant UNIQUEMENT les éléments dans le filtre de recherche rapide. Lors du traitement de la requête, Dataverse détecte s’il existe un filtre Recherche rapide et le traite en premier, avant même d’appliquer les 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 renvoyés ne diminuera pas le potentiel de l’ QuickFindQueryRecordLimitExceeded exception. Une personne qui interroge une table sans privilèges pour afficher tous les enregistrements correspondants peut obtenir cette erreur.

Contourner la limite d’enregistrement de recherche rapide

Lorsque le paramètre Limites d’enregistrement de recherche rapide est activé et que vous devez tester une requête qui dépasse la limite de recherche rapide de manière temporaire, utilisez FetchXml pour composer la requête et définissez l’attribut overridequickfindrecordlimitdisabled de l’élément filter sur '1'.

Appliquer la limite d’enregistrement de recherche rapide

Lorsque le paramètre Limites d’enregistrement de recherche rapide est désactivé et que vous devez tester une requête avec les limites appliquées de manière temporaire, utilisez FetchXml pour composer la requête et définissez l’attribut overridequickfindrecordlimitenabled de l’élément filter sur '1'.

Limitations

Les requêtes de recherche rapide peuvent ne pas fournir d’expériences utilisables pour toutes les situations.

Étant donné que la limite d’éléments de recherche est calculée avant d’appliquer les 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 pour lesquels l’utilisateur appelant dispose de privilèges de sécurité pour les voir. Affiner la requête ou utiliser des critères de recherche plus spécifiques peut ne pas suffire à offrir une expérience utilisable à un utilisateur.

Dans le pire des cas, les utilisateurs voient une QuickFindQueryRecordLimitExceeded exception à moins qu’ils ne saisissent une chaîne de recherche spécifique, ce 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