Présentation de Microsoft Power Fx

Power Fx est le langage à faible code qui sera utilisé dans Microsoft Power Platform. C’est un langage de programmation polyvalent, fortement typé, déclaratif et fonctionnel.

Power Fx est exprimé dans un texte convivial. C’est un langage à faible code avec lequel les créateurs peuvent travailler directement dans une barre de formule de type Excel ou une fenêtre de texte de Visual Studio Code. Le mot "faible" dans faible code décrit la nature concise et simple du langage, rendant les tâches de programmation courantes faciles pour les créateurs et les développeurs. Il rend possible toute la gamme du développement, du sans code pour les personnes qui n’ont jamais fait de programmation auparavant, à la programmation professionnelle pour les développeurs chevronnés, sans obstacles d’apprentissage ni de réécriture entre les deux. Cela permet aux diverses équipes de collaborer et de gagner du temps, et de l’argent.

Note

  • Microsoft Power Fx est le nouveau nom du langage de formule pour les applications canevas dans Power Apps. Cette vue d’ensemble et les articles associés sont un travail en cours car nous extrayons le langage des applications canevas, l’intégrons à d’autres produits Microsoft Power Platform, et le rendons disponible en open source. Pour en savoir plus et découvrir ce langage dès aujourd’hui, commencez par Bien démarrer avec les formules dans les applications canevas dans la documentation Power Apps et inscrivez-vous gratuitement à un essai gratuit de Power Apps.
  • Dans cet article, nous nous référons à des créateurs lorsque nous décrivons une fonctionnalité qui pourrait être utilisée à l’une ou l’autre extrémité du spectre des compétences en programmation. Nous désignons l’utilisateur comme un développeur si la fonctionnalité est plus avancée et dépasse probablement la portée d’un utilisateur Excel typique.

Power Fx lie des objets entre eux à l’aide de formules de type feuille de calcul déclaratives. Par exemple, pensez à la propriété Visible d’un contrôle d’interface utilisateur en tant que cellule dans une feuille de calcul Excel, avec une formule associée qui calcule sa valeur en fonction des propriétés d’autres contrôles. La logique de formule recalcule la valeur automatiquement, comme le fait une feuille de calcul, ce qui affecte la visibilité du contrôle.

En outre, Power Fx offre une logique impérative en cas de besoin. Les feuilles de calcul n’ont généralement pas de boutons permettant de soumettre des modifications à une base de données, mais les applications en ont souvent. Le même langage d’expression est utilisé pour la logique déclarative et impérative.

Power Fx sera disponible sous forme de logiciel Open Source. Il est actuellement intégré aux applications canevas, et nous sommes en train de l’extraire de Power Apps pour l’utiliser dans d’autres produits Microsoft Power Platform et en open source. Plus d’informations : Microsoft Power Fx on GitHub

Cet article est une présentation de ce langage et de ses principes de conception. Pour en savoir plus sur Power Fx, consultez les articles suivants :

Pensez « Feuille de calcul »

Et si vous pouviez créer une application aussi facilement que vous créez une feuille de calcul dans Excel ?

Et si vous pouviez tirer parti de vos connaissances actuelles en matière de feuilles de calcul ?

Telles sont les questions qui ont inspiré la création de Power Apps et de Power Fx. Des centaines de millions de personnes créent chaque jour des feuilles de calcul avec Excel ; apportons-leur une création d’applications facile et utilisant des concepts Excel qu’ils connaissent déjà. En extrayant Power Fx de Power Apps, nous allons répondre à ces questions pour l’automatisation de la création, ou un agent virtuel ou d’autres domaines.

Tous les langages de programmation, y compris Power Fx, ont des expressions : moyen de représenter un calcul sur des nombres, des chaînes ou d’autres types de données. Par exemple, mass * acceleration dans la plupart des langages exprime la multiplication de mass (la masse) par acceleration (l’accélération). Le résultat d’une expression peut être placé dans une variable, utilisé comme argument d’une procédure ou imbriqué dans une expression plus grande.

