Fournit des informations d’erreur sur les modifications précédemment apportées à une source de données.

Vue d’ensemble

Des erreurs peuvent se produire lorsqu’un enregistrement d’une source de données est modifié. Les causes sont multiples. Il peut même s’agir d’une indisponibilité du réseau, d’autorisations inadaptées et de conflits de modification.

La fonction Patch et d’autres fonctions de données ne renvoient pas directement d’erreurs. Au lieu de cela, elles renvoient le résultat de leur opération. Après l’exécution d’une fonction de données, vous pouvez utiliser la fonction Errors pour obtenir le détail des erreurs. Pour vérifier la présence d’erreurs, utilisez la fonction [IsEmpty] dans la formule IsEmpty( Errors ( ... ) ).

Vous pouvez éviter certaines erreurs avant qu’elles ne se produisent à l’aide des fonctions Validate et DataSourceInfo. Consultez la page Utilisation des sources de données pour obtenir des suggestions sur la façon d’utiliser les erreurs et de les éviter.

Description

La fonction Errors renvoie une table d’erreurs contenant les colonnes suivantes :

  • Record. Enregistrement de la source de données qui contenait l’erreur. Si l’erreur s’est produite au moment de la création d’un enregistrement, cette colonne est vide.

  • Column. Colonne qui a provoqué l’erreur, si l’erreur peut être attribuée à une seule colonne. Sinon, cette valeur est vide.

  • Message. Description de l’erreur. Cette chaîne d’erreur est parfois présentée à l’utilisateur final. N’oubliez pas que ce message peut être généré par la source de données, qu’il est parfois long et qu’il contient des noms de colonne bruts qui n’ont pas forcément de sens pour l’utilisateur.

  • Error. Code d’erreur pouvant être utilisé dans les formules pour aider à résoudre l’erreur :

ErrorKind Description
ErrorKind.Conflict Une autre modification a été apportée au même enregistrement, ce qui a entraîné un conflit de modification. Utilisez la fonction Refresh pour recharger l’enregistrement, puis tentez d’appliquer à nouveau la modification.
ErrorKind.ConstraintViolation Une ou plusieurs contraintes n’ont pas été respectées.
ErrorKind.CreatePermission Une tentative de création d’enregistrement a eu lieu et l’utilisateur actuel n’est pas autorisé à créer des enregistrements.
ErrorKind.DeletePermission Une tentative de suppression d’enregistrement a eu lieu et l’utilisateur actuel n’est pas autorisé à supprimer des enregistrements.
ErrorKind.EditPermission Une tentative de modification d’enregistrement a eu lieu et l’utilisateur actuel n’est pas autorisé à modifier des enregistrements.
ErrorKind.GeneratedValue Une tentative de modification d’une colonne que la source de données génère automatiquement a eu lieu.
ErrorKind.MissingRequired La valeur d’une colonne requise est manquante dans l’enregistrement.
ErrorKind.None Il n’existe aucune erreur.
ErrorKind.NotFound L’enregistrement est introuvable alors qu’une tentative de le modifier ou de le supprimer a eu lieu. Un autre utilisateur a peut-être modifié l’enregistrement.
ErrorKind.ReadOnlyValue Une tentative de modification d’une colonne en lecture seule a eu lieu.
ErrorKind.Sync Une erreur a été signalée par la source de données. Vérifiez la colonne Message pour plus d’informations.
ErrorKind.Unknown Une erreur d’un genre inconnu a eu lieu.
ErrorKind.Validation Un problème de validation générale a été détecté qui ne correspond pas à l’un des autres types.

Les erreurs peuvent être renvoyées pour toute la source de données ou pour seulement une ligne en insérant l’argument Record dans la fonction.

Patch ou une autre fonction de données peut renvoyer une valeur vide, par exemple si un enregistrement n’a pas pu être créé. Vous pouvez transmettre la valeur vide à la fonction Errors. Dans ces cas de figure, elle renvoie des informations d’erreur appropriées. Toute utilisation ultérieure des fonctions de données sur la même source de données efface ces informations d’erreur.

S’il n’existe aucune erreur, la table que la fonction Errors renvoie est vide et vous pouvez la tester avec la fonction IsEmpty.

Syntaxe

Errors( DataSource [, Record ] )

  • *DataSource* : requis. Source de données pour laquelle vous souhaitez renvoyer des erreurs.
  • *Record* : facultatif. Enregistrement spécifique pour lequel vous souhaitez renvoyer des erreurs. Si vous ne spécifiez pas cet argument, la fonction renvoie des erreurs pour toute la source de données.

Exemples

Étape par étape

Pour cet exemple, nous allons utiliser la source de données IceCream :

Via l’application, un utilisateur charge l’enregistrement Chocolate dans un formulaire de saisie de données, puis modifie Quantity en lui donnant pour valeur 90. L’enregistrement à utiliser est placé dans la variable contextuelle EditRecord :

  • UpdateContext( { EditRecord: First( Filter( IceCream, Flavor = "Chocolate" ) ) } )

Pour effectuer cette modification dans la source de données, la fonction Patch est utilisée :

  • Patch( IceCream, EditRecord, Gallery.Updates )

Gallery.Updates prend la valeur { Quantity: 90 }, sachant que seule la propriété Quantity a été modifiée.

Malheureusement, juste avant que la fonction Patch ne soit appelée, quelqu’un d’autre modifie la propriété Quantity pour Chocolate et lui donne pour valeur 80. PowerApps détecte ce point et n’autorise pas la modification puisqu’il existe un conflit. Vous pouvez vérifier cette situation à l’aide de la formule suivante :

  • IsEmpty( Errors( IceCream, EditRecord ) )

renvoie false, car la fonction Errors a renvoyé la table suivante :

Enregistrement Colonne Message Erreur
{ Flavor: "Chocolate", Quantity: 100 } vide « Un autre utilisateur a modifié l’enregistrement que vous tentez de modifier. Rechargez l’enregistrement et réessayez. » ErrorKind.Conflict

Vous pouvez placer une étiquette sur le formulaire pour signaler cette erreur à l’utilisateur.

  • Pour signaler cette erreur, définissez la propriété Text de l’étiquette à l’aide de la formule suivante :
    Label.Text = First(Errors( IceCream, EditRecord )).Message

Vous pouvez également ajouter un bouton Recharger sur le formulaire, afin que l’utilisateur puisse résoudre efficacement les conflits.

  • Pour que le bouton n’apparaisse qu’en cas de conflit, définissez sa propriété Visible à l’aide de la formule suivante :
    !IsEmpty( Lookup( Errors( IceCream, EditRecord ), Error = ErrorKind.Conflict ) )

  • Pour annuler la modification lorsque l’utilisateur sélectionne le bouton, définissez sa propriété OnSelect à l’aide de la formule suivante :
    ReloadButton.OnSelect = Revert( IceCream, EditRecord )