Exercice : écrire dans la table Expense Report

Effectué

Maintenant que vos données sont configurées, vous devez être en mesure d’écrire dans deux tables de données. Vous allez d’abord écrire des données dans la table parente, à savoir la table Expense Report. Par ailleurs, votre application nécessite non seulement d’écrire de nouveaux enregistrements, mais aussi de modifier des brouillons existants et d’afficher les informations des notes de frais déjà envoyées. Vous devez par conséquent indiquer aux champs l’enregistrement en cours de modification ou d’affichage. Vous devez également leur spécifier s’il faut créer un enregistrement. Pour effectuer ces tâches, vous avez besoin de quelques variables.

Utiliser des variables pour contrôler le flux de données

Pour utiliser des variables afin de contrôler le flux de données, procédez comme suit :

  1. Dans l’Arborescence, sélectionnez Scr_Welcome.

  2. Sélectionnez le bouton Btn_NewExpense_Welcome et ajoutez au code de la propriété OnSelect. Pour vous assurer que les fonctions s’exécutent simultanément, vous devez les séparer par un point-virgule. Ainsi, après la fonction Navigate(), ajoutez ; Set(VarExpenseMode, "New").

    La propriété OnSelect devrait maintenant indiquer : Navigate(Scr_EditExpense); Set(VarExpenseMode, "New")

    Outre la navigation dans les écrans comme auparavant, vous allez maintenant créer une variable pour indiquer qu’un enregistrement doit être ajouté.

    Ensuite, nous allons faire de même sur Scr_AllExpenses.

  3. Accédez à votre écran Scr_AllExpenses et cliquez sur le contrôle NextArrow dans Gal_ExpenseReports_AllExpenses.

  4. Redéfinissez la propriété OnSelect sur le code suivant : Set(VarExpenseMode, "Edit"); Set(VarExpense, ThisItem); Navigate(Scr_EditExpense)

    La propriété OnSelect devrait ressembler à la capture d’écran suivante :

    Capture d’écran de Power Apps illustrant le code OnSelect pour la flèche Suivant.

    Cette fois, vous allez définir une variable indiquant de modifier un enregistrement existant. Vous allez également définir une variable pour indiquer l’enregistrement à modifier. Ensuite, vous allez accéder à l’écran Scr_EditExpense.

  5. Accédons à l’écran Scr_EditExpense pour observer ces variables à l’œuvre. Dans le volet Arborescence, sélectionnez Scr_EditExpense.

  6. Définissez la propriété OnVisible de Scr_EditExpense sur If(VarExpenseMode="New", Set(VarExpense, Blank())).

    Ce paramètre garantit que les champs ne comportent pas de données d’un enregistrement précédent. Vous pouvez également utiliser le bouton sur votre écran de bienvenue, mais le but de l’apprentissage est de découvrir différentes méthodes. Vous remarquerez peut-être que l’instruction If n’a qu’une valeur True. Dans un tel cas, si nous définissons uniquement une valeur True et que la condition est False, rien ne se passe.

    Avec les variables en place, vous pouvez référencer les données existantes, puis les effacer.

  7. Sélectionnez le champ de saisie sous Trip Destination. Il doit s’agir de votre champ de saisie de texte Txt_Destination_EditExpense. Définissez la propriété Default sur VarExpense.'Trip Destination'.

    Testons cette variable. Revenez à l’écran Scr_AllExpenses.

  8. Sur l’écran Scr_AllExpenses, passez l’application en mode Aperçu et cliquez sur la flèche Suivant pour un enregistrement existant. Une destination devrait s’afficher sur Scr_EditExpense lorsque vous naviguez à partir de l’écran Scr_AllExpenses.

  9. Sur l’écran Scr_EditExpense, sélectionnez le champ de sélecteur de date à droite de « Departure Date ». Redéfinissez la propriété DefaultDate pour Dte_Departure_EditExpense sur VarExpense.'Departure Date'.

  10. Sélectionnez le sélecteur de date pour votre date d’arrivée. Redéfinissez la propriété DefaultDate pour Dte_Arrival_EditExpense sur VarExpense.'Arrival Date'.

N’oubliez pas que si vous rencontrez des difficultés pour trouver une propriété pour un contrôle, vous pouvez toujours rechercher toutes les propriétés dans la barre d’outils, dans le menu déroulant Propriétés ou dans le volet Propriétés sur le côté droit de l’écran.

Une fois ces propriétés définies, les dates devraient se comporter exactement comme le champ de destination. Revenez à votre écran Scr_AllExpenses et passez l’application en mode Aperçu pour tester son fonctionnement jusqu’à présent.

Maintenant que votre application fonctionne bien, il est temps de commencer à configurer la logique de l’application pour réécrire les données de l’application dans vos tables.

Configurer la logique de l’application

Dans ce scénario, comme dans de nombreux scénarios réels, les utilisateurs auront besoin de la fonctionnalité pour ajouter de nouveaux éléments et modifier les éléments existants. De plus, vous souhaiterez inclure la fonctionnalité permettant aux utilisateurs d’enregistrer en tant que brouillon. Cette fonctionnalité leur permet de travailler sur un élément pendant plusieurs jours ou sessions avant de le soumettre pour approbation.

