Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Power Apps
  3. "Power Fx", le langage de formules
Extrait - Power Apps Débutez la création d'applications métier Canevas en Low Code
Extraits du livre
Power Apps Débutez la création d'applications métier Canevas en Low Code
5 avis
Revenir à la page d'achat du livre

"Power Fx", le langage de formules

Introduction à Power Fx et aux formules

Power Fx est le nom donné au langage de formule utilisé dans Power Apps.

Ce langage permet de créer des logiques de calculs métier, d’ajouter de l’interactivité, d’afficher des notifications ainsi que d’exécuter certaines opérations comme envoyer un e-mail ; tout ceci avec un minimum de code (low code).

À l’instar d’Excel, les calculs sont effectués à l’aide de formule(s) contenue(s) non pas dans une cellule cette fois, mais dans les propriétés d’un contrôle.

Exemple avec un contrôle de type "Étiquette" (label) : dans sa propriété Text, on écrit la formule suivante pour calculer un montant TTC.

in_Montant_HT.Text * 1.2 

Le contrôle "in_Montant_HT" est de type "Entrée texte", il contient le montant HT saisi par l’utilisateur.

Voici une copie d’écran de la barre de formule :

images/06PA001.png

Une formule représente une expression ou un ensemble d’expressions. Une expression est une opération de calcul (sur des dates, des nombres, du texte ou tout autre type). Une opération peut contenir une fonction (par exemple, Upper("ma société)), ou une valeur, comme la chaîne de texte seule : "Eni-Edition".

Exemple d’une formule qui permet de récupérer l’adresse de l’e-mail de l’utilisateur connecté grâce à la fonction User() et sa propriété .Email :

User().Email 

Power Fx ne ressemble pas à un langage classique de développement comme le C#, le VBA ou Java, mais est plutôt un langage de formule.

Il désigne la syntaxe et la grammaire du code que l’on peut utiliser dans Power Apps. L’ensemble du code...

Syntaxe Power Fx

Une "phrase" Power Fx est une formule. Cette formule peut être constituée d’une ou de plusieurs fonctions, d’une ou de plusieurs expressions.

Celle-ci peut contenir des opérateurs de comparaison comme "And", "Or" ou des opérateurs de concaténation comme "&".

Si l’on souhaite que plusieurs formules s’exécutent les unes à la suite des autres, il est nécessaire que chaque phrase se termine par la ponctuation de fin de formule suivante ";;" (double point-virgule), suivie éventuellement d’un commentaire ("//" ou "/*  */").

Bonne pratique : même si c’est la dernière formule de votre code ou s’il n’y a qu’une seule formule, vous pouvez la terminer par ";;".

Étudions l’exemple suivant : on souhaite qu’un utilisateur, en cliquant sur une icône "Actualiser", puisse actualiser la base de données "RH_ListeDesFormations" et qu’il y ait une notification de confirmation qui dure 3 secondes.

Pour cela, on insère la formule suivante dans la propriété OnSelect de l’icône "Actualiser" :

Refresh( "RH_ListeDesFormations" );; 
Notify( User().FullName & " ,La base a été actualisée"; Success; 
3000 ) // 3000 = 3 secondes d'attente du bandeau 

Résultat - Affichage du bandeau :

images/06PA021.png

Lorsque l’on renseigne les propriétés de type "Données" (Tooltip, Text, etc.) ou de "Conception" (Color, Visible, etc.), la formule Power Fx que l’on écrit est interprétée (calculée) et renvoie un résultat.

Le résultat de l’expression renvoie une valeur (par exemple un booléen...

Les fonctions

Power Apps dispose de nombreuses fonctions similaires à celles que l’on trouve dans Excel.

1. Introduction aux fonctions

Une fonction est une action qui renvoie un résultat. Ce résultat est celui d’une opération demandée dans une formule.

Par exemple, la fonction User(), qui représente le compte de l’utilisateur connecté à l’application, renvoie un tableau de trois propriétés :

  • Le nom complet -> User().FullName

  • L’adresse de messagerie -> User().Email

  • L’image de l’avatar -> User().Image

Le point (.) après le nom d’une fonction, d’une variable ou d’une collection, permet d’accéder à la liste des propriétés lorsqu’elles sont présentes.

Une autre fonction, comme Upper(), renvoie la chaîne de texte passée en paramètres, en majuscule.

Exemple - une étiquette "label_Bienvenue", contenant la formule suivante dans sa propriété Text :

Upper("Bonjour " & User().FullName) 

affichera par exemple le texte en majuscule -> "BONJOUR PASCAL C.".

2. Créer sa propre fonction

Il est possible de créer ses propres fonctions en activant le paramètre Propriétés du composant amélioré dans les paramètres de l’application, puis en utilisant les "composants" et "composants réutilisables" dans les bibliothèques de composants.

Exemple où l’on souhaite créer une fonction qui calcule le TTC depuis un montant HT.

 Activez l’option Propriétés du composant amélioré depuis les paramètres de l’App :

images/06PA027.png

 Depuis l’arborescence de l’App, cliquez sur Composants, puis sur + Nouveau composant. Vous nommerez le composant ainsi créé...

Les indicateurs d’erreur

Avec Power Fx, il existe des indicateurs visuels dans l’éditeur de formule pour présenter différents types d’erreurs.

Voici quelques-unes de ces erreurs (liste non exhaustive) :

  • Erreur de syntaxe : surlignement en rouge, critique, ne fonctionnera pas.

  • Avertissement de base de données : double ligne bleue dans une formule (problème délégation), fonctionne mais avec une limite (de 1 à 2 000 lignes au maximum).

Pour plus de détails, voir le chapitre Dépanner et déboguer.

Travailler avec des variables

Lorsque l’on commence à développer plus profondément une application et que l’on souhaite ajouter plus d’interactivité, l’usage des variables devient nécessaire. 

Une variable est un espace mémoire (comme un casier) dans lequel on vient stocker une valeur (du texte, un nombre, une formule qui retourne un résultat, etc.).

On lui choisit un nom pour la manipuler plus facilement.

Exemple : on souhaite stocker dans une variable le montant TTC d’un achat pour le récupérer plus tard lorsque le panier est validé :

Set( varMontantTTC; Value(in_MontantHT.Text) * 1,2 ) 

Cette formule utilise la fonction de comportement Set(), qui est une action de stockage. Cette formule stocke le résultat du calcul Value(in_MontantHT.Text) * 1,2) dans la variable nommée "varMontantTTC".

Plutôt que de refaire le calcul à chaque fois qu’on a besoin du TTC, il suffit de rappeler la variable qui est en mémoire. Cela peut servir par exemple pour faire une somme dans un panier, envoyer le total par e-mail ou le publier dans Teams.

Power Apps propose plusieurs types de variables avec des portées différentes :

  • Les variables de contexte.

  • Les variables globales.

  • Les variables globales de type Tableau ou Enregistrement (Array).

Les variables qui sont créées mais non renseignées ont une valeur vide (ou false pour les booléens).

1. Variable de contexte

La variable de contexte est utilisée principalement pour des valeurs privées prévues pour être transmises à d’autres écrans.

Exemples

UpdateContext( {NomVCar: "PC02"} ). 

Met à jour la variable de contexte NomVCar par la valeur "PC02" dans l’écran courant.

Navigate( Ecran02; Cover; {NomVCar: NomVCar & " - suivant"}...

Les opérateurs logiques et de comparaison

Les opérateurs logiques (OR, NOT, AND, etc.) et de comparaison (>, <, =, etc.) sont communément utilisés dans Power Apps pour assurer les logiques d’application métier.

1. Les fonctions logiques If, Switch et IsMatch

Les fonctions conditionnelles If et Switch assurent un "branchement" conditionnel des opérations. En d’autres termes, elles permettent d’effectuer des opérations en fonction des conditions.

If() est une fonction qui conditionne l’exécution d’une formule suivant le résultat d’une expression. Si le résultat de cette expression est vrai, alors Power Apps exécute la formule écrite après le premier point-virgule, sinon il exécute la formule écrite après le second point-virgule :

If( <Expression ou formule> ; <Si le résultat de la formule ou  
de l'expression précédente est vrai: exécute la formule écrite ici> ;  
<Sinon, exécute cette formule-là> ) 

If( <Expression1>; <Si Expression1 est vrai, ici execute> 
[; <Sinon Expression2>; <Si Expression2 est vrai, ici execute>; ... 
[;<Sinon execute par defaut>] ]) 

Exemple 1 - Changer la couleur d’un texte avec If()

On souhaite que le texte de l’étiquette "Montant" s’affiche en rouge si sa valeur Montant.Text est supérieure à 1.000, puis en gras si la valeur est supérieure à 5.000.

 Dans la propriété FontWeight de l’étiquette "Montant", ajoutez la formule suivante :

If( Value(Montant.Text) > 5000; FontWeight.Bold; FontWeight.Normal ) 

Dans cet exemple, l’usage de la fonction Value() permet de convertir le texte en valeur numérique.

 Puis insérez la formule...

Les opérateurs ThisItem, As et ThisRecord

ThisItem

L’opérateur ThisItem, utilisé dans les galeries et dans les formulaires, fait référence à la source de données de son parent. La data source du parent se situe dans les propriétés Items/Item de la galerie ou du formulaire.

Syntaxe

ThisItem.<nomDeColonne>[.<nomSous-Colonne>] 

Exemple

Depuis une galerie connectée à la source de données "RH - Liste de Formation", on souhaite afficher l’e-mail du créateur.

ThisItem.'Créé par'.Email 

As

L’opérateur As permet de nommer une expression, une table ou une collection avec un nom plus explicite à la place de l’opérateur générique ThisItem.

Syntaxe

<Expression ou Table> As <Nom> 

Exemple

On souhaite nommer le résultat d’un filtre sur une source de données.

 Insérez cette formule dans la propriété Items de la galerie :

Filter( 'RH - Liste de Formation'; ThisRecord.Créé >= Today() ) As 
FormationsDuJour 

 Puis dans la propriété Text d’une étiquette dans la galerie :

FormationsDuJour.'Créé par'.Email 

Le nom "FormationsDuJour", remplace l’opérateur générique ThisItem. Ce qui permet d’écrire, par exemple, ’FormationsDuJour.Title’ au lieu de ThisItem.Title.

ThisRecord

En utilisant le préfixe opérateur ThisRecord, on s’assure que seules les colonnes (ou champs) de la source de données seront énumérées (pas de nom d’objets Power Apps venant ajouter de l’ambiguïté). De plus, cela précise qu’il s’agit de la source de données citée en paramètre.

Syntaxe...

Les boucles ForAll, With et Sequence

La fonction ForAll() "balaye" un tableau qui lui est passé en paramètre. Pour chaque itération, du premier élément du tableau jusqu’au dernier élément, la fonction exécutera la formule transmise dans son second paramètre pour chacun des éléments.

Syntaxe

ForAll( <Table | Source de données>; <Formule à exécuter à chaque 
élément de la table> ) 

Cette fonction n’est pas délégable. Cela signifie que Power Apps doit d’abord récupérer les éléments avant de les traiter.

Exemple

Il s’agit d’envoyer un e-mail à chaque utilisateur d’une liste des personnes qui ont créé une formation ce jour.

 Comme prérequis, il vous est nécessaire d’ajouter le connecteur Outlook "Office365Outlook".

 Puis ajoutez la formule suivante dans la propriété OnSelect d’un bouton :

images/06PA053.png

La fonction ForAll() va, pour chaque élément (chaque ligne du tableau varStagiaires), exécuter la formule d’envoi du courrier via Outlook.

Bien que l’utilisation d’une variable fonctionne pour les tableaux, il est préférable d’utiliser une collection. Cela apporte plus de visibilité (on peut voir le contenu depuis le menu Fichier - Collections) et plus de flexibilité (avec des fonctions d’ajout d’éléments comme Collect(), ou de suppression comme Remove()).

Résultat après que l’utilisateur a créé deux nouvelles formations ; il reçoit ses confirmations :

images/06PA054.png

With

Pour évaluer un seul enregistrement...

Power Fx et Power Apps pour professionnels

La Power Platform propose aussi aux professionnels du développement des outils et des techniques pour aller plus loin dans l’usage de Power Apps, notamment l’écriture "linéaire" du code (YAML), la création de connecteurs personnalisés et la création de composants pour Power Apps Framework. Pour en savoir plus, rendez-vous aux URL suivantes :

YAML

https://docs.microsoft.com/fr-fr/power-platform/power-fx/overview#pro-code

et

https://docs.microsoft.com/fr-fr/power-platform/power-fx/yaml-formula-grammar

Connecteurs personnalisés

https://docs.microsoft.com/fr-fr/connectors/custom-connectors/

et

https://docs.microsoft.com/fr-fr/connectors/custom-connectors/define-blank

Power Apps Component Framework

https://docs.microsoft.com/fr-fr/powerapps/developer/component-framework/overview

et

https://docs.microsoft.com/fr-fr/learn/paths/use-power-apps-component-framework/

Quelques bonnes pratiques

Voici quelques bonnes pratiques à respecter pour s’assurer de la qualité d’écriture des formules, ce qui aide à limiter les bugs et accroît la lisibilité des formules :

  • Évitez les espaces entre le nom de la fonction et sa parenthèse ouvrante : Lower (" ENI EDITIONS ") s’écrit Lower( "ENI EDITIONS" ).

  • N’écrivez qu’une fonction ou formule par ligne. Ajoutez un retour de ligne et double point-virgule à chaque fonction ou formule plutôt que de les mettre à la suite les unes des autres.

  • Indentez (mettez en forme) correctement vos lignes de formules.

Exemple avec une formule par ligne avec indentation (alignement virgule, etc.) :

Set( varFilter       , "ALL"  );; // variable de sélection filtre 
Set( varSort         , false  );; // variable pour le sens du tri 
Set( varTimelineIndex, 0      );; // indicateur barre de temps 

Exemple sans mise en forme :

images/06PA020.png

Résultat avec mise en forme automatique, en cliquant sur le bouton Mettre le texte en forme :

images/06PA062.png
  • Commentez fréquemment vos formules.

images/06PA002.png
  • Si vous améliorez le fonctionnement d’une formule, pensez à conserver son historique, par exemple dans un commentaire "//" ou "/*    */".

  • Dans la propriété OnStart de l’objet "App", vous pouvez ajouter une "carte" d’informations sur l’App en cours, avec les contenus suivants :

  • Synopsis : ce que fait l’application (très brièvement).

  • Créateur : le nom de(s) l’auteur(s), autrice(s).

  • Date : la date de création...