Dela via


Funktionerna Error, IfError, IsError, IsBlankOrError

Gäller to: Arbetsyteappar Dataverse formula columns Datorflöden Modellbaserade appar Power Platform CLI

Identifierar fel och tillhandahåller ett alternativt värde eller vidtar åtgärder. Skapa ett anpassat fel eller skicka ett fel.

Kommentar

IfError

IfError-funktionen testar värden tills ett fel påträffas. Om funktionen upptäcker ett fel evalueras och returneras motsvarande ersättningsvärde och stoppar ytterligare utvärdering. Du kan även ange ett standardvärde för när inga fel påträffas. Strukturen på IfError liknar If-funktionen: IfError testar för fel medan If testar för true.

Använd IfError för att ersätta ett fel med ett giltigt värde så att beräkningar med efterföljande kan fortsätta. Använd till exempel funktionen om användarindata kan resultera i delning med noll:

IfError( 1/x, 0 )

Den här formeln returnerar 0 om värdet x är noll som 1/x genererar ett fel. Om x inte är noll returneras 1/x.

Stoppa ytterligare bearbetning

När du sammanfogar formler i beteendeformler, t.ex.:

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

Den andra Patch funktionen till DS2 görs även om Patch till DS1 inte fungerar. Omfattningen av ett fel är begränsad till varje länkad formel.

Använd IfError för att utföra en åtgärd och endast fortsätta behandlingen om åtgärden lyckades. Använda IfError i det här exemplet:

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

Om Patch för DS1 har ett problem utförs den första Meddela. Ingen ytterligare bearbetning omfattar även den andra Patch av DS2. Om den första Patch lyckas körs den andra Patch.

Om den anges returneras det valfria argumentet DefaultResult om inga fel upptäcks. Utan det här argumentet returneras det sista värde-argumentet.

Bygger på det sista exemplet kan returvärdet från IfError kontrolleras för att avgöra om det har uppstått några problem:

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

Typkompatibilitet

IfError kommer att returnera värdet för ett av argumenten. Typerna av alla värden som kan returneras av IfError måste vara kompatibla.

I det sista exemplet returnerar Patch en post som inte är kompatibel med de booleska värden som används för formlerna ersättning eller DefaultResult. Det kan vara bra eftersom det inte finns någon situation där returvärdet från dessa Patch samtal returneras av IfError.

Kommentar

När beteendet för en ändring pågår måste typerna för alla argument för IfError vara kompatibla för tillfället.

I det enkla exempel som beskrivs ovan:

IfError( 1/x, 0 )

Typerna 1/x och 0 var kompatibla med varandra, precis som tal. Om de inte är det kommer det andra argumentet att tvingas matcha typen för det första argumentet.

Excel visar #DIV/0! när en delning med noll uppstår.

Tänk IfError med följande:

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

Ovanstående formel fungerar inte. Textsträngen "#DIV/0!" omvandlas till den typ av första argumentet som används till IfError, vilket är ett tal. Resultatet av IfError kommer att vara ännu ett annat fel eftersom det inte går att tvinga textsträngen. Du bör konvertera det första argumentet till en textsträng så att IfError alltid returnerar en textsträng:

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

Som du såg ovan kan IfError returnera ett fel om det ersättning eller DefaultResult är ett fel.

FirstError / AllErrors

Inom ersättningsformlerna finns information om de hittade felen tillgänglig via FirstError post och AllErrors tabell. AllErrors är en tabell över felinformationsposter där FirstError är en genväg till den första posten i den här tabellen. FirstError returnerar alltid samma värde som First( AllErrors ).

Felposter inkluderar:

Fält Type Beskrivning
Variant ErrorKind enum (tal) Kategori för felet.
Meddelande Textsträng Meddelande om felet som är lämpligt att visas för användaren.
Source Textsträng Plats där felet uppstod och används för rapportering. För en formel som är bunden till en kontrollegenskap kommer detta till exempel att vara i formuläret ControlName.PropertyName.
Observerad Textsträng Plats där felet visas för användaren och används för rapportering. För en formel som är bunden till en kontrollegenskap kommer detta till exempel att vara i formuläret ControlName.PropertyName.
Details Post Detaljer om felet. För tillfället finns endast information om nätverksfel. Den här posten inkluderar HttpStatusCode som innehåller HTTP-statuskoden och HttpResponse som innehåller brödtexten i svaret från kopplingen eller tjänsten.

