Si vous avez déjà utilisé un autre outil de programmation, tel que Visual Basic ou JavaScript, vous vous demanderez peut-être : Où sont les variables ? PowerApps est un peu différent et requiert une autre approche. Au lieu de chercher une variable, demandez-vous : Que ferais-je dans Excel ?

Dans d’autres outils, vous auriez peut-être explicitement effectué un calcul et stocké le résultat dans une variable. Cependant, PowerApps et Excel recalculent automatiquement les formules lorsque les données saisies sont modifiées. Ainsi, vous n’avez donc généralement pas besoin de créer ni de mettre à jour des variables. En adoptant cette approche lorsque cela est possible, vous facilitez la création, la compréhension et la gestion de votre application.

Dans certains cas, vous devrez utiliser des variables dans PowerApps, qui étend le modèle d’Excel en ajoutant des formules de comportement. Ces formules sont exécutées lorsque, par exemple, un utilisateur sélectionne un bouton. Dans une formule de comportement, il est souvent utile de définir une variable à utiliser dans d’autres formules.

De manière générale, évitez d’utiliser des variables. Toutefois, dans certains cas, seule une variable vous permet d’obtenir l’expérience que vous souhaitez.

Convertir Excel dans PowerApps

Excel

Examinons le fonctionnement d’Excel. Une cellule peut contenir une valeur, comme un nombre ou une chaîne, ou une formule basée sur les valeurs d’autres cellules. Lorsque l’utilisateur entre une valeur différente dans une cellule, Excel recalcule automatiquement les formules qui dépendent de la nouvelle valeur. Vous n’avez aucune programmation à effectuer pour activer ce comportement.

Excel ne possède pas de variables. La valeur d’une cellule qui contient une formule change en fonction de son contenu, mais il n’existe aucun moyen de mémoriser le résultat d’une formule et de le stocker dans une cellule ou n’importe où ailleurs. Si vous modifiez la valeur d’une cellule, l’ensemble de la feuille de calcul peut être modifié et toutes les valeurs précédemment calculées sont perdues. Un utilisateur Excel peut copier et coller des cellules, mais cette opération dépend du contrôle manuel de l’utilisateur et n’est pas possible avec des formules.

PowerApps

Les applications que vous créez dans PowerApps ont un comportement très proche d’Excel. Au lieu de mettre à jour des cellules, vous pouvez ajouter des contrôles où vous le souhaitez sur un écran et les nommer pour les utiliser dans des formules.

Par exemple, vous pouvez répliquer le comportement d’Excel dans une application en ajoutant un contrôle Label nommé TextBox1 et deux contrôles Text input nommés TextInput1 et TextInput2. Si vous définissez ensuite la propriété Text de TextBox1 sur TextInput1 + TextInput2, elle affichera toujours automatiquement la somme des nombres qui se trouvent dans TextInput1 et TextInput2.

Notez que le contrôle TextBox1 est sélectionné, ce qui affiche sa formule Text dans la barre de formule en haut de l’écran. Ici, nous trouvons la formule TextInput1 + TextInput2. Cette formule crée une dépendance entre ces contrôles, au même titre que les dépendances créées entre les cellules dans un classeur Excel. Nous allons maintenant changer la valeur de TextInput1 :

La formule de TextBox1 a été automatiquement recalculée et affiche la nouvelle valeur.

Dans PowerApps, vous pouvez utiliser des formules pour déterminer non seulement la valeur principale d’un contrôle, mais également des propriétés telles que la mise en forme. Dans l’exemple suivant, une formule pour la propriété Color de l’étiquette affiche automatiquement les valeurs négatives en rouge. La fonction If est très proche de celle d’Excel :
If( Value(TextBox1.Text) < 0, Red, Black )

Désormais, si le résultat de notre calcul dans TextBox1.Text est négatif, le nombre s’affichera en rouge :

Vous pouvez utiliser des formules pour un vaste éventail de scénarios :

  • En utilisant le GPS de votre appareil, un contrôle de carte peut afficher votre emplacement actuel à l’aide d’une formule qui utilise les données Location.Latitude et Location.Longitude. À mesure que vous vous déplacez, la carte géolocalisera automatiquement votre position.
  • Les autres utilisateurs peuvent mettre à jour les sources de données. Par exemple, d’autres personnes de votre équipe peuvent mettre à jour des éléments d’une liste SharePoint. Lorsque vous actualisez une source de données, toutes les formules dépendantes sont automatiquement recalculées afin de refléter les données mises à jour. En poursuivant cet exemple, vous pouvez définir la propriété Items d’une galerie sur la formule Filter( SharePointList ), qui affiche automatiquement le nouvel ensemble d’enregistrements filtré.

Avantages

