Recherche approximative dans powerapps Canvas [Spoiler : c’est possible !]
-
Recherche approximative dans powerapps Canvas [Spoiler : c’est possible !]
Bonjour à tous
Il arrive qu’on ait besoin de faire une recherche approximative sur nos données (aussi appelée recherche floue ou fuzzi search en anglais).
Par exemple vous cherchez un client, vous vous souvenez qu’il s’appelle [DU-PON] mais vous ne savez plus si c’est un D ou un T ? Avec une recherche classique vous tapez l’orthographe exacte et vous avez une chance sur 2 d’avoir bon du premier coup. Et si c’est un nom encore plus compliqué ? …
Bref la recherche flexible vous permet d’avoir une recherche qui trouve ce qui correspond “à peu prêt” au texte recherché.La solution
Il suffit d’activer la recherche de dataverse dans votre environnement, puis de définir quelles tables et quels champs peuvent être cherchés, puis d’utiliser les actions dataverses depuis powerapps Canvas pour interroger le moteur de recherche 😉
Pour activer et paramétrer la recherche dans l’environnement je vous renvois sur le mode opératoire officiel (attention à la subtilité que les champs cherchés doivent être ajoutés à la vue de recherche rapide) : https://learn.microsoft.com/en-us/power-platform/admin/configure-relevance-search-organization
Ensuite depuis powerapps Canvas :
- Ajouter la source de données ‘Environment’ pour avoir accès aux actions dataverse
Utiliser dans une action comportementale l’action comme suit (*):
<code class="language-plaintext"> Environment.searchsuggest( { entities:"[{""name"":""pref_matable"",""selectColumns"":[""name"",""pref_macolonne"",""pref_autrecolonne""],""searchColumns"":[""name"",""pref_macolonne"",""pref_autrecolonne""]}]"; fuzzy:true; search:TextInput1.Text; options:"{'querytype': 'lucene', 'searchmode': 'all', 'besteffortsearchenabled': 'true', 'grouprankingenabled': 'true'}"; top:10; orderby:"[""@search.score desc""]" } ).response
Cela retournera un JSON que vous pourrez alors manipuler à l’aide de la fonction ParseJSON. Par exemple pour obtenir la liste des résultats dans une collection :
<code class="language-plaintext">ClearCollect( colSearchResults2; ForAll( ParseJSON( searchSuggest ).Value; ThisRecord ) );;
A vous d’utiliser le reste à votre convenance.
(*) Je reviens rapidement sur la fonction ‘searchSuggest’. Les paramètres n’ont pas été si simples que ca à trouver, et les résultats ne reflètent pas forcément ce qu’on attendrait. Par exemple, si vous supprimez le champs ‘name’ dans la table ‘searchColumns’ dans la propriété ‘entities’ vous n’obtenez plus aucun résultat… et d’autres mystères encore incompris pour ma part.
Un problème également, c’est que quelque soit les champs qu’on met dans searchColumns, la recherche se fait dans tous les champs de recherche, et pire encore, la recherche se fait également dans la colonne de clé guid (ce qui peut être perturbant).
Amusez vous bien, la recherche approximative c’est top pour éviter à vos utilisateurs de saisir un doublon par exemple, ou pour chercher dans des textes issus de saisies utilisateurs, en faisant abstraction d’éventuelles fautes d’orthographe.
NB : il est en théorie possible aussi de faire une recherche flexible depuis power automate avec l’action en preview ‘Search Rows’ de dataverse, mais je n’ai jamais été fichu de le faire fonctionner….
Connectez-vous pour répondre.