Button som Buttonkontrollens egenskap OnSelect:

Set( a, 1/0 )

Lägg till formeln på egenskapen OnSelect på en andra kontroll för Button:

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

Exempelformeln ovan visar följande banner när de två knapparna aktiveras i följd:

Button-kontroll aktiverad och visar ett meddelande från Notify-funktionen.

Vanligtvis finns det bara ett fel som FirstError felmeddelande kan fungera med. Det finns dock scenarier där flera fel kan returneras. Till exempel när du använder en formellänkningsoperator eller Concurrent funktionen. Även i de här situationerna kan det räcka med att rapportera FirstError för att avslöja ett problem istället för att överbelasta en användare med flera fel. Om du fortfarande måste arbeta med varje fel enskilt kan du använda tabellen AllErrors.

IsError

Funktionen IsError testar för ett felvärde.

Returvärdet är ett booleskt värde, true eller false.

Om du använder IsError kan du inte längre behandla felet.

IsBlankOrError

Funktionen IsBlankOrError testar antingen för ett tomt värde eller för ett felvärde och motsvarar Or( IsBlank( X ), IsError( X ) ).

När du aktiverar felhantering för befintliga program bör du överväga att byta ut IsBlank med IsBlankOrError för att bevara befintligt appbeteende. Innan felhanteringen lades till användes ett tomt för att representera både null-värden från databaser och felvärden. Felhantering skiljer dessa två tolkningar av tomt vilket kan ändra funktionen för befintliga program som fortsätter att använda IsBlank.

Returvärdet är ett booleskt värde, true eller false.

Om du använder IsBlankOrError förhindrar du att felet bearbetas vidare.

Använd funktionen Error om du vill skapa och rapportera ett anpassat fel. Till exempel kan du ha logik för att avgöra om ett givet värde är giltigt för ditt sammanhang eller inte något som inte kontrolleras för ett problem automatiskt. Du kan skapa och returnera ett eget fel, tillsammans med Variant and Meddelande, med samma post som beskrivs ovan för IfError-funktionen.

I kontexten IfError, använd funktionen Error för att utlösa igen eller skicka fel. Logiken i IfError kanske bestämmer att ett fel i vissa fall kan ignoreras säkert, men i andra fall är det viktigt att skicka igenom det. I IfError eller Program.OnError, använd Error( FirstError ) för att skicka ett fel.

Funktionen Error kan också passeras en tabell med fel, som skulle finnas i tabellen AllErrors. Använd Error( AllErrors ) att kasta om alla fel och inte bara det första.

En tom post eller en tom tabell som skickas till Fel resulterar inte i något fel.

Syntax

Fel( ErrorRecord )
Fel( ErrorTable )

  • ErrorRecord – Obligatoriskt. Post för felinformation, inklusive Variant,Meddelande och andra fält. Variant krävs. FirstError kan skickas direkt.
  • ErrorTable – Obligatoriskt. Tabell med felinformationsposter. AllErrors kan skickas direkt.

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

  • Value(s) – obligatoriskt. Formler för att testa ett felvärde.
  • Replacement(s) – krävs. Formler som ska utvärderas och värden som ska returneras om matchning argument Värde returnerade ett fel.
  • DefaultResult – Valfritt. Formler för att utvärdera om det inte finns några fel i formeln.

IsError( Value )
IsBlankOrError( värde )

  • Value – Krävs. Formel som ska testas.

Exempel

Enkelt IfError

