Funktionerna Error, IfError, IsError, IsBlankOrError
Gäller för: Formelkolumner Dataverse för arbetsyteappar Datorflöden Modellbaserade appar Power Pages Power Platform CLI
Identifierar fel och tillhandahåller ett alternativt värde eller vidtar åtgärder. Skapa ett anpassat fel eller skicka ett fel.
Obs
Om en app har inaktiverat felhanteringsfunktionen på formelnivå under Inställningar Uppdateringar>har dragits tillbaka,> kommer dessa funktioner inte att fungerakorrekt.
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 för x
är noll, vilket 1/x
ger 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 returnerar värdet för ett av dess argument. 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 ersättningsformlerna 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 tvingas det andra argumentet att matcha typen av det första argumentet.
Excel visar #DIV/0! när en division med noll inträffar.
Tänk IfError med följande:
IfError( 1/x, "#DIV/0!" )
Ovanstående formel fungerar inte. Textsträngen "#DIV/0!"
tvingas till typen av det första argumentet till IfError, som är ett tal. Resultatet av IfError är ännu ett fel eftersom textsträngen inte kan tvingas. 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 med 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 | Typ | Beskrivning |
---|---|---|
Sort | ErrorKind enum (tal) | Kategori för felet. |
Meddelande | Textsträng | Meddelande om felet som är lämpligt att visas för användaren. |
Källa | Textsträng | Plats där felet uppstod och används för rapportering. För en formel som är bunden till en kontrollegenskap finns det här värdet i formatet ControlName.PropertyName. |
Observerade | 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 finns det här värdet i formatet ControlName.PropertyName. |
Detaljer | Post | Detaljer om felet. För närvarande tillhandahålls 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:
Vanligtvis kommer Dit bara att finnas ett fel som FirstError kan arbeta tillräckligt 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 förhindras ytterligare bearbetning av 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 felhantering lades till användes ett tomt värde 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örhindras ytterligare bearbetning av felet.
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. Snällhet krävs. FirstError kan skickas direkt.
- ErrorTable – Obligatoriskt. Tabell med felinformationsposter. AllErrors kan skickas direkt.
IfError( Värde1,Ersättning1 [, Värde2; Ersättning2, ... [, DefaultResult ] ] )
- Värden – obligatoriskt. Formler för att testa ett felvärde.
- Byten – Obligatoriskt. 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( Värde )
IsBlankOrError( Värde )
- Värde – Obligatoriskt. 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( "Dit var ett internt problem" ) ) | 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. | falsk |
IsError( Tom() ) | Argumentet är tomt, men inte ett fel. | falsk |
IsError( 1/0 ) | Argumentet är ett fel. | sann |
If( IsError( 1/0 ), Notify( "Dit var ett internt problem" ) ) | 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). | sann |
Enkel IsBlankOrError
Formel | Beskrivning | Resultat |
---|---|---|
IsBlankOrError( 1 ) | Argumentet är inte ett fel eller tom. | falsk |
IsBlankOrError( Tom() ) | Argumentet är tomt. | sann |
IsBlankOrError( 1/0 ) | Argumentet är ett fel. | sann |
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 är b i ett feltillstånd eftersom funktionen Value har ett ogiltigt argument. Eftersom detta är oväntat av formelskrivaren skickas det igenom så att användaren ser det. I det andra fallet, med samma formel, har b värdet 0, vilket resulterar i en division 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 till exempel visste att division med noll inte skulle vara ett problem i ett visst sammanhang skulle dessa fel kunna filtreras bort och lämna alla andra fel intakta med följande formel:
Error( Filter( AllErrors, Kind <> ErrorKind.Div0 ) )
Steg-för-steg
Lägg till en Text Input-kontroll och ge den namnet TextInput1, om den inte redan har det namnet som standard.
Lägg till en label-kontroll och ge den namnet Label1, om den inte redan har det namnet som standard.
Ange formeln för Text-egenskapen för Label1 som:
IfError( Value( TextInput1.Text ), -1 )
I TextInput1, ange 1234.
Label1 visar värdet 1234 eftersom detta är en giltig indata till funktionen Value.
I TextInput1, ange ToInfinity.
Label1 visar value-1 eftersom detta inte är en giltig indata till funktionen Value. Utan radbyte i Value-funktionen med IfError visar etiketten inget värde eftersom felvärdet behandlas som ett blank- värde.