Funktionen „Error“, „IfError“, „IsError“, „IsBlankOrError“

Gilt für: Canvas-Apps Dataverse Formelspalten Desktop-Flows Modellgesteuerte Apps Power Pages Power Platform CLI

Erkennt Fehler und stellt einen Alternativwert bereit oder führt eine Aktion aus. Erstellt einen benutzerdefinierten Fehler oder übergibt einen Fehler.

Anmerkung

Wenn in einer App die Funktion Fehlerverwaltung auf Formelebene unter Einstellungen>Updates>Eingestellt deaktiviert ist, funktionieren diese Funktionen nicht richtig.

IfError

Die IfError-Funktion testet Werte, bis ein Fehler gefunden wird. Wenn die Funktion einen Fehler entdeckt, wertet die Funktion einen entsprechenden Wiederbeschaffungswert aus und gibt ihn zurück und stoppt die weitere Auswertung. Ein Standardwert kann auch angegeben werden, wenn keine Fehler gefunden werden. Die Struktur von IfError ähnelt der der If-Funktion: IfError testet auf Fehler, während If auf TRUE testet.

Verwenden Sie IfError, um einen Fehler durch einen gültigen Wert zu ersetzen, damit nachgelagerte Berechnungen fortgesetzt werden können. Verwenden Sie diese Funktion beispielsweise, wenn Benutzereingaben zu einer Division durch Null führen können:

IfError( 1/x, 0 )

Diese Formel gibt zurück, 0 wenn der Wert von x Null ist, da 1/x einen Fehler erzeugt. Wenn x nicht Null ist, wird 1/x zurückgegeben.

Weiterverarbeitung stoppen

Bei der Verkettung von Formeln in Verhaltensformeln, z. B.:

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

Der zweite Patch-Funktion zu DS2 wird versucht, auch wenn Patch zu DS1 fehlschlägt. Der Umfang eines Fehlers ist auf jede verkettete Formel beschränkt.

Verwenden Sie IfError, um eine Aktion auszuführen und setzen Sie die Verarbeitung nur fort, wenn die Aktion erfolgreich war. Anwenden von IfError auf dieses Beispiel:

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

Wenn Patch von DS1 ein Problem hat, wird das erste Notify ausgeführt. Es findet keine weitere Verarbeitung einschließlich des zweiten Patch von DS2 statt. Wenn der erste Patch gelingt, wird der zweite Patch ausgeführt.

Wenn vorhanden, wird das optionale DefaultResult-Argument zurückgegeben, wenn keine Fehler entdeckt werden. Ohne dieses Argument wird das letzte Wert-Argument zurückgegeben.

Aufbauend auf dem letzten Beispiel kann der Rückgabewert von IfError überprüft werden, um festzustellen, ob Probleme aufgetreten sind:

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

Typkompatibilität

IfError gibt den Wert eines seiner Argumente zurück. Die Typen aller Werte, die von IfError zurückgegeben werden, müssen kompatibel sein.

Im letzten Beispiel gibt Patch einen Datensatz zurück, der nicht mit den für die Ersetzungsformeln oder das Standardergebnis verwendeten Booleschen Werten kompatibel ist. Was in Ordnung ist, da es keine Situation gibt, in der der Rückgabewert aus diesen Patch-Aufrufen von IfError zurückgegeben würde.

Notiz

Während das Verhalten für eine Änderung in Bearbeitung ist, müssen die Typen aller Argumente für IfError kompatibel sein.

In dem zuvor beschriebenen einfachen Beispiel:

IfError( 1/x, 0 )

Die Typen von 1/x und 0 waren kompatibel, da beide Zahlen waren. Wenn dies nicht der Fall ist, wird erzwungen, dass das zweite Argument dem Typ des ersten Arguments entspricht.

Excel zeigt #DIV/0! an, wenn eine Division durch Null erfolgt.

Verwenden Sie IfError stattdessen mit Folgendem:

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

