Partager via


Error, , IfError, IsBlankOrErrorIsErrorfonctions

Functions S’applique à
Error
IfError
IsError
Les applications Canvas Copilot Studio Desktop circulent des colonnes de formule Dataverse basées sur des modèles d’applications Power Platform CLI Dataverse functions Power Pages
IsBlankOrError Les applications Canvas Copilot Studio Desktop circulent des applications basées sur des modèles power Platform CLI Dataverse functions Power Pages

Détecte les erreurs et fournit une valeur alternative, ou prend des mesures. Créez une erreur personnalisée ou transmettez une erreur.

Note

Si une application a désactivé la fonctionnalité Gestion des erreurs au niveau de la formule sous Paramètres>Mises à jour>Retiré, ces fonctions ne fonctionneront pas correctement.

IfError

La fonction teste les IfError valeurs jusqu’à ce qu’elle trouve une erreur. Si la fonction découvre une erreur, la fonction évalue et renvoie une valeur de remplacement correspondante et arrête l’évaluation ultérieure. Une valeur par défaut peut également être fournie pour lorsqu’aucune erreur n’est trouvée. La structure de IfError la fonction If ressemble à celle de la fonction If : IfError teste les erreurs, tandis que Si teste true.

Permet IfError de remplacer une erreur par une valeur valide afin que les calculs en aval puissent continuer. Par exemple, utilisez cette fonction si l’entrée utilisateur peut entraîner une division par zéro :

IfError( 1/x, 0 )

Cette formule renvoie 0 si la valeur de x est zéro, car 1/x produit une erreur. Si x n’est pas nul, alors 1/x est retourné.

Arrêt du traitement ultérieur

Quand vous effectuez le chaînage de formules dans des formules de comportement, telles que :

Patch( DS1, ... );
Patch( DS2, ... )

La deuxième fonction Patch de DS2 sera tentée même si le Patch de DS1 échoue. La portée d’une erreur est limitée à chaque formule chaînée.

Permet IfError d’effectuer une action et de continuer le traitement uniquement si l’action a réussi. Application IfError à cet exemple :

IfError(
    Patch( DS1, ... ), Notify( "problem in the first action" ),
    Patch( DS2, ... ), Notify( "problem in the second action" )
)

Si la fonction Patch de DS1 a un problème, le premier Notifier est exécuté. Aucun autre traitement n’a lieu, y compris le second Patch de DS2. Si le premier Patch réussit, le second Patch s’exécute.

S’il est fourni, l’argument DefaultResult facultatif est renvoyé si aucune erreur n’est découverte. Sans cet argument, le dernier argument Valeur est renvoyé.

En se basant sur le dernier exemple, la valeur de retour de IfError peut être vérifiée pour déterminer s’il existe des problèmes :

IfError(
    Patch( DS1, ... ), Notify( "problem in the first action" );  false,
    Patch( DS2, ... ), Notify( "problem in the second action" ); false,
    true
)

Compatibilité des types

IfError retourne la valeur de l’un de ses arguments. Les types de toutes les valeurs qui peuvent être retournées par IfError doivent être compatibles.

Dans le dernier exemple, Patch renvoie un enregistrement qui n’est pas compatible avec les booléens utilisés pour les formules Replacement ou le DefaultResult. Ce qui est correct, car il n’existe aucune situation dans laquelle la valeur de retour de ces appels Patch serait retournée par IfError.

Note

Bien que le comportement en cours de modification soit modifié, les types de tous les arguments à IfError compatibilité actuelle doivent être compatibles.

Dans l’exemple simple décrit précédemment :

IfError( 1/x, 0 )

Les types de 1/x et 0 étaient compatibles car les deux étaient des nombres. Si ce n’est pas le cas, le deuxième argument est contraint de correspondre au type du premier argument.

Excel affiche #DIV/0! lorsqu’une division par zéro se produit.

Tenez compte IfError des éléments suivants à la place :

IfError( 1/x, "#DIV/0!" )

La formule ci-dessus ne fonctionnera pas. La chaîne "#DIV/0!" de texte est coéchée au type du premier argument à IfError, qui est un nombre. Le résultat est une autre erreur, car la chaîne de IfError texte ne peut pas être coédée. En guise de correctif, convertissez le premier argument en chaîne de texte afin de IfError toujours renvoyer une chaîne de texte :

IfError( Text( 1/x ), "#DIV/0!" )

Comme indiqué ci-dessus, IfError peut retourner une erreur si le remplacement ou DefaultResult est une erreur.

FirstError / AllErrors

Dans les formules de remplacement, des informations sur les erreurs trouvées sont disponibles via l’enregistrement FirstError et la table AllErrors. AllErrors est une table d’enregistrements d’informations d’erreur avec FirstError étant un raccourci vers le premier enregistrement de cette table. FirstError renvoie toujours la même valeur que First( AllErrors ).

Error les enregistrements incluent :