Formel Beskrivning Resultat
IfError( 1, 2 ) Det första argumentet är inte ett fel. Funktionen har inga andra fel för att kontrollera och inget standardvärde har returnerats. Funktionen returnerar det senaste värde-argumentet som utvärderas. 1
IfError( 1/0, 2 ) Det första argumentet returnerar ett felvärde (på grund av delning med noll). Funktionen evaluerar det andra argumentet och returnerar det som resultatet. 2
IfError( 10, 20, 30 ) Det första argumentet är inte ett fel. Funktionen har inga andra fel för att kontrollera men har ett standardvärde returnerat. Funktionen returnerar argumentet DefaultResult. 30
IfError( 10, 11, 20, 21, 300 ) Det första argumentet 10 är inte ett fel, så funktionen utvärderar inte motsvarande ersättnings 11 för argumentet. Det tredje argumentet 20 är inte ett fel, så funktionen utvärderar inte motsvarande ersättnings 21 för argumentet. Det femte argumentet 300 har ingen motsvarande ersättning och är standardresultatet. Funktionen returnerar det resultatet eftersom formeln inte innehåller några fel. 300
IfError( 1/0, Notify( "Ett internt fel uppstod" ) ) Det första argumentet returnerar ett felvärde (på grund av delning med noll). Funktionen utvärderar det andra argumentet och visar ett meddelande till användaren. Returvärdet för IfError är returvärdet för Notify, tvingat till samma typ som det första argumentet för IfError (ett nummer). 1

Enkelt IsError

Formel Beskrivning Resultat
IsError( 1 ) Argumentet är inte ett fel. falskt
IsError( Blank() ) Argumentet är tomt, men inte ett fel. falskt
IsError( 1/0 ) Argumentet är ett fel. true
If( IsError( 1/0 ), Notify( "Ett internt fel uppstod" ) ) Argumentet till IsError returnerar ett felvärde (på grund av delning med noll). Funktionen returnerar true, vilket gör att If visar ett meddelande för användaren med funktionen Notify. Returvärdet för If är returvärdet för Meddela, tvingat till samma typ som det första argumentet för If (ett booleskt). true

Enkel IsBlankOrError

Formel Beskrivning Resultat
IsBlankOrError( 1 ) Argumentet är inte ett fel eller tom. falskt
IsBlankOrError( Blank() ) Argumentet är tomt. true
IsBlankOrError( 1/0 ) Argumentet är ett fel. true

Enkelt fel

I det här exemplet verifieras datum relativt till varandra, vilket resulterar i ett fel om det uppstår problem.

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

I det här exemplet tillåts vissa fel passera medan andra förs över och ersätts med ett värde. I det första fallet visas ett felmeddelande för b eftersom funktionen Value har ett ogiltigt argument. Eftersom detta är oväntat av formelskrivaren, skickas det igenom så att användaren kommer att se det. I det andra fallet får b värdet 0 med samma formel, vilket resulterar i en delning med noll. I det här fallet kanske formelns skribent vet att detta är acceptabla för den här logiken, vilket gör att felet inte visas (ingen banderoll visas) och returnerar -1 i stället.

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

Tabellen AllErrors kan filtreras på samma sätt som andra tabeller. När funktionen Error används kan förväntade fel tas bort och återstående fel bevaras och rapporteras. Om vi t.ex. ser att delning med noll inte skulle vara ett problem i ett visst sammanhang kan de felen filtreras bort och lämna alla andra fel intakta med följande formel:

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

Steg-för-steg

  1. Lägg till en Text Input-kontroll och ge den namnet TextInput1, om den inte redan har det namnet som standard.

  2. Lägg till en label-kontroll och ge den namnet Label1, om den inte redan har det namnet som standard.

  3. Ange formeln för Text-egenskapen för Label1 som:

    IfError( Value( TextInput1.Text ), -1 )
    
  4. I TextInput1, ange 1234.

    Label1 visar värdet 1234 eftersom det är en giltig inmatning för funktionen Choices.

  5. I TextInput1, ange ToInfinity.

    Label1 visar värdet -1 eftersom det inte är en giltig inmatning för funktionen Choices. Utan radbyte i Value-funktionen med IfError visar etiketten inget värde eftersom felvärdet behandlas som ett blank- värde.

Se även

Formelreferens för Power Apps