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

Gilt: Canvas-Spps Dataverse Formelspalten Desktop-Flows Modellgesteuerte Apps 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

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 0 aus, 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 booleschen Werten kompatibel ist, die für die Formeln Replacement oder DefaultResult verwendet werden. 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 das zweite Argument gezwungen, dem Typ des ersten Arguments zu entsprechen.

Excel wird #DIV/0! anzeigen, wenn eine Division durch Null auftritt.

Verwenden Sie IfError stattdessen mit Folgendem:

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

Die obige Formel funktioniert nicht. Die Textzeichenfolge "#DIV/0!" wird zum Typ des ersten Arguments für IfError gezwungen, das ist eine Zahl. Das Ergebnis von IfError wird ein weiterer Fehler sein, 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 von Fehlerinformationsdatensätzen, wobei FirstError eine Verknüpfung zum ersten Datensatz dieser Tabelle ist. FirstError gibt immer denselben Wert zurück wie First( AllErrors ).

Fehlerdatensätze umfassen:

Feld Typ Beschreibung
Variante 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. Bei einer Formel, die an eine Steuerelementeigenschaft gebunden ist, befindet sich dies beispielsweise im Formular ControlName.PropertyName.
Beobachtet Zeichenfolge Ort, an dem der Fehler dem Benutzer angezeigt wird, der für die Nachricht verwendet wird. Bei einer Formel, die an eine Steuerelementeigenschaft gebunden ist, befindet sich dies beispielsweise im Formular ControlName.PropertyName.
Details Datensatz Informationen zum Fehler. Details werden derzeit nur für Netzwerkfehler bereitgestellt. Dieser Datensatz enthält HttpStatusCode, der den HTTP-Statuscode enthält, und HttpResponse, die den Text der Antwort vom Connector oder Service 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 tritt nur ein Fehler auf, den FirstError ausreichend damit 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.

Verwenden 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 dem Hinzufügen 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.

Verwenden von IsBlankOrError verhindert die weitere Bearbeitung 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.OnErrorError( 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

Error( ErrorRecord )
Error( ErrorTable )

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

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

  • Wert(e) – Erforderlich. Ein oder mehrere Formeln, die auf einen Fehlerwert geprüft werden.
  • Ersatz– 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( Value )
IsBlankOrError( Wert )

  • Wert – Erforderlich. Formel testen.

Beispiele

Einfache IfError-Funktion

Formel Beschreibung Ergebnis
IfError( 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
IfError( 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
IfError( 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
IfError( 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( "There was an internal 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
IsError( 1 ) Das Argument ist kein Fehlerwert. False
IsError( Blank() ) Das Argument ist ein Leerzeichen, aber kein Fehler. False
IsError( 1/0 ) Das Argument ist ein Fehlerwert. true
If( IsError( 1/0 ), Notify( "There was an internal 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. true

Einfacher IsBlankOrError

Formel Beschreibung Ergebnis
IsBlankOrError( 1 ) Das Argument ist kein Fehler oder nicht leer. False
IsBlankOrError( Blank() ) Das Argument ist leer. true
IsBlankOrError( 1/0 ) Das Argument ist ein Fehler. true

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 ist der Fehlerstatut b in einem Fehlerzustand, weil die Funktion Value ein ungültiges Argument hat. Da dies vom Formelschreiber nicht erwartet wird, wird es weitergegeben, damit der Benutzer es sieht. Im zweiten Fall ist der Wert mit der gleichen Formel b „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 wissen, dass die Division durch Null in einem bestimmten Kontext kein Problem darstellt, können diese Fehler herausgefiltert werden, wobei alle anderen Fehler mit der folgenden Formel intakt 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 TextInput11234ein.

    Für Label1 wird der Wert 1234 angezeigt, da es sich um eine gültige Eingabe für die Value-Funktion handelt.

  5. Geben Sie in TextInput1ToInfinityein.

    Für Label1 wird der Wert -1 angezeigt, da es sich nicht um eine gültige Eingabe für die Value-Funktion handelt. 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

Formelbezug für Power Apps