Power Fx va encore plus loin. Une expression en elle-même ne dit rien sur ce qu’elle calcule. C’est au créateur de la placer dans une variable ou de la passer à une fonction. Dans Power Fx, au lieu d’écrire uniquement une expression qui n’a pas de signification spécifique, vous écrivez une formule qui lie l’expression à un identifiant. Vous écrivez force = mass * acceleration comme formule de calcul force. Comme mass ou acceleration change,force est automatiquement mis à jour avec une nouvelle valeur. L’expression décrivait un calcul, une formule donnait un nom à ce calcul et l’utilisait comme recette. C’est pourquoi nous nous référons à Power Fx en tant que langage de formule.

Par exemple, cette formule de Stack Overflow recherche une chaîne dans l’ordre inverse. Dans Excel, cela ressemble à l’image suivante.

Recherche inversée

Capture d’écran d’une barre de formule dans Excel avec la formule : = =RIGHT(A1,LEN(A1)- FIND("|", SUBSTITUTE(A1," ","|", LEN(A1)-LEN(SUBSTITUTE(A1," ","")))) La cellule A1 contient le texte « Bonjour Tout le monde ! Je suis ravi de vous rencontrer ! » La cellule A2 contient le texte « vous ! »

Power Fx fonctionne avec cette même formule, avec les références de cellule remplacées par des références de propriété de contrôle :

Recherche inversée Power Fx.

Capture d’écran d’une barre de formule Power Fx dans Power Apps. La formule est = RIGHT(Input.Text,Len(Input.Text)- FIND("|", SUBSTITUTE(Input.Text," ","|", Len(Input.Text)-Len(Substitute(Input.Text," ","")))) Dans la zone de saisie sous la formule, le texte « Bonjour Tout le monde ! Je suis ravi de vous rencontrer ! » apparaît, lettre par lettre. En même temps, dans la zone Étiquette, les lettres du dernier mot apparaissent. Lorsque le texte intégral apparaît dans la zone de saisie, le mot « vous ! » apparaît dans la zone Étiquette.

Comme la valeur du contrôle Input est modifiée, le contrôle Label recalcule automatiquement la formule et affiche la nouvelle valeur. Il n’y a pas de gestionnaires d’événements OnChange ici, comme ce serait le cas dans d’autres langages.

Un autre exemple qui utilise une formule pour la couleur de l’écran Fill. Lorsque les curseurs qui contrôlent le rouge, le vert et le bleu sont modifiés, la couleur d’arrière-plan change automatiquement à mesure qu’elle est recalculée.

Curseur des couleurs.

Il n’y a pas d’événements OnChange pour les contrôles de curseur comme cela serait le cas dans d’autres langages. Il n’y a aucun moyen de définir explicitement la valeur de propriété Fill. Si la couleur ne fonctionne pas comme prévu, vous devez examiner cette formule unique pour comprendre pourquoi elle ne fonctionne pas. Vous n’avez pas besoin de rechercher dans l’application pour trouver un morceau de code qui définit la propriété à un moment inattendu ; il n’y a pas d’élément temporel. Les valeurs de formule correctes sont toujours conservées.

Lorsque les curseurs sont définis sur une couleur sombre, les étiquettes du rouge, du vert et du bleu deviennent blanches pour compenser. Cela se fait grâce à une formule simple sur la propriété Color pour chaque contrôle d’étiquette.

Curseurs de couleur Power Fx.

Ce qui est génial, c’est qu’il est isolé de ce qui se passe pour la couleur Fill : ce sont deux calculs entièrement différents. Au lieu de grandes procédures monolithiques, la logique Power Fx est généralement composée de nombreuses formules plus petites indépendantes. Cela les rend plus faciles à comprendre et permet des améliorations sans perturber la logique existante.

Power Fx est un langage déclaratif, tout comme Excel. Le créateur définit le comportement qu’il souhaite, mais c’est au système de déterminer et d’optimiser comment et quand l’accomplir. Pour rendre cela pratique, la plupart des travaux sont effectués via des fonctions pures sans effets secondaires, ce qui fait également de Power Fx un langage fonctionnel (à nouveau tout comme Excel).

Toujours actif

Un aspect déterminant des feuilles de calcul est qu’elles sont toujours actives et que les modifications sont reflétées instantanément. Il n’y a pas de mode de compilation ou d’exécution dans une feuille de calcul. Lorsqu’une formule est modifiée ou qu’une valeur est saisie, la feuille de calcul est immédiatement recalculée pour refléter les modifications. Toutes les erreurs détectées sont immédiatement signalées et n’interfèrent pas avec le reste de la feuille de calcul.

La même chose est implémentée avec Power Fx. Un compilateur incrémentiel est utilisé pour maintenir en permanence le programme synchronisé avec les données sur lesquelles il fonctionne. Les modifications sont automatiquement propagées à travers le graphique du programme, affectant les résultats des calculs dépendants, ce qui peut influencer les propriétés des commandes telles que la couleur ou la position. Le compilateur incrémentiel fournit également une expérience d’édition de formule enrichie avec IntelliSense, de suggestions, de saisie semi-automatique et de vérification de type.

Dans l’animation ci-dessous, le numéro de commande est affiché dans un contrôle d’étiquette dépendant du contrôle de curseur, même s’il y a deux erreurs sur les étiquettes en dessous. L’application est très vivante et interactive. La première tentative de fixation de la formule en entrant .InvalidName entraîne une ligne rouge immédiate et une erreur affichée, comme il se doit, mais l’application continue de fonctionner.

Toujours actif.

Lorsque .Employee est saisi, le volet Data ajoute la table Employés, les métadonnées de cette table sont récupérées et des suggestions de colonnes sont immédiatement proposées. Nous venons de rencontrer une relation entre une table et une autre et le système a apporté les ajustements nécessaires aux références de l’application. La même chose se produit lors de l’ajout d’un fichier .Customer.

Après chaque modification, le curseur continue avec sa dernière valeur et toutes les variables conservent leur valeur. Tout au long, le numéro de commande a continué à être affiché dans l’étiquette supérieure, comme prévu. L’application a traité en direct des données réelles, tout le temps. Nous pouvons l’enregistrer, et ne plus nous en occuper , d’autres pourront l’ouvrir et l’utiliser comme Excel. Il n’y a pas d’étape de création, pas de compilation, il n’y a qu’une étape de publication pour déterminer quelle version de l’application est prête pour les utilisateurs.

Faible code

Power Fx décrit la logique métier dans des formules concises mais puissantes. La plus grande partie de la logique peut être réduite à une seule ligne pleine d’expressivité et de contrôle pour les besoins plus complexes. L’objectif est de réduire au minimum le nombre de concepts qu’un créateur doit comprendre ; idéalement au nombre de concepts que maîtriserait un utilisateur d’Excel.

Par exemple, pour rechercher le prénom d’un employé pour une commande, vous écrivez le Power Fx comme indiqué dans l’animation suivante. Au-delà des concepts Excel, le seul concept ajouté utilisé ici est la notation point "." pour explorer une structure de données, dans ce cas .Employee.'First Name'. L’animation montre le mappage entre les parties de la formule Power Fx et les concepts qui doivent être explicitement codés dans le JavaScript équivalent.

JavaScript à faible code.

Examinons plus en détail tout ce que Power Fx fait pour nous, et sa liberté d’optimisation parce que la formule était déclarative :

  • Asynchrone : toutes les opérations de données dans Power Fx sont asynchrones. Le créateur n’a pas besoin de le spécifier, ni de synchroniser les opérations une fois l’appel terminé. Le créateur n’a pas du tout besoin d’être conscient de ce concept, il n’a pas besoin de savoir ce qu’est une promesse ou une fonction lambda.

  • Local et distant : Power Fx utilise la même syntaxe et les mêmes fonctions pour les données locales en mémoire et connectent à distance une base de données ou un service. L’utilisateur n’a pas besoin de penser à cette distinction. Power Fx délègue automatiquement ce qu’il peut au serveur pour traiter les filtres et les tris plus efficacement.

  • Données relationnelles : Les commandes et les clients sont deux tables différentes, avec une relation plusieurs-à-un. La requête OData nécessite un « $expand » avec la connaissance de la clé étrangère, similaire à une commande « Join » en SQL. La formule n’a rien de tout cela. En fait, les clés de base de données sont un autre concept que le créateur n’a pas besoin de connaître. Le créateur peut utiliser une simple notation de point pour accéder au graphe des relations entier à partir d’un enregistrement.

  • Projection : Lors de l’écriture d’une requête, de nombreux développeurs écrivent select * from table qui renvoie toutes les colonnes de données. Power Fx analyse toutes les colonnes utilisées dans l’ensemble de l’application, même entre les dépendances de formule. La projection est automatiquement optimisée et, encore une fois, un créateur n’a pas besoin de savoir ce que signifie "projection".

  • Récupérez uniquement ce qui est nécessaire : Dans cet exemple, la fonction LookUp implique qu’un seul enregistrement doit être récupéré et c’est tout ce qui est retourné. Si plus d’enregistrements sont demandés en utilisant la fonction Filter, pour laquelle des milliers d’enregistrements pourraient être éligibles, une seule page de données est renvoyée à la fois, dans l’ordre de 100 enregistrements par page. L’utilisateur doit parcourir une galerie ou une table de données pour voir plus de données, et elles seront automatiquement importées pour lui. Le créateur peut raisonner sur de grands ensembles de données sans avoir à penser à limiter les demandes de données à des blocs gérables.

  • Fonctionne uniquement lorsque cela est nécessaire : Nous avons défini une formule pour la propriété Text du contrôle d’étiquette. Au fur et à mesure que la variable sélectionnée change, le LookUp est automatiquement recalculé et l’étiquette est mise à jour. Le créateur n’avait pas besoin d’écrire un gestionnaire OnChange pour la sélection, et n’avait pas besoin de se souvenir que cette étiquette en dépendait. Il s’agit d’une programmation déclarative comme mentionné précédemment. Le créateur a spécifié ce qu’il voulait avoir dans l’étiquette, pas comment ni quand elle devrait être récupérée. Si cette étiquette n’est pas visible car elle est sur un écran qui n’est pas visible, ou que la propriété Visible est fausse, nous pouvons différer ce calcul jusqu’à ce que l’étiquette soit visible et l’éliminer efficacement si cela se produit rarement.

  • Traduction de la syntaxe Excel : Excel est utilisé par de nombreux utilisateurs, dont la plupart savent que l’esperluette (&) est utilisée pour la concaténation de chaînes. JavaScript utilise un signe plus (+), et d’autres langues utilisent un point (.).

  • Noms d’affichage et localisation : First Name est utilisé dans la formule Power Fx tandis que nwind_firstname est utilisé dans l’équivalent JavaScript. Dans Microsoft Dataverse et SharePoint, il y a un nom complet pour les colonnes et les tables en plus d’un nom logique unique. Les noms d’affichage sont souvent beaucoup plus conviviaux, comme dans ce cas, mais ils ont une autre qualité importante en ce qu’ils peuvent être localisés. Si vous avez une équipe multilingue, chaque membre de l’équipe peut voir les noms des tables et des champs dans leur propre langue. Dans tous les cas d’utilisation, Power Fx s’assure que le nom logique correct est envoyé automatiquement à la base de données.

Sans code

Vous n’avez pas besoin de lire et d’écrire Power Fx pour commencer à exprimer la logique. De nombreuses personnalisations et logiques peuvent être exprimées par le biais de commutateurs et de générateurs d’interface utilisateur simples. Ces outils sans code ont été conçus pour lire et écrire avec Power Fx afin de garantir une marge de manœuvre suffisante pour que quelqu’un utilisateur puisse aller plus loin, tout en reconnaissant que les outils sans code n’offriront jamais toute l’expressivité du langage complet. Même en cas d’utilisation avec des générateurs sans code, la barre de formule est au premier plan dans Power Apps pour informer le créateur de ce qui est fait en son nom afin qu’il puisse commencer à apprendre Power Fx.

Jetons un coup d’œil à quelques exemples. Dans Power Apps, le volet des propriétés fournit des commutateurs et des boutons « sans code » pour les propriétés des contrôles. En pratique, la plupart des valeurs de propriété sont statiques. Vous pouvez utiliser le générateur de couleurs pour modifier la couleur d’arrière-plan de la Gallery. Notez que la barre de formule reflète ce changement, en mettant à jour la formule à un autre appel RGBA. À tout moment, vous pouvez accéder à la barre de formule et aller plus loin, dans cet exemple, en utilisant ColorFade pour ajuster la couleur. La propriété de couleur apparaît toujours dans le panneau des propriétés, mais une icône fx apparaît au survol et vous êtes dirigé.e vers la barre de formule. Cela fonctionne entièrement de deux manières : en supprimant l’appel ColorFade renvoie la couleur à quelque chose que le panneau des propriétés peut comprendre, et vous pouvez l’utiliser à nouveau pour définir une couleur.

Aucun code couleur.

Voici un exemple plus compliqué. La galerie affiche une liste d’employés de Dataverse. Dataverse fournit des vues des données de la table. Nous pouvons sélectionner l’une de ces vues et la formule est modifiée pour utiliser la fonction Filter avec ce nom de vue. Les deux menus déroulants peuvent être utilisés pour composer le bon tableau et afficher sans toucher la barre de formule. Mais disons que vous voulez aller plus loin et ajouter un tri. Nous pouvons le faire dans la barre de formule, et le volet des propriétés affiche à nouveau une icône fx et dirige les modifications vers la barre de formule. Encore une fois, si nous simplifions la formule en quelque chose que le volet des propriétés peut lire et écrire, elle peut à nouveau être utilisée.

Tri sans code.

Ce sont là des exemples simples. Nous pensons que Power Fx est un excellent langage pour décrire des interactions sans code. Il est concis, puissant et facile à analyser, et fournit la marge de manœuvre qui est si souvent nécessaire sans pour accéder sans effort aux applications à faible code.

Code professionnel

Les créateurs à faible code créent parfois des éléments qui nécessitent l’aide d’un expert ou qui sont repris par un développeur professionnel pour les maintenir et les améliorer. Les professionnels apprécient également que le développement à faible code puisse être plus facile, plus rapide et moins coûteux que la création d’un outil professionnel. Toutes les situations ne nécessitent pas la pleine puissance de Visual Studio.

Les professionnels veulent utiliser des outils professionnels pour être les plus productifs. Les formules Power Fx peuvent être stockées dans des fichiers source YAML, qui sont faciles à modifier avec Visual Studio Code, Visual Studio ou tout autre éditeur de texte et permettent à Power Fx d’être placé sous contrôle de code source avec GitHub, Azure DevOps ou tout autre système de contrôle de code source.

Code pro Visual Studio Code.

Code pro GitHub.

Power Fx prend en charge les composants basés sur des formules pour le partage et la réutilisation. Nous avons annoncé la prise en charge des paramètres des propriétés des composants, permettant la création de fonctions définies par l’utilisateur pures avec d’autres améliorations en cours de route.

En outre, Power Fx est excellent pour assembler des composants et des services conçus par des professionnels. Les connecteurs prêts à l’emploi permettent d’accéder à des centaines de sources de données et de services web. Les connecteurs personnalisés permettent à Power Fx de communiquer avec n’importe quel service web REST et les composants de code permettent à Power Fx d’interagir avec du JavaScript entièrement personnalisé à l’écran et sur la page.

Principes de conception

Simplicité

Power Fx est conçu pour cibler l’audience du créateur, dont les membres n’ont pas été formés en tant que développeurs. Dans la mesure du possible, nous nous appuyons sur les connaissances préalables de ce public, ou sur les connaissances qu’il peut acquérir rapidement. Le nombre de concepts requis pour réussir est réduit au minimum.

La simplicité est également bénéfique pour les développeurs. Pour le public des développeurs, nous cherchons à être un langage à faible code qui réduit le temps nécessaire à la construction d’une solution.

Cohérence avec Excel

Le langage Microsoft Power Fx emprunte beaucoup au langage de formule Excel. Nous cherchons à tirer parti des connaissances et de l’expérience d’Excel des nombreux créateurs qui utilisent également Excel. Les types, les opérateurs et la sémantique des fonctions sont aussi proches de ceux d’Excel que possible.

Si Excel n’a pas de réponse, nous nous tournons ensuite vers SQL. Après Excel, SQL est le prochain langage déclaratif le plus couramment utilisé et peut fournir des conseils sur les opérations de données et la frappe forte qu’Excel ne fait pas.

Déclaratif

Le créateur décrit ce qu’il veut que sa logique fasse, pas exactement comment ou alors quand le faire. Cela permet au compilateur d’optimiser en effectuant des opérations en parallèle, en différant le travail jusqu’à ce qu’il soit nécessaire, et en pré-extrayant et réutilisant les données mises en cache.

Par exemple, dans une feuille de calcul Excel, l’auteur définit les relations parmi les cellules, mais Excel décide quand et dans quel ordre les formules sont évaluées. De même, les formules d’une application peuvent être considérées comme un "recalcul" selon les besoins en fonction des actions de l’utilisateur, des modifications de la base de données ou des événements du minuteur.

Fonctionnel

Nous privilégions les fonctions pures qui n’ont pas d’effets secondaires. Cela se traduit par une logique plus facile à comprendre et donne au compilateur la plus grande liberté d’optimisation.

Contrairement à Excel, les applications de par leur nature mutent l’état, par exemple, les applications ont des boutons qui enregistrent les modifications apportées à l’enregistrement dans une base de données. Certaines fonctions ont donc des effets secondaires, bien que nous les limitions autant que possible.

Composition

Dans la mesure du possible, la fonctionnalité ajoutée s’harmonise bien avec les fonctionnalités existantes. Les fonctions puissantes peuvent être décomposées en composants plus petits qui peuvent être plus facilement utilisés indépendamment.

Par exemple, un contrôle Galerie n’a pas séparé les propriétés Sort et Filter. Au lieu de cela, les fonctions Sort et Filter sont composées ensemble en une seule propriété Items. L’interface utilisateur pour exprimer le comportement Sort et Filter est superposé à la propriété Items en utilisant un éditeur bidirectionnel pour cette propriété.

Typage fort

Les types de toutes les valeurs sont connus au moment de la compilation. Cela permet la détection précoce des erreurs et des suggestions riches lors de la création.

Les types polymorphes sont pris en charge, mais avant de pouvoir être utilisés, leur type doit être épinglé à un type statique et ce type doit être connu au moment de la compilation. Les fonctions IsType et AsType sont fournies pour le test et la conversion des types.

Inférence de type

Les types sont dérivés de leur utilisation sans être déclarés. Par exemple, si vous définissez une variable sur un nombre, le type de la variable est défini sous forme de nombre.

L’utilisation de types en conflit entraîne une erreur à la compilation.

Séparateurs décimaux sensibles aux paramètres régionaux

Certaines régions utilisent le point (.) comme séparateur décimal, contrairement à d’autres qui utilisent une virgule (,). C’est ce que fait aussi Excel. Cela n’est généralement pas fait dans d’autres langages de programmation, qui utilisent généralement un point canonique (.) comme séparateur décimal pour tous les utilisateurs du monde entier. Pour être aussi accessible que possible pour les créateurs à tous les niveaux, il est important que 3,14 soit un nombre décimal pour une personne en France qui a utilisé cette syntaxe toute sa vie.

Le choix du séparateur décimal a des répercussions en cascade sur le séparateur de liste, utilisé pour les arguments d’appel de fonction, et sur l’opérateur de chaînage.

Séparateur décimal de la langue de l’auteur Séparateur décimal Power Fx Séparateur de liste Power Fx Opérateur de chaînage Power Fx
. (point) . (point) , (virgule) ; (point-virgule)
, (virgule) , (virgule) ; (point-virgule) ;; (double point-virgule)

Plus d’informations : Assistance globale

Non orienté objet

Excel n’est pas orienté objet, pas plus que Power Fx. Par exemple, dans certaines langues, la longueur d’une chaîne est exprimée en tant que propriété de la chaîne, comme "Hello World".length en JavaScript. Excel et Power Fx expriment au contraire cela en termes de fonction, sous la forme Len( "Hello World" ).

Les composants avec des propriétés et des méthodes sont orientés objet et Power Fx fonctionne facilement avec. Mais lorsque cela est possible, nous préférons une approche fonctionnelle.

Extensibilité

Les créateurs peuvent créer leurs composants et leurs fonctions en utilisant Power Fx lui-même. Les développeurs peuvent créer leurs composants et leurs fonctions en écrivant du JavaScript.

Convivialité pour les développeurs

Bien que les créateurs soient notre principale cible, nous essayons de nous adapter aussi aux développeurs. Si cela n’entre pas en conflit avec les principes de conception décrits précédemment, nous faisons les choses d’une manière que le développeur appréciera. Par exemple, Excel n’a pas de capacité pour ajouter des commentaires, nous utilisons donc une ligne de type C et des commentaires en ligne.

Évolution du langage

L’évolution des langages de programmation est à la fois nécessaire et délicate. Tout le monde, à juste titre, se préoccupe du fait qu’un changement, aussi bien intentionné soit-il, puisse briser le code existant et obliger les utilisateurs à apprendre un nouveau modèle. Power Fx prend la rétrocompatibilité au sérieux, mais nous sommes également convaincus que nous ne réussirons pas toujours du premier coup et nous apprendrons collectivement ce qui est le mieux en tant que communauté. Nous devons évoluer et Power Fx est conçu dès le départ pour permettre l’évolution du langage.

Un horodatage de version du langage est inclus avec chaque document Power Fx enregistré. Si nous voulons faire un changement incompatible, nous écrirons ce que nous appelons un « convertisseur de rétrocompatibilité » qui réécrit la formule automatiquement la prochaine fois qu’elle est éditée. Si le changement est quelque chose de majeur sur lequel nous devons éduquer l’utilisateur, nous afficherons également un message avec un lien vers les documents. En utilisant cette fonctionnalité, nous pouvons toujours charger des applications qui ont été créées avec les versions préliminaires de Power Apps d’il y a plusieurs années, malgré tous les changements survenus depuis.

Par exemple, nous avons introduit la fonction ShowError pour afficher une bannière d’erreur sur fond rouge.

Affichez l’erreur.

Les utilisateurs ont adoré, mais ils nous ont également demandé un moyen d’afficher une bannière de succès (fond vert) ou une bannière d’information (fond bleu). Nous avons donc proposé une fonction Notify plus générique qui prend un deuxième argument pour le type de notification. Nous aurions pu simplement ajouter Notify et gardé ShowError comme c’était le cas, mais à la place, nous avons remplacé ShowError par Notify. Nous avons supprimé une fonction qui était auparavant en production et l’avons remplacée par autre chose. Parce qu’il y aurait eu deux façons de faire la même chose, cela aurait semé la confusion, surtout pour les nouveaux utilisateurs, et surtout, cela aurait ajouté de la complexité. Personne ne s’est plaint, tout le monde a apprécié le changement et a adopté la nouvelle fonctionnalité Notify.

Voici à quoi ressemble la même application lorsqu’elle est chargée dans la dernière version de Power Apps. Aucune action n’a été requise de la part de l’utilisateur pour que cette transformation se produise, elle s’est produite automatiquement lors de l’ouverture de l’application.

La fonction de notification remplace ShowError.

Avec cette fonctionnalité, Power Fx peut évoluer plus rapidement et de manière plus agressive que la plupart des langages de programmation.

Aucune valeur non définie

Certains langages, tels que JavaScript, utilisent le concept d’une valeur indéfinie pour les variables non initialisées ou les propriétés manquantes. Par souci de simplicité, nous avons évité ce concept. Les instances qui ne seraient pas définies dans d’autres langues sont traitées comme une erreur ou comme une valeur vide. Par exemple, toutes les variables non initialisées commencent par une valeur vide. Tous les types de données peuvent prendre la valeur vierge.

Types de données
Opérateurs et identificateurs
Tables
Variables
Logique impérative
Support global
Grammaire des expressions
Grammaire des formules YAML
Formules dans les applications canevas