Champ Type Description
Gentil Énumération ErrorKind (nombre) Catégorie de l’erreur.
Message Chaîne de texte Message sur l’erreur, pouvant être affiché à l’utilisateur final.
Source Chaîne de texte Emplacement d’origine de l’erreur, utilisé pour les rapports. Par exemple, pour une formule liée à une propriété de contrôle, cette valeur est sous la forme ControlName.PropertyName.
Observé Chaîne de texte Emplacement où l’erreur est signalée à l’utilisateur, utilisé pour les rapports. Par exemple, pour une formule liée à une propriété de contrôle, cette valeur est sous la forme ControlName.PropertyName.
Détails Enregistrer Détails de l’erreur. Actuellement, les détails ne sont fournis que pour les erreurs réseau. Cet enregistrement comprend HttpStatusCode qui contient le code d’état HTTP et HttpResponse qui contient le corps de la réponse du connecteur ou du service.

Par exemple, prenons la formule suivante comme propriété OnSelect d’un contrôle Button :

Set( a, 1/0 )

Et cette formule sur la propriété OnSelect d’un second contrôle Button :

IfError( a, Notify( "Internal error: originated on " & FirstError.Source & ", surfaced on " & FirstError.Observed ) )

L’exemple de formule ci-dessus afficherait la bannière suivante lorsque les deux boutons sont activés en séquence :

Contrôle Button activé, affichant une notification de la fonction Notify.

En règle générale, il n’y aura qu’une seule erreur avec laquelle FirstError peut fonctionner correctement. Cependant, il existe des scénarios dans lesquels plusieurs erreurs peuvent être renvoyées. Par exemple, lors de l’utilisation d’un opérateur de chaînage de formules ou la fonction Concurrent. Même dans ces situations, signaler FirstError peut suffire à révéler un problème au lieu de surcharger un utilisateur avec plusieurs erreurs. Si vous devez toujours utiliser chaque erreur individuellement, vous pouvez utiliser la table AllErrors.

IsError

La IsError fonction teste une valeur d’erreur.

La valeur renvoyée est une valeur booléenne true ou false.

L’utilisation IsError empêche tout traitement supplémentaire de l’erreur.

IsBlankOrError

La IsBlankOrError fonction teste une valeur vide ou une valeur d’erreur et est l’équivalent de Or( IsBlank( X ), IsError( X ) ).

Lors de l’activation de la gestion des erreurs pour les applications existantes, envisagez de remplacer IsBlank par IsBlankOrError pour préserver le comportement de l’application existant. Avant l’ajout de la gestion des erreurs, une valeur vide était utilisée pour représenter à la fois les valeurs nulles des bases de données et les valeurs d’erreur. Error la gestion sépare ces deux interprétations de vides qui pourraient modifier le comportement des applications existantes qui continuent d’utiliser IsBlank.

La valeur renvoyée est une valeur booléenne true ou false.

L’utilisation IsBlankOrError empêche tout traitement supplémentaire de l’erreur.

Utilisez la Error fonction pour créer et signaler une erreur personnalisée. Par exemple, vous pouvez avoir une logique pour déterminer si une valeur donnée est valide pour votre contexte ou non, quelque chose n’est pas vérifié pour un problème automatiquement. Vous pouvez créer et retourner votre propre erreur, terminée avec Kind et Message, à l’aide du même enregistrement décrit ci-dessus pour la IfError fonction.

Dans le contexte de IfError, utilisez la Error fonction pour relancer ou transmettre une erreur. Par exemple, votre logique IfError peut décider que, dans certains cas, une erreur peut être ignorée en toute sécurité, mais dans d’autres cas, l’erreur est importante à envoyer. Dans IfError ou App.OnError, utilisez Error( FirstError) pour transmettre une erreur.

La Error fonction peut également être passée à une table d’erreurs, comme indiqué dans la table AllErrors . Utilisez Error( AllErrors ) pour réactiver toutes les erreurs et pas seulement la première.

Un enregistrement vide ou une table vide passée pour Error ne pas entraîner d’erreur.

Syntaxe

Error( ErrorRecord )
Error( ErrorTable )

  • ErrorRecord – Obligatoire. Error enregistrement d’informations, notamment Type, Message et autres champs. Kind est obligatoire. FirstError peut être transmis directement.
  • ErrorTable – Obligatoire. Table des enregistrements d’informations sur les erreurs. Toutes les erreurs peuvent être transmises directement.

IfError( Value1, Replacement1 [, Value2, Replacement2, ... [, DefaultResult ] ] )

  • Valeurs – Obligatoire. Formule(s) à tester pour rechercher une valeur d’erreur.
  • Remplacements – requis. Formules à évaluer et valeurs à retourner si les arguments Value correspondants ont retourné une erreur.
  • DefaultResult – Facultatif. Les formules pour évaluer si la formule ne trouve aucune erreur.

IsError( Valeur )
IsBlankOrError( Valeur )

  • Valeur – Obligatoire. Formule à tester.

Exemples

Simple IfError

