Power Apps – Rechercher dans 2 colonnes d'une liste de +2000 éléments

Étiquetté : ,

  • Power Apps – Rechercher dans 2 colonnes d'une liste de +2000 éléments

    Posté par R3dKap sur 13 décembre 2021 à 11h28

    Voici une proposition de solution pour mettre en place une recherche sur une liste de plus de 2 000 éléments et ce dans 2 colonnes différentes…

    Supposons que l’on ait une liste Communes avec deux colonnes CodePostal et NomCommune.

    Voici les instructions :

    • sur votre écran mettez une combo box appelée ComboBox1
    • au-dessus de ta combo box, mettez un text input appelé TextInput1
    • sur la propriété OnChange de TextInput1, mettez ceci :
    Clear(colCommunes);nIf(n    Not(IsBlank(TextInput1.Text)),n    If(n        IsNumeric(TextInput1.Text),n        Collect(n            colCommunes,n            Filter(n                Communes,n                StartsWith(n                    CodePostal,n                    TextInput1.Textn                )n            )n        ),n        Collect(n            colCommunes,n            Filter(n                Communes,n                StartsWith(n                    NomCommune,n                    TextInput1.Textn                )n            )n        )n    )n)n
    • définissez la propriété IsSearchable de ComboBox1 à false
    • sur la propriété Items de ComboBox1 mettez simplement :
    colCommunesn
    • sur ComboBox1 cliquez sur le lien Edit de Fields :

    • là changez le Layout et définissez-le à Double :

    • puis dans Primary text et Secondary text mettez respectivement les colonnes de code postal et de commune :

    • et enfin, dans la propriété DisplayMode du ComboBox1 mettez ceci :
    If(IsEmpty(colCommunes), DisplayMode.Disabled, DisplayMode.Edit)n

    Quelques explications…

    En gros, l’idée c’est tout d’abord d’utiliser une combo box en mode double pour afficher à la fois le code postal et la commune dans un seul composant :

    Ensuite, on ne peut malheureusement pas utiliser la recherche intégrée à la combo box car il y a plus de 2 000 éléments dans la liste. Or la fonction Search() (qui est utilisée derrière pour faire cela) n’est pas délégable à SharePoint, c’est à dire que Power Apps ne peut pas dire à SharePoint “Fais la recherche pour moi” il est obligé de la faire lui-même. Et donc, pour des raisons de performances, Power Apps ne fait la recherche que sur 2 000 enregistrements max.

    Du coup, pour contourner ce problème, on va utiliser une autre fonction qui, elle, est délégable à SharePoint : StartsWith().

    On mets donc un text input sur l’écran pour permettre à l’utilisateur de saisir son critère de recherche. Or, si on avait fait un StartsWith() sur un champ de type “75000-Paris”, on aurait pu faire la recherche que sur le code postal et si on avait tapé “Par” il n’aurait rien trouvé puisque la fonction StartsWith() ne fait la recherche que sur le début de la chaîne (comme son nom l’indique d’ailleurs 🙂).

    C’est la raison pour laquelle dans le gros morceau de code fournit ci-dessus, on regarde si ce que l’utilisateur a saisit est un numérique (alors on fait un StartsWith() sur le code postal) ou une chaîne de caractères (auquel cas on fait un StartsWith() sur la commune).

    Le résultat du filtrage des communes avec l’un ou l’autre des StartsWith() est stocké dans une collection locale colCommunes et c’est elle qui alimente la combo box.

    Enfin, pour éviter que l’utilisateur n’ouvre la combo box alors qu’il vient de lancer une recherche et que l’on a pas encore les résultats du filtrage, on verrouille la combo box tant qu’il n’y a pas de données dans colCommunes. C’est le but du code que l’on a mit sur la propriété DisplayMode de ComboBox1.

    La seule chose à savoir pour l’utilisateur c’est qu’il doit appuyer sur <ENTREE> après avoir saisi son critère de recherche dans TextInput1 pour que cela déclenche la recherche et le filtrage des communes.

    Voilà ce que ça donne :

    Vous remarquerez que j’ai aussi mis une List box (à utiliser à la place de la combo box) qui peut être plus pratique pour afficher directement la liste des communes disponibles. Cela évite de devoir ouvrir la combo box pour voir le résultat du filtrage.

    Pour que cela fonctionne bien, il suffit de positionner ses propriétés ainsi :

    • Items :
    AddColumns(n    colCommunes,n    "CPCommune",n    CodePostal & " - " & NomCommunen)n
    • SelectMultiple à false

    Puis, choisit bien la colonne CPCommune pour l’affichage des valeurs :

    Et histoire de faire plus propre, pour faire en sorte que la liste se vide au moment où on veut faire une nouvelle recherche, définit la propriété OnSelect de TextInput1 à :

    Clear(colCommunes)n

    Voili voilou…

    PostID=LqDtZnQbD1VPgsW

    R3dKap a répondu Il y a 4 mois, 2 semaines 1 Membre · 0 Réponses
  • 0 Réponses

Désolé, aucune réponse n’a été trouvée.

Connectez-vous pour répondre.