Sur l’écran Scr_EditExpense, sélectionnez Btn_SaveAsDraft_EditExpense et redéfinissez la propriété OnSelect comme suit :

Set(
VarExpense,
Patch(
   'Expense Reports',
   If(
      VarExpenseMode = "New",
      Defaults('Expense Reports'),
      VarExpense
   ),
   {
      'Trip Destination': Txt_Destination_EditExpense.Text,
      'Departure Date': Dte_Departure_EditExpense.SelectedDate,
      'Arrival Date': Dte_Arrival_EditExpense.SelectedDate,
      'Report Status': ['Report Status'.Draft],
      Traveler: LookUp(
            Users,
            'Primary Email' = VarUser.Email
      )
   }
)
)

Explication de la fonction Patch

Ce code est la partie la plus complexe que vous ayez réalisée jusqu’à présent dans ce parcours d’apprentissage. Pour vous aider à mieux comprendre ce que fait ce code, décomposons-le.

Votre première tâche consiste à utiliser la fonction Set(). Cette fonction définit VarExpense pour inclure toutes les modifications que vous apportez, y compris le nouvel identificateur unique si un élément est créé.

La fonction Patch() vous permet d’écrire dans une source de données en définissant :

  • La source : « Expense Reports »
  • Le dossier à modifier - If(VarExpenseMode="New",Defaults('Expense Reports'),VarExpense)
  • Ce qu’il faut écrire - {'Trip Destination':Txt_Destination_EditExpense.Text,'Departure Date':Dte_Departure_EditExpense.SelectedDate,'Arrival Date':Dte_Arrival_EditExpense.SelectedDate,'Report Status':['Report Status'.Draft],Traveler:LookUp(Users,'Primary Email'=VarUser.Email)}

L’enregistrement à écrire est encapsulé dans une instruction If() qui examine la variable VarExpenseMode. Si l’élément est Nouveau, vous devez utiliser Defaults('Expense Reports'). Cependant, si l’enregistrement existe déjà dans votre table, VarExpenses vous permet de mettre à jour l’élément existant, étant donné qu’il comporte toutes les informations dont Microsoft Dataverse a besoin pour comprendre quel enregistrement est modifié ou mis à jour.

Les informations sur les éléments peuvent être compliquées, et c’est là une raison importante de changer les noms de vos contrôles afin qu’ils suivent une logique. Les champs de texte et de date, tels que Trip Destination et Departure Date, sont assez simples à écrire. Vous devez référencer le contrôle dans lequel les informations sont saisies, puis explorer ce contrôle pour trouver les informations exactes, telles que ’Text’ pour une saisie de texte ou ’SelectedDate’ pour un sélecteur de date.

Les deux derniers champs sont plus compliqués. Report Status est un champ de choix, tandis que Traveler est une recherche dans la table Utilisateur. Nous les aborderons un peu plus en détail ci-dessous.

Explication des champs de choix

Les champs de choix dans Dataverse nécessitent une table ou un groupe d’options de données, ce qui signifie simplement que vous devez ajouter des crochets [ ] autour des valeurs. À l’intérieur des crochets, vous saisissez à nouveau le nom du champ, suivi d’un point, pour extraire les choix possibles.

Pour voir ce que nous voulons dire, accédez à la propriété OnSelect de votre bouton Btn_SaveAsDraft_EditExpense.

Là où votre code correspond à 'Report Status': [Draft], cliquez à l’intérieur de ces crochets. Notez que le code se développe pour afficher « ['Report Status'.Draft] ».

Supprimez maintenant « Draft » du code. Power Apps affiche des erreurs dans votre formule, car elle attend une valeur sélectionnée, au lieu de l’intégralité de l’ensemble/la table de valeurs. Nous devons donc lui donner une valeur spécifique parmi les options disponibles.

Avec votre code affichant ['Report Status'.], vous devriez voir quelques suggestions sous le champ de saisie de formule fx pour certaines sélections possibles, notamment les suivantes :

  • 'Awaiting Approval'

  • 'Awaiting Reimbursement'

  • Complete

  • Draft

Voici les choix disponibles pour ce champ. Ainsi, en ajoutant un point et « Draft » au code, vous indiquez précisément à Power Apps la valeur à saisir dans le champ Dataverse. Plus précisément, Draft devient l’entrée en tant que valeur pour 'Report Status'.

Explication des champs de recherche

Pour le champ Traveler, vous allez rechercher l’utilisateur connecté dans la table Utilisateurs à l’aide d’une fonction LookUp(). La fonction LookUp() utilise la source de données Utilisateurs pour rechercher le premier enregistrement de cette table qui correspond à la condition 'Primary Email' = VarUser.Email. C’est pourquoi il est important d’utiliser un champ qui sera unique, comme le champ E-mail.

À mesure que vous progressez dans ce module, prenez votre temps. Si nécessaire, essayez de décomposer le code en fragments plus petits. Cette approche facilitera votre apprentissage et vous aidera à devenir au final un meilleur développeur d’applications Power Apps.

Capture d’écran de Power Apps montrant le code derrière le bouton Enregistrer en tant que brouillon.

Félicitations ! La fonctionnalité Enregistrer en tant que brouillon est terminée.