Formule Description Résultat
IfError( 1, 2 ) Le premier argument n’est pas une erreur. La fonction n’a aucune autre erreur à vérifier et aucune valeur de retour par défaut. La fonction renvoie le dernier argument value évalué. 1
IfError( 1/0, 2 ) Le premier argument retourne une valeur d’erreur (due à la division par zéro). La fonction évalue le deuxième argument et le renvoie comme résultat. 2
IfError( 10, 20, 30 ) Le premier argument n’est pas une erreur. La fonction n’a aucune autre erreur à vérifier mais a valeur de retour par défaut. La fonction renvoie l’argument DefaultResult. 30
IfError( 10, 11, 20, 21, 300 ) Le premier argument 10 n’est pas une erreur, donc la fonction n’évalue pas le remplacement correspondant de cet argument 11. Le troisième argument 20 n’est pas une erreur non plus, donc la fonction n’évalue pas le remplacement correspondant de cet argument 21. Le cinquième argument 300 n’a pas de remplacement correspondant et est le résultat par défaut. La fonction renvoie ce résultat car la formule ne contient aucune erreur. 300
IfError( 1/0, Notify( « Il y avait un problème interne » ) ) Le premier argument retourne une valeur d’erreur (due à la division par zéro). La fonction évalue le second argument et affiche un message à l’utilisateur. La valeur de IfError retour est la valeur de retour de Notify, coéchée au même type que le premier argument à IfError (un nombre). 1

Simple IsError

Formule Description Résultat
IsError( 1 ) L’argument n’est pas une erreur. FAUX
IsError( Blank() ) L’argument est un blanc, mais pas une erreur. FAUX
IsError( 1/0 ) L’argument est une erreur. vrai
If( IsError( 1/0 ), Notify( « There was a internal problem » ) ) Argument à renvoyer IsError une valeur d’erreur (en raison de la division par zéro). Cette fonction renvoie vrai, ce qui provoque la fonction If pour afficher un message à l’utilisateur avec la fonction Notify. La valeur de retour de If est la valeur de retour de Notify, à laquelle est imposé le même type que celui du premier argument fourni à If (un booléen). vrai

Simple IsBlankOrError

Formule Description Résultat
IsBlankOrError( 1 ) L’argument n’est pas une erreur ou vide. FAUX
IsBlankOrError( Blank() ) L’argument est un blanc. vrai
IsBlankOrError( 1/0 ) L’argument est une erreur. vrai

Simple Error

Dans cet exemple, les dates sont validées les unes par rapport aux autres, ce qui entraîne une erreur en cas de problème.

If( StartDate > EndDate,
    Error( { Kind: ErrorKind.Validation, Message: "Start Date must be before End Date" } ) )

Dans cet exemple, certaines erreurs sont autorisées à passer tandis que d’autres sont supprimées et remplacées par une valeur. Dans le premier cas, b est dans un état d’erreur car le Valeur la fonction a un argument invalide. Parce que cela est inattendu par le rédacteur de la formule, cela est transmis pour que l’utilisateur le voie. Dans le deuxième cas, avec la même formule, b a la valeur 0, ce qui entraîne une division par zéro. Dans ce cas, l’auteur de la formule peut savoir que cela est acceptable pour cette logique, supprimez l’erreur (aucune bannière n’est affichée) et renvoyez -1 à la place.

With( {a: 1, b: Value("a")},
      IfError( a/b, If( FirstError.Kind <> ErrorKind.Div0, Error( FirstError ), -1 ) ) )
// returns an error with Kind = ErrorKind.InvalidArgument

With( {a: 1, b: 0} )
      IfError( a/b, If( FirstError.Kind <> ErrorKind.Div0, Error( FirstError ), -1 ) ) )
// returns -1

La table AllErrors peut être filtrée comme n’importe quelle autre table. Utilisé avec la Error fonction, les erreurs attendues peuvent être supprimées et les erreurs restantes conservées et signalées. Par exemple, si nous savions que la division par zéro ne poserait pas de problème dans un contexte particulier, ces erreurs pourraient être filtrées, laissant toutes les autres erreurs intactes avec la formule suivante :

Error( Filter( AllErrors, Kind <> ErrorKind.Div0 ) )

Pas à pas

  1. Ajoutez un contrôle Text input et nommez-le TextInput1 s’il n’a pas ce nom par défaut.

  2. Ajoutez un contrôle Label et nommez-le Label1 s’il n’a pas ce nom par défaut.

  3. Définissez la formule pour la propriété Text de Label1 sur :

    IfError( Value( TextInput1.Text ), -1 )
    
  4. Dans TextInput1, entrez 1234.

    L’étiquette 1 montre la valeur 1234 car il s’agit d’une entrée valide pour la fonction Valeur.

  5. Dans TextInput1, entrez ToInfinity.

    L’étiquette 1 montre la valeur -1 car ce n’est pas une entrée valide pour la fonction Value. Sans encapsuler la fonction Valeur avec IfError, l’étiquette n’affiche aucune valeur, car la valeur d’erreur est traitée comme vide.

Voir aussi

Référence de formule pour Power Apps