Le traitement d’un Nombre Power Apps et des valeurs numériques dans Power Apps peut révéler quelques surprises.
Notamment, vous verrez pour quelles raisons, il a été nécessaire d’appeler 3 fonctions Power Apps pour convertir un nombre en… nombre !
Le scénario suivant est réel. Il a été rencontré en cours de développement d’une application Power Apps pour un client.
Si vous rencontrez des erreurs dans les manipulations ci-dessous, lisez l’article qui explique comment débuguer les erreurs dans Power Apps.
Gardez à l’esprit que l’interface a pu évoluer fortement depuis que cet article a été rédigé.
Faire une somme
Prenez un cas simple.
Faites la somme de 2 nombres dans des entrées de textes différentes (TextInput1, TextInput2).
Le signe « + » est une étiquette (Label1) et le résultat du calcul s’affiche dans une autre étiquette (Label2). Le bouton « = » ne sert à strictement à rien dans le calcul. Il sert uniquement à faire joli.
La somme de l’étiquette est obtenue par la formule :
Label2.Text = TextInput1.Text+TextInput2.Text
C’est épatant car cela marche tout de suite ! Pourtant, par défaut, les entrées de texte sont définies au format Texte.
Si vous le souhaitez, vous pouvez les mettre au format Nombre. La somme de 25,44 et 44,88 fera toujours 70,32. Tout va bien.
Pourtant la formule de calcul ne renvoie pas 70,32. Elle renvoie précisément :
70.32000000000001
Passons sur l’erreur d’arrondi, car ce n’est pas ce qui nous intéresse.
Vous noterez que la valeur décimale contient un point (« . »), et non une virgule (« . »).
Tout le problème est là. Le point. C’est l’ennemi.
Dans un cas simple comme celui-ci, le contrôle étiquette joue admirablement bien son rôle et affiche correctement la virgule pour les lecteurs francophones.
Quand les données proviennent d’une base de données, comme par exemple une liste Sharepoint, vous pouvez éventuellement rencontrer des problèmes plus complexes.
Nombre Power Apps : Format numérique dans SharePoint
Dans SharePoint, il y a 5 types de champs différents qui permettent de stocker un nombre. Il y a les champs de type Nombre, Devise, Date, Oui/Non et Valeur calculée.
Un champ de type Date et heure n’est pas directement concerné par les manipulations de nombre car il subit un traitement spécifique de la part de SharePoint pour apparaître sous forme d’une date.
De même, un champ Oui/Non subit aussi un traitement spécifique de SharePoint pour apparaître sous forme d’un booléen. De plus, l’étendue des possibilités de stockage de ce type de champ est assez limitée 🙂
Un champ Valeur calculée renvoie un des 4 autres types de données. Donc, ce qui est valable pour ces types de données est aussi valable pour lui.
Nombre Power Apps : Stockage dans SharePoint
Les données numériques décimales sont stockées sous forme d’un nombre décimal, donc avec un point. C’est évidemment aussi le cas si elles sont le résultat d’un calcul décimal, comme pour un champ Valeur calculée.
Dans ce cas, un appel à la fonction Power Apps Lookup() d’un champ numérique sur lequel un calcul décimal est fait renverra un nombre stocké avec un point.
Si la colonne Ordre contient le nombre 42, Power Apps stockera en mémoire le nombre 33.6 (42 * 80%). C’est le contrôle qui renverra obligeamment 33,6. Bien aimable. (C’est aussi un peu son rôle).
Nombre Power Apps : Conversion
Le problème apparaît lors de calcul, ou de conversion de nombres décimaux, dans les variables ou les collections. Typiquement, l’appel d’une simple fonction Round() sur cette variable génère un message d’erreur.
Round(glbOrder;0)
Visiblement, la variable glbOrder n’était pas assez numérique pour Round().
Si une chaîne de caractères contient uniquement des caractères numériques, La fonction Value() de Power Apps permet de la convertir en valeur numérique. Il est donc possible d’effectuer des calculs sur le résultat de la fonction.
Dans certains cas, la formule suivante résout le problème.
Value(glbOrder)
Cependant, cela ne fonctionne pas dans toutes les situations à cause du point (« . »). Aussi, si vous rencontrez ce genre de problème, il faut faire appel à la fonction Substitute() de Power Apps, pour remplacer le point par la virgule.
Substitute(glbOrder;".";","))
Toutefois, la fonction Substitute() ne s’applique que sur une chaîne de caractères. Or, la fonction Substitute() trouve que la variable glbOrder est trop numérique !
A partir d’ici, ça devient compliqué
Dans ce scénario, votre variable, issu d’un champ numérique de SharePoint, n’est pas assez numérique pour la fonction Round(). Par ailleurs, la même variable est trop numérique pour la fonction Substitute().
Dans ce cas, vous vous devez utiliser la fonction Text() de Power Apps. En effet, celle-ci permet de transformer un résultat numérique en chaîne de caractères. Sur cette chaîne de caractères, la fonction Substitute() pourra remplacer le point par une virgule.
Substitute(Text(glbOrder);".";","))
Ensuite, il ne reste plus qu’à transformer la chaîne de caractères numériques en nombre, grâce à la fonction Value(), puis d’appliquer la fonction Round().
Au final, votre formule complète sera :
Round(Value(Substitute(Text(glbOrder);".";",")));0)
Encore une fois, il est possible que vous ne rencontriez jamais ce cas complexe. Tant mieux.
En revanche, si cela vous arrive, cet article peut vous aider à mieux comprendre ce qui se passe et surtout vous aider à résoudre votre problème.
La manipulation est terminée.
Laisser un commentaire