Enregistrement Application dans "Lists

Étiquetté : , ,

  • Enregistrement Application dans "Lists

    Posté par Julien sur 7 mars 2023 à 10h51

    Bonjour,

    Quel soulagement de trouver un forum en Français sur PowerApps.

    Aussi, j’essaie de vous exposer ma problématique:

    J’ai créer une application qui permet de recenser des personnes et de leur associer une ville de déplacement ainsi que des dates de déplacement.

    Aujourd’hui lorsque je modifie une personne, je peux changer le nom, le prénom, les lieux et les dates. c’est parfait !

    Cependant en cliquant sur valider => Sur le bouton et “OnSelect = SubmitForm(EditForm1)

    Ça m’enregistre bien cette modification dans mon fichier source sur sharepoint Lists comme suit :

    Maintenant ca efface les données existantes de ce fait je n’ai plus les informations d’avant (Dates et lieux de déplacement) que je souhaiterai garder pour avoir une vision dans PowerBi.

    Ma question est la suivante:

    Comment, après avoir valider le formulaire modifié je peux :

    Garder en mémoire dans mon sharepoint Lists les informations (Dates et lieux) d’avant et enregistrer sur une personne et ajouter en plus des colonnes pour enregistrer les dates et lieux pour tel ou tel personne ?

    En vous remerciant par avance …. car la j’ai la tete qui fume

    JE précise que je suis novice…

    Très belle journée à tous 🙂

    PostID=8UTe1NnTtc7tfN3

    R3dKap a répondu Il y a 2 mois, 3 semaines 1 Membre · 7 Réponses
  • 7 Réponses
  • R3dKap

    Membre
    7 mars 2023 à 11h24

    Salut Julien,

    Content que le forum te plaise… 😉

    Alors en fait, il faut jouer avec la propriété DefaultMode du formulaire. Celui-ci permet de préciser si le SubmitForm() va créer une nouvelle ligne (FormMode.New) dans ta liste SharePoint ou en modifier une existante (FormMode.Edit). Dans le cas de la modification, il faut alors renseigner la propriété Item du formulaire pour lui préciser la ligne concernée, par exemple avec quelque chose comme : LookUp(TaListe; ID = Gallery1.Selected.ID) si tu as par exemple une galerie qui affiche les lignes de ta liste. Note : cette propriété Item est ignorée lorsque la propriété DefaultMode de ton formulaire est définie à FormMode.New (pour de la création).

    Comment as-tu organisé tes écrans ? As-tu un premier écran avec une galerie qui liste les déplacements + un bouton pour créer un nouveau déplacement ? Puis un 2ème écran qui affiche le formulaire ? Ou tout sur le même écran ?

    Une bonne pratique serait la suivante…

    Ecran Liste déplacements

    • Une galerie galDéplacements où :

      • Items = TaListeSharePoint

      • OnSelect = Navigate('Edit déplacement'; ScreenTransition.Fade; {locFormMode: FormMode.Edit; locSelectedDéplacement: ThisItem})

    • Un bouton CREER où :

      • OnSelect = Navigate('Edit déplacement'; ScreenTransition.Fade; {locFormMode: FormMode.New; locSelectedDéplacement: Blank()})

    Ecran Edit déplacement

    • Un formulaire frmDéplacement où :

      • Datasource = TaListeSharePoint

      • Item = locSelectedDéplacement

      • DefaultMode = locFormMode

      • OnSuccess = Notify("Déplacement enregistré avec succès !"; NotificationType.Success);; Back()

    Avec ça tu as le minimum requis pour faire fonctionner ton app… 😉

    N’hésite pas si tu as encore besoin d’aide… 😊

    Comme tu débutes, je te suggère de lire ce petit article qui propose une bonne nomenclature des contrôles dans tes applications Power Apps :

    Et celui-ci que je viens de poster ce matin sur la bonne approche pour la gestion des erreurs/notifications avec les formulaires :

    CommentID=oJ3A6vHjpoWAv4Z, PostID=8UTe1NnTtc7tfN3

    • Julien

      Membre
      7 mars 2023 à 13h23

      Waou 🙂 Merci pour ta réponse.

      Alors je vais me pencher sur les liens que tu m’as partagé pour apprendre et surtout comprendre la logique “PowerApps”.

      Aussi, je vais te donner des infos sur mon appli qui fonctionne ainsi :

      Sommaire

      • Liste des agents

      • Détails “actuel” des agents (Dernier formulaire rempli pour eux)

      • Edition des agents (nouvelles données lieu et dates notamment)

      Je vais essayer de mettre en place ce que tu viens de m’expliquer sachant que ma liste (Lists) se nomme PACT Suivi avec des colonnes comme ainsi :

      • Noms

      • Prénoms

      • Equipe

      • Lieu actuel

      • Date sur le lieu actuel

      • Url (au cas ou je veille mettre un lien pour chaque agent)

      Ou je voudrais si on edit un agent parties lieu et dates ca ajoute une colonne que je puisse ensuite s’afficher dans powerBi avec un suivi temporel

      Du coup je vais modifier le DéfautMode de EditScreen1 en FormeMode.Edit ?

      Très grand merci en tout cas !!

      Edit : Je me permets car j’ai quelques difficultés à retranscrire dans mon appli :

      Sur mon écran DétailScreen1 bouton IconEdit je n’arrive pas a comprendre pour mettre cette fonction :

      Navigate('EditScreen1'; ScreenTransition.Fade; {locFormMode: FormMode.New; locSelectedDéplacement: Blank()})

      A quoi correspond ‘locformmode’ et Formmode.new (Je ne trouve pas dans ma barre sur OnSelect)

      Merci encore, je creuse lol

      SubCommentID=1BiaEiohG8W4b34, CommentID=oJ3A6vHjpoWAv4Z, PostID=8UTe1NnTtc7tfN3

  • R3dKap

    Membre
    7 mars 2023 à 17h23

    Julien je vois que tes écrans s’appellent BrowseScreen1, DetailScreen1 et EditScreen1. Ce qui laisse supposer que tu as générer cette application directement à partir de la liste SharePoint. Normalement cette application est déjà fonctionnelle et il n’y pas besoin de la modifier pour l’adapter à mes suggestions ci-dessus. Surtout que je vois ton EDIT ci-dessus où tu as commencé à retoucher ces 3 écrans alors que c’est pas nécessaire puisqu’ils fonctionnent déjà bien nativement. Ok pour toi ?

    Par contre tu as rajouté un écran Screen1. Que veux tu mettre sur cet écran ?

    REMARQUE IMPORTANTE : à un moment tu dis “…je voudrais si on edit un agent parties lieu et dates ca ajoute une colonne…“. Ce n’est pas possible : dans une source de données on ne peut ajouter de colonnes à partir de l’application ; on ne peut qu’ajouter des lignes. Et donc dans ton cas si tu veux un suivi temporel il te faudra créer une ligne pour chaque déplacement. Par exemple :

    • Jean-Michel MARTIN Equipe 1 Chartres 01/02/2023 15/02/2023

    • Jean-Michel MARTIN Equipe 1 Lyon 19/02/2023 21/02/2023

    • etc.

    CommentID=sFwZuF3H1tK6MF5, PostID=8UTe1NnTtc7tfN3

    • Julien

      Membre
      8 mars 2023 à 10h54

      Bonjour,

      Tout d’abord, Merci beaucoup pour ta réponse.

      Aussi, je te confirme que c’est une application directement établit via Sharepoint “Lists” et elle fonctionne, j’aimerais quelques mises à jours pour mes besoins précis.

      Pour répondre à ta question :

      • Screen1 correspond à un Sommaire avec un bouton “Navigate”

      Du coup j’ai bien compris ca va enregistrer une ligne à chaque fois avec le même nom

      Ceci n’est pas une problématique dans mon cas mais j’aimerais mettre la fonction “Distinct” dans ma liste de l’application afin de ne pas avoir les noms en double triple etc…. est-ce possible ?

      Dans la gallery / Item : (Pour insérer Distinct) mais le code ne semble pas bon :/

      SortByColumns(Distinct)Filter([@’PACT Suivi’]; StartsWith(‘Nom ‘; TextSearchBox1.Text)); “Title”; If(SortDescending1; SortOrder.Descending; SortOrder.Ascending));Result)

      Du coup de la même manière lorsque je vais editer un Nom existant j’aimerais au lieu de modifier la ligne dans sharepoint “List” il faudrait en créer une … car dans PowerBi par date j’aurais les infos qui me vont bien.

      Du coup dans mon EDIT Form sous Defaultmode j’ai mis New

      De sur le bouton envoyer : OnSelect : SubmitForm(EditForm1)

      Mais ca ne semble pas me créer un élément maus le modifier …

      Merci 🙂

      SubCommentID=FELqnKWuPA2zuY9, CommentID=sFwZuF3H1tK6MF5, PostID=8UTe1NnTtc7tfN3

  • R3dKap

    Membre
    8 mars 2023 à 11h10

    Est-ce que tu peux me mettre une capture de ton écran Screen1 stp ? Merci 😉

    CommentID=AZ9f7sDos2GALtE, PostID=8UTe1NnTtc7tfN3

    • Julien

      Membre
      8 mars 2023 à 12h46

      De suite 🙂

      SubCommentID=rMBroEDzsXJLTtY, CommentID=AZ9f7sDos2GALtE, PostID=8UTe1NnTtc7tfN3

  • R3dKap

    Membre
    8 mars 2023 à 17h11

    Merci. Alors en fait si j’ai bien compris tu voudrais que sur ton écran BrowseScreen1 il n’affiche pas à chaque fois le même nom de la personne sur chaque ligne.

    Pour faire ça il va falloir en fait créer un autre écran “entre” ton écran d’accueil Screen1 et le BrowseScreen1. Ce nouvel écran va afficher la liste des personnes et quand on cliquera sur une personne on arrivera sur le BrowseScreen1 qui n’affichera que les lignes de la personne cliquée.

    Pour la suite je vais considérer que tu n’utilises pas la colonne Title et je vais utiliser seulement la colonne Nom. Car je ne sais pas comment tu as géré ça. ATTENTION : j’ai l’impression que tu as un espace dans le nom de ta colonne Nom (au moins au niveau du libellé d’affichage). Ca va te poser des galères pour la suite. Je vais supposer que tu l’enlèves…

    Commence par dupliquer ton écran BrowseScreen1 et appelle-le ListScreen1. Du coup dedans tu vas avoir ta galerie qui va s’appeler BrowseGallery1_1. Renomme-la en ListGallery1 pour plus de facilité pour la suite.

    Dans ta galerie ListGallery1 enlève toutes les infos qui ne t’intéressent pas garde seulement le nom de la personne.

    Ensuite, modifie la propriété Items de la galerie ListGallery1 pour mettre ceci :

    Distinct(SortByColumns(Filter([@'PACT Suivi']; StartsWith(Nom; TextSearchBox1_1.Text)); "Nom"; If(SortDescending1; SortOrder.Descending; SortOrder.Ascending)); Title)

    Sur la propriété OnSelect de cette même galerie mets ceci : Navigate(BrowseScreen1; ScreenTransition.None)

    Sur la galerie BrowseGallery1 de l’écran BrowseScreen1, mets ceci :

    SortByColumns(Filter([@'PACT Suivi']; Title=ListGallery1.Selected.Value); "Nom"; If(SortDescending1; SortOrder.Descending; SortOrder.Ascending))

    Ensuite, recopie le IconBackarrow1 de l’écran DetailScreen1 et colle-le sur l’écran BrowseScreen1. Place-le en haut à gauche de l’écran et modifie le code ainsi : Navigate(ListScreen1; ScreenTransition.None)

    Voilà l’idée générale. Y’aura encore quelques retouches à faire pour isoler les tris sur le nouvel écran par rapport à celui de BrowseScreen1, mais globalement ça devrait déjà fonctionner…

    CommentID=KHny79yyKlM9NYM, PostID=8UTe1NnTtc7tfN3

Connectez-vous pour répondre.