Power Apps – Soumission de formulaire et notification d'erreur ou de succès

  • Power Apps – Soumission de formulaire et notification d'erreur ou de succès

    Posté par R3dKap sur 7 mars 2023 à 10h48

    Capture…

    Il n’est pas toujours facile de savoir comment gérer proprement les messages d’erreurs suite à la soumission d’un formulaire dans une application Power Apps.

    Après de nombreux essais, il me semble qu’une bonne approche pourrait être celle-ci…

    • Button1.OnSelect = SubmitForm(Form1) // Lorsque je clique sur un bouton je soumets le formulaire (cela garantit que les messages d’erreur de saisies au niveau des champs s’afficheront bien dans les datacards, nativement)

    • Form1.OnSuccess = Notify("Sauvegarde résussie !"; NotificationType.Success) // Tout s’est bien passé

    • Form1.OnFailure = // Déclenché que l’erreur provienne des saisies (Form1.Valid = true) ou de l’enregistrement des données dans la source de données

    If(n    Not(Form1.Valid); // Si le formulaire n'est pas valide au niveau des saisies on complète les messages d'erreurs dans les datacards avec une petite notificationn    Notify(n        "Vous avez des erreurs dans votre formulaire. Vérifiez vos saisies."; n        NotificationType.Errorn    ); n    Notify( // Le formulaire est valide mais on est quand même dans le OnFailure, c'est qu'il y a eu un problème -> on affiche le premier message d'erreur trouvé sur la source de donnéesn        $"Erreur à l'enregistrement ({First(n            Errors(MaSourceDeDonnées)n        ).Message})."; n        NotificationType.Errorn    )n)

    Gestion d’un spinner d’attente pendant l’enregistrement

    Il est de bon ton d’indiquer à l’utilisateur que l’enregistrement de ses données est en cours en affichant à l’écran un petit spinner (composant PowerSpinner dispo ici). Pour garantir qu’il ne s’affiche que pendant la phase de sauvegarde et qu’il se masque à nouveau si une erreur est survenue à la soumission du formulaire, voici comment procéder :

    • Button1.OnSelect devient UpdateContext({locSaving: true});; SubmitForm(Form1)

    • A la fin du Form1.OnSuccess ajoutez : UpdateContext({locSaving: false})

    • A la fin du Form1.OnFailure ajoutez : UpdateContext({locSaving: false})

    • Placez votre Spinner1 à l’écran

    • Spinner1.Visible = locSaving

    N’hésitez pas à réagir ou à proposer une autre approche… 😉

    PostID=7HE1YBPjiBVCLdV

    Sebastien a répondu Il y a 11 mois 1 Membre · 5 Réponses
  • 5 Réponses
  • MarKAR

    Membre
    7 mars 2023 à 11h41

    Hello R3dKap

    Merci pour l’explication. Récemment j’ai dû customiser un formulaire et j’ai eu besoin de unvalid le formulaire lorsque par exemple une date n’est pas dans l’intervalle souhaité.

    on en avait déjà parlé avec toi R3dKap et DavidZed :

    j’ai du gérer ces conditions une à une :

    1- dans le BorderColor mais aussi 2- dans le Submit

    Il manquerait à mon sens une fonctionnalité qui permettrait si une condition custom n’est pas réussie de unvalid le form. Et du coup gérer automatiquement le borderColor rouge par exemple…

    CommentID=o3u8Md83fIu5TXo, PostID=7HE1YBPjiBVCLdV

  • DavidZed

    Membre
    7 mars 2023 à 12h47

    Pour ma part, il m’arrive d’utiliser les valeurs de Form.Error et Form.Valid, pour agir sur le display mode d’un bouton par exemple:

    SubmitButton.DisplayMode = If(IsBlank( Form.Error ) || Form.Valid, DisplayMode.Edit, DisplayMode.Disabled)

    Par contre je ne le fais pas systématiquement, dans la mesure où l’utilisateur n’est pas forcément informé des erreurs ou données non valides : il voit juste que le bouton de validation est grisé. A n’utiliser que sur des formulaires simples et courts.

    CommentID=9VnDKBlxzZYtORP, PostID=7HE1YBPjiBVCLdV

  • MarKAR

    Membre
    7 mars 2023 à 13h42

    Oui DavidZed Entièrement d’accord

    merci pour ton avis 🙂

    CommentID=VUwm4R9TLI28EES, PostID=7HE1YBPjiBVCLdV

  • R3dKap

    Membre
    7 mars 2023 à 14h50

    De mon côté, pour essayer de donner une certaine cohérence à l’expérience de l’utilisateur, pour les champs pour lesquels j’ai besoin de contrôles customs, je les définis directement sur chacun des contrôles ErrorMessage :

    ErrorMessage12.Text = If(DataCardValue12.SelectedDate < Today(); "La date de début doit être postérieure ou égale à la date du jour."; Parent.Error)

    Et je modifie la couleur de la bordure du champ ainsi :

    DataCardValue12.BorderColor = If(IsBlank(ErrorMessage12.Text); Parent.BorderColor; Color.Red)

    Et donc sur le bouton, ça oblige à vérifier ces conditions customs en plus :

    SubmitButton.DisplayMode = If(IsBlank(ErrorMessage12.Text) && IsBlank(Form.Error) && Form.Valid; DisplayMode.Edit; DisplayMode.Disabled)

    CommentID=QAyczGOXrhnxZNX, PostID=7HE1YBPjiBVCLdV

  • Sebastien

    Membre
    8 mars 2023 à 9h57

    Merci R3dKap !

    J’utilise assez peu les formulaires avec mes projets actuels, mais ça va être extrêmement utile quand j’en aurai besoin.
    Je voulais également en profiter pour laisser une piste à ceux qui utilisent des Patch() et veulent aussi faire de la gestion d’erreur. Dans ce cas les fonctions IfError() et isError() sont très utiles :

    IfError(n    Patch(n        Defaults(Prospects);n        {n            ....n            ....n        }n    );n    Notify("Une erreur est survenue lors de la création du prospect"; NotificationType.Error))

    Avec une formule comme ça, si le Patch() renvoie une erreur on peut également notifier, ou gérer l’erreur comme on l’entend.

    En espérant que ça servira à quelqu’un !

    CommentID=yaITBqvHAU6fur0, PostID=7HE1YBPjiBVCLdV

Connectez-vous pour répondre.