Die obige Formel funktioniert nicht. Die Textzeichenfolge "#DIV/0!" wird auf den Typ des ersten Arguments von IfError gezwungen, bei dem es sich um eine Zahl handelt. Das Ergebnis von IfError ist ein weiterer Fehler, da die Textzeichenfolge nicht erzwungen werden kann. Konvertieren Sie als Fehlerbehebung das erste Argument in eine Textzeichenfolge, damit IfError immer eine Textzeichenfolge zurückgibt:

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

Wie oben gesehen, kann IfError einen Fehler zurückgeben, wenn Replacement oder DefaultResult ein Fehler ist.

FirstError/AllErrors

Innerhalb der Ersatzformeln stehen Informationen über die gefundenen Fehler über den FirstError-Datensatz und AllErrors-Tabelle verfügbar. AllErrors ist eine Tabelle mit Fehlerinformationsdatensätzen, wobei FirstError eine Verknüpfung zum ersten Datensatz dieser Tabelle ist. FirstError gibt immer den gleichen Wert zurück wie First( AllErrors ).

Fehlerdatensätze umfassen:

Feld Typ Beschreibung
Art ErrorKind-Enumeration (Nummer) Kategorie des Fehlers.
Nachricht Zeichenfolge Nachricht über den Fehler, die dem Endbenutzer angezeigt werden kann.
Quelle Zeichenfolge Ort, an dem der Fehler aufgetreten ist, der für die Berichterstellung verwendet wird. Für eine an eine Steuerelementeigenschaft gebundene Formel hat dieser Wert beispielsweise die Form Steuerelementname.Eigenschaftsname.
Beobachtet Zeichenfolge Ort, an dem der Fehler dem Benutzer angezeigt wird, der für die Nachricht verwendet wird. Für eine an eine Steuerelementeigenschaft gebundene Formel hat dieser Wert beispielsweise die Form Steuerelementname.Eigenschaftsname.
Details Datensatz Informationen zum Fehler. Derzeit werden nur Details zu Netzwerkfehlern bereitgestellt. Dieser Datensatz enthält HttpStatusCode, der den HTTP-Statuscode enthält, und HttpResponse, was den Text der Antwort vom Connector oder Dienst enthält.

Verwenden Sie beispielsweise die folgende Formel als OnSelect-Eigenschaft eines Button-Steuerelements:

Set( a, 1/0 )

Und diese Formel in der Eigenschaft OnSelect eines zweiten Button-Steuerelements:

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

Die obige Beispielformel würde das folgende Banner anzeigen, wenn die beiden Schaltflächen nacheinander aktiviert werden:

Das Button-Steuerelement ist aktiviert und zeigt eine Benachrichtigung über die Notify-Funktion an.

Normalerweise gibt es nur einen Fehler, mit dem FirstError ausreichend arbeiten kann. Es gibt jedoch Szenarien, in denen möglicherweise mehrere Fehler zurückgegeben werden. Zum Beispiel bei der Verwendung eines Formelverkettungsoperators oder der Concurrent-Funktion. Auch in diesen Situationen reicht es eventuell aus, FirstError zu melden, um ein Problem aufzudecken, anstatt einen Benutzer mit mehreren Fehlern zu überlasten. Wenn Sie dennoch jeden Fehler einzeln bearbeiten müssen, können Sie die AllErrors-Tabelle verwenden.

IsError

Die IsError-Funktion prüft auf einen Fehlerwert.

Der Rückgabewert ist ein boolescher Wert, der wahr oder falsch ist.

Die Verwendung von IsError verhindert eine weitere Verarbeitung des Fehlers.

IsBlankOrError

Der IsBlankOrError Funktionstests für entweder einen Blindwert oder einen Fehlerwert und entspricht Or( IsBlank( X ), IsError( X ) ).

Bei der Aktivierung der Fehlerbehandlung für bestehende Apps sollten Sie das Ersetzen von isBlank mit IsBlankOrError in Betracht ziehen, um das Verhalten der bestehenden App zu bewahren. Vor der Hinzufügung der Fehlerbehandlung wurde ein leerer Wert verwendet, um sowohl Nullwerte aus Datenbanken als auch Fehlerwerte darzustellen. Die Fehlerbehandlung trennt diese beiden Interpretationen von leer, was das Verhalten bestehender Apps ändern könnte, die weiterhin für Ist leer verwendet werden.