L’utilisation de formules pour créer des applications présente de nombreux avantages :

  • Si vous connaissez Excel, vous connaissez PowerApps. Le modèle et le langage des formules sont identiques.
  • Si vous avez déjà utilisé d’autres outils de programmation, imaginez la quantité de code qui serait nécessaire pour exécuter ces exemples. Dans Visual Basic, vous devriez écrire un gestionnaire d’événements pour l’événement de modification sur chaque contrôle d’entrée de texte. Le code permettant d’effectuer le calcul dans chacune d’elles est redondant et pourrait être désynchronisé, ou vous devriez écrire une sous-routine commune. Dans PowerApps, vous avez accompli tout cela avec une formule unique sur une seule ligne.
  • Pour comprendre d’où provient le texte de TextBox1, vous savez exactement où chercher : la formule de la propriété Text. Il n’existe aucun autre moyen d’affecter le texte de ce contrôle. Dans un outil de programmation traditionnel, tout gestionnaire d’événements ou toute sous-routine peut modifier la valeur du libellé, à partir de n’importe où dans le programme. Cela peut rendre difficile le repérage du moment et de l’endroit auxquels la variable a été modifiée.
  • Si l’utilisateur modifie un contrôle de curseur, puis change d’avis, il peut rétablir le curseur sur sa valeur d’origine. C’est comme si rien n’avait changé : l’application affiche les mêmes valeurs de contrôle qu’auparavant. Il n’existe aucune ramification permettant de tester et de demander « que se passe-t-il si », tout comme dans Excel.

De manière générale, il est préférable d’obtenir un effet à l’aide d’une formule. Reposez-vous sur le moteur de formules de PowerApps.

Savoir quand utiliser des variables

Modifions notre additionneur simple pour qu’il se comporte comme une machine à additionner traditionnelle, avec un total cumulé. Si vous sélectionnez le bouton Ajouter, vous ajoutez un nombre au total cumulé. Si vous sélectionnez le bouton Effacer, vous réinitialisez le total cumulé sur zéro.

Notre machine à additionner utilise un élément qui n’existe pas dans Excel : un bouton. Dans cette application, vous ne pouvez pas utiliser uniquement des formules pour calculer le total cumulé, car sa valeur dépend d’une série d’actions effectuées par l’utilisateur. Au lieu de cela, notre total cumulé doit être enregistré et mis à jour manuellement. La plupart des outils de programmation stockent ces informations dans une variable.

Vous avez parfois besoin d’une variable pour que votre application se comporte comme vous le souhaitez. Cependant, cette approche implique des mises en garde :

  • Vous devez mettre à jour manuellement le total cumulé. Le recalcul automatique ne sera pas effectué automatiquement.
  • Le total cumulé ne peut plus être calculé en fonction des valeurs d’autres contrôles. Il dépend du nombre de fois que l’utilisateur a sélectionné le bouton Ajouter et de la valeur qui était dans le contrôle de saisie de texte à chaque fois. L’utilisateur a-t-il entré 77 et sélectionné Ajouter à deux reprises, ou a-t-il spécifié 24 et 130 pour chacun des ajouts ? Vous ne pouvez pas faire la différence lorsque le total atteint 154.
  • Les modifications apportées au total peuvent provenir de différentes sources. Dans cet exemple, les boutons Ajouter et Effacer peuvent mettre à jour le total. Si l’application ne se comporte pas comme prévu, quel bouton provoque le problème ?

Créer une variable de contexte

Pour créer notre machine à additionner, nous avons besoin d’une variable qui contienne le total cumulé. Les variables les plus simples dans PowerApps sont les variables de contexte.

Fonctionnement des variables de contexte :

  • Vous pouvez créer et définir des variables de contexte à l’aide de la fonction UpdateContext. Si une variable de contexte n’existe pas déjà lors de la première mise à jour, elle sera créée avec une valeur par défaut vide.
  • Vous pouvez créer et mettre à jour des variables de contexte avec des enregistrements. Dans d’autres outils de programmation, vous utilisez couramment « = » pour l’affectation, comme dans « x = 1 ». Pour les variables de contexte, utilisez {x: 1} à la place. Lorsque vous utilisez une variable de contexte, utilisez directement son nom.
  • Vous pouvez également définir une variable de contexte lorsqu’un écran s’affiche à l’aide de la fonction Navigate. Si vous considérez un écran comme une sorte de procédure ou de sous-routine, cette opération est semblable à la transmission de paramètres dans d’autres outils de programmation.
  • À l’exception de Navigate, les variables de contexte sont limitées au contexte d’un seul écran, d’où elles tirent leur nom. Vous ne pouvez pas les utiliser ni les définir en dehors de ce contexte.
  • Les variables de contexte peuvent contenir n’importe quelle valeur, y compris des chaînes, des nombres, des enregistrements et des tableaux.
  • Lorsque l’utilisateur ferme une application, toutes ses variables de contexte sont perdues.