Der Rückgabewert ist ein boolescher Wert, der TRUE oder FALSE ist.

Die Verwendung von IsBlankOrError verhindert eine weitere Verarbeitung des Fehlers.

Verwenden Sie die Funktion Error zum Erstellen und Melden eines benutzerdefinierten Fehlers. Beispielsweise könnten Sie über eine Logik verfügen, um zu bestimmen, ob ein bestimmter Wert für Ihren Kontext gültig ist oder nicht – etwas, das nicht automatisch auf ein Problem überprüft wird. Sie können Ihren eigenen Fehler erstellen und zurückgeben, inklusive mit Variante und Nachricht, wobei derselbe Datensatz verwendet wird, der oben für die IfError-Funktion beschrieben wurde.

Verwenden Sie im Rahmen von IfError die Error-Funktion zum erneuten Auslösen oder Durchlaufen eines Fehlers. Zum Beispiel kann Ihre Logik IfError entscheiden, dass in einigen Fällen ein Fehler sicher ignoriert werden kann, es aber in anderen Fällen wichtig ist, den Fehler weiterzuleiten. Verwenden Sie in IfError oder App.OnError Error( FirstError ), um einen Fehler weiterzuleiten.

Die Funktion Error kann auch eine Fehlertabelle erhalten, wie in der Tabelle AllErrors. Verwenden Sie Error( AllErrors ) alle Fehler erneut auszulösen und nicht nur den ersten.

Ein leerer Datensatz oder eine leere Tabelle, die an die Fehler-Ergebnisse weitergegeben werden, ergibt keinen Fehler.

Syntax

Fehler( Fehlerdatensatz )
Fehler( Fehlertabelle )

  • ErrorRecord – Erforderlich. Fehlerinformationsdatensatz, einschließlich Variante, Nachricht und andere Felder. Art ist erforderlich. FirstError kann direkt übergeben werden.
  • ErrorTable – Erforderlich. Tabelle der Fehlerinformationsdatensätze. AllErrors können direkt übergeben werden.

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

  • Werte – Erforderlich. Ein oder mehrere Formeln, die auf einen Fehlerwert geprüft werden.
  • Ersatzteile – Erforderlich. Die auszuwertenden Formeln und zurückzugebenden Werte, wenn für übereinstimmende Wert-Argumente ein Fehler zurückgegeben wurde.
  • DefaultResult – Optional. Die zu bewertenden Formeln, wenn die Formel keine Fehler findet.

IsError( Wert )
IsBlankOrError( Wert )

  • Wert – Erforderlich. Formel testen.

Beispiele

Einfache IfError-Funktion

Formel Beschreibung Ergebnis
WennFehler( 1, 2 ) Das erste Argument ist kein Fehlerwert. Die Funktion hat keine weiteren zu überprüfenden Fehler und keinen Standardrückgabewert. Die Funktion gibt das letzte Wert-Argument aus. 1
WennFehler( 1/0, 2 ) Für das erste Argument wird ein Fehlerwert zurückgegeben (aufgrund der Division durch null). Die Funktion wertet das zweite Argument aus und gibt es als Ergebnis zurück. 2
WennFehler( 10, 20, 30 ) Das erste Argument ist kein Fehlerwert. Die Funktion hat keine weiteren zu überprüfenden Fehler, jedoch einen Standardrückgabewert. Die Funktion gibt das DefaultResult-Argument zurück. 30
WennFehler( 10, 11, 20, 21, 300 ) Das erste Argument 10 ist kein Fehler, daher wertet die Funktion die entsprechende Ersetzung dieses Arguments 11 nicht aus. Das dritte Argument 20 ist ebenfalls kein Fehler, daher wertet die Funktion die entsprechende Ersetzung dieses Arguments 21 nicht aus. Das fünfte Argument 300 hat keinen entsprechenden Ersatz und ist das Standardergebnis. Die Funktion gibt dieses Ergebnis zurück, da die Formel keine Fehler enthält. 300
IfError( 1/0, Notify( "Es gab ein internes Problem") ) Für das erste Argument wird ein Fehlerwert zurückgegeben (aufgrund der Division durch null). Die Funktion bewertet das zweite Argument und dem Benutzer wird eine Meldung angezeigt. Der Rückgabewert von IfError ist der Rückgabewert von Notify und wird in denselben Typ wie das erste Argument für IfError (eine Zahl) umgewandelt. 1

Einfache IsError-Funktion

Formel Beschreibung Ergebnis
IstFehler( 1 ) Das Argument ist kein Fehlerwert. FALSCH
IstFehler( Blank() ) Das Argument ist ein Leerzeichen, aber kein Fehler. FALSCH
IstFehler( 1/0 ) Das Argument ist ein Fehlerwert. WAHR
If( IsError( 1/0 ), Notify( "Es gab ein internes Problem" ) ) Für das erste Argument für IsError wird ein Fehlerwert zurückgegeben (aufgrund der Division durch null). Diese Funktion gibt True zurück, was dazu führt, dass If angezeigt wird, um eine Nachricht für den Benutzer mit der Funktion Notify anzuzeigen. Der Rückgabewert von If ist der Rückgabewert von Notify und wird in denselben Typ wie das erste Argument für If (ein boolescher Wert) umgewandelt. WAHR

Einfacher IsBlankOrError

Formel Beschreibung Ergebnis
IstLeerOderFehler( 1 ) Das Argument ist kein Fehler oder nicht leer. FALSCH
IstLeerOderFehler( Leer() ) Das Argument ist leer. WAHR
IstLeerOderFehler( 1/0 ) Das Argument ist ein Fehler. WAHR

Einfacher Fehler

In diesem Beispiel werden Daten im Vergleich zueinander validiert, was bei einem Problem zu einem Fehler führt.

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

In diesem Beispiel werden einige Fehler durchgelassen, während andere unterdrückt und durch einen Wert ersetzt werden. Im ersten Fall befindet sich b in einem Fehlerzustand, weil die Funktion Value ein ungültiges Argument hat. Da dies für den Formelautor unerwartet ist, wird es weitergeleitet, sodass der Benutzer es sieht. Im zweiten Fall hat b mit der gleichen Formel den Wert 0, was zu einer Division durch Null führt. In diesem Fall weiß der Formelschreiber möglicherweise, dass dies für diese Logik akzeptabel ist, unterdrückt den Fehler (es wird kein Banner angezeigt) und gibt stattdessen „-1“ zurück.

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

Die Tabelle AllErrors kann wie jede andere Tabelle gefiltert werden. Wird gemeinsam mit der Funktion Error verwendet. Erwartete Fehler können beseitigt und die verbleibenden Fehler beibehalten und gemeldet werden. Wenn wir beispielsweise wüssten, dass die Division durch Null in einem bestimmten Kontext kein Problem darstellen würde, könnten diese Fehler mit der folgenden Formel herausgefiltert werden, während alle anderen Fehler erhalten bleiben:

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

Schritt für Schritt

  1. Fügen Sie ein Text input-Steuerelement hinzu, und nennen Sie es TextEingabe1, wenn es nicht standardmäßig so benannt ist.

  2. Fügen Sie ein Label-Steuerelement hinzu, und nennen Sie es Label1, wenn es nicht standardmäßig so benannt ist.

  3. Legen Sie für die Text-Eigenschaft von Label1 die folgende Formel fest:

    IfError( Value( TextInput1.Text ), -1 )
    
  4. Geben Sie in TextInput1 1234ein.

    Label1 zeigt den Wert 1234 an, da dies eine gültige Eingabe für die Value-Funktion ist.

  5. Geben Sie in TextInput1 ToInfinityein.

    Label1 zeigt den Wert -1 an, da dies kein gültiger Input für die Funktion „Wert“ ist. Wenn die Value-Funktion nicht von IfError umschlossen wäre, würde für das Label kein Wert angezeigt werden, da der Fehlerwert als leerer Wert interpretiert würde.

Siehe auch

Formelreferenz für Power Apps