Recréons notre machine à additionner à l’aide d’une variable de contexte :

  1. Ajoutez un contrôle Text input nommé TextInput1 et deux boutons, nommés Button1 et Button2.

  2. Définissez la propriété Text de Button1 sur « Ajouter » et la propriété Text de Button2 sur « Effacer ».

  3. Pour mettre à jour le total cumulé chaque fois qu’un utilisateur sélectionne le bouton Ajouter, définissez sa propriété OnSelect sur la formule suivante :
    UpdateContext( { RunningTotal: RunningTotal + Text1 } ).

    La première fois qu’un utilisateur sélectionne le bouton Ajouter et que la fonction UpdateContext est appelée, RunningTotal est créé avec une valeur par défaut vide. Dans le cadre de l’addition, elle est considérée comme un zéro.

  4. Pour définir le total cumulé sur 0 chaque fois que l’utilisateur sélectionne le bouton Effacer, définissez sa propriété OnSelect sur la formule suivante :
    UpdateContext( { RunningTotal: 0 } )

    Là encore, UpdateContext est utilisé avec la formule UpdateContext( { RunningTotal: 0 } ).

  5. Ajoutez un contrôle Label et définissez sa propriété Text sur RunningTotal.

    Cette formule est recalculée automatiquement et permet à l’utilisateur de consulter la valeur de RunningTotal à mesure qu’elle est modifiée selon les boutons sélectionnés par l’utilisateur.

  6. Affichez un aperçu de l’application : vous obtenez la machine à additionner, telle que décrite ci-dessus.

Créer une collection

Pour faire référence à une variable à partir de n’importe quel écran (pas uniquement celui sur lequel elle a été créée), utilisez une collection contenant une variable globale.

Fonctionnement des collections :

  • Créez et définissez des collections à l’aide de la fonction ClearCollect. Vous pouvez également utiliser la fonction Collect, mais elle nécessitera une autre variable au lieu de remplacer l’ancienne.
  • Une collection est une source de données et, par conséquent, une table. Pour accéder à une valeur unique dans une collection, utilisez la fonction First et extrayez un champ de l’enregistrement qui en résulte. Si vous avez utilisé une valeur unique avec ClearCollect, il s’agira du champ Valeur, comme dans cet exemple :
    First( VariableName ).Value
  • Une formule peut accéder à une collection à partir de n’importe quel écran de l’application.
  • Lorsqu’un utilisateur ferme une application, toutes ses collections sont vidées.

Recréons notre machine à additionner à l’aide d’une collection :

  1. Ajoutez un contrôle Text input nommé TextInput1 et deux boutons, nommés Button1 et Button2.

  2. Définissez la propriété Text de Button1 sur « Ajouter » et la propriété Text de Button2 sur « Effacer ».

  3. Pour mettre à jour le total cumulé chaque fois qu’un utilisateur sélectionne le bouton Ajouter, définissez sa propriété OnSelect sur la formule suivante :
    ClearCollect( RunningTotal, First( RunningTotal ).Value + TextInput1 )

    En utilisant ClearCollect avec une valeur unique, un enregistrement sera créé dans la collection avec un seul champ Valeur. La première fois que l’utilisateur sélectionne le bouton Ajouter et que ClearCollect est appelée, RunningTotal sera vide. Lors de l’addition, First renverra une valeur vide qui sera considérée comme un zéro.

  4. Pour définir le total cumulé sur 0 chaque fois qu’un utilisateur sélectionne le bouton Effacer, définissez sa propriété OnSelect sur la formule suivante :
    ClearCollect( RunningTotal, 0 )

    Là encore, ClearCollect est utilisé avec la formule ClearCollect( RunningTotal, 0 ).

  5. Pour afficher le total cumulé, ajoutez une étiquette et définissez sa propriété Text sur la formule suivante :
    First(RunningTotal).Value

    Cette formule extrait le champ Valeur du premier enregistrement de la collection RunningTotal. L’étiquette affiche automatiquement la valeur de RunningTotal à mesure qu’elle change en fonction des boutons sélectionnés par l’utilisateur.

  6. Pour exécuter la machine à additionner, appuyez sur F5 pour ouvrir l’aperçu, entrez des nombres dans le contrôle d’entrée de texte, puis sélectionnez des boutons.

  7. Pour revenir à l’espace de travail par défaut, appuyez sur Echap.

  8. Pour afficher les valeurs dans votre collection, sélectionnez Collections dans le menu Fichier.