Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
| Functions | Gäller för |
|---|---|
| Error IfError IsError |
|
| IsBlankOrError |
|
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
Funktionen IfError testar värden tills ett fel hittas. 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 IfError i liknar funktionen If : IfError testar för fel, medan If testar för sant.
Använd IfError för att ersätta ett fel med ett giltigt värde så att underordnade beräkningar 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 bearbetningen om åtgärden lyckades. Gäller IfError för 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.
Om du bygger på det sista exemplet kan returvärdet från IfError kontrolleras för att avgöra om det fanns 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 argumenten. De typer 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. Vilket är bra, eftersom det inte finns någon situation där returvärdet från dessa Patch-anrop returneras av IfError.
Obs
Även om beteendet i processen för en ändring, måste typerna av alla argument IfError vara kompatibla för närvarande.
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.
Överväg IfError med följande i stället:
IfError( 1/x, "#DIV/0!" )
Ovanstående formel fungerar inte. Textsträngen "#DIV/0!" tvingas till typen av det första argumentet till IfError, vilket är ett tal. Resultatet av IfError är ännu ett fel eftersom textsträngen inte kan tvingas. Som en korrigering konverterar du det första argumentet till en textsträng så att IfError alltid returnerar en textsträng:
IfError( Text( 1/x ), "#DIV/0!" )
Som du ser ovan IfError kan returnera ett fel om 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 ).
Error posterna omfattar:
| 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 ett felvärde.
Returvärdet är ett booleskt värde, true eller false.
Med hjälp IsError av förhindras ytterligare bearbetning av felet.
IsBlankOrError
Funktionen IsBlankOrError testar antingen ett tomt värde eller ett felvärde och motsvarar Or( IsBlank( X ), IsError( X ) ).
När du aktiverar felhantering för befintliga appar bör du överväga att ersätta 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. Error hanteringen separerar dessa två tolkningar av blank som kan ändra beteendet för befintliga appar som fortsätter att använda IsBlank.
Returvärdet är ett booleskt värde, true eller false.
Med hjälp IsBlankOrError av förhindras ytterligare bearbetning av felet.
Error Använd funktionen för att 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, komplett med Typ och Meddelande, med samma post som beskrivs ovan för IfError funktionen.
I kontexten IfErrorför använder du Error funktionen för att återväxa eller passera genom ett fel. Din logik i IfError kan till exempel avgöra att ett fel i vissa fall kan ignoreras på ett säkert sätt, men i andra fall är felet viktigt att skicka igenom. I IfError eller App.OnError använder du Error( FirstError ) för att passera ett fel.
Funktionen Error kan också skickas en tabell med fel, vilket skulle hittas i tabellen AllErrors . Använd Error( AllErrors ) för att återväxa alla fel och inte bara den första.
En tom post eller en tom tabell som skickas till Error resulterar inte i något fel.
Syntax
Error( ErrorRecord )
Error( ErrorTable )
- ErrorRecord – Obligatoriskt. Error informationspost, inklusive Typ, Meddelande och andra fält. Snällhet krävs. FirstError kan skickas direkt.
- ErrorTable – Obligatoriskt. Tabell med felinformationsposter. AllErrors kan skickas direkt.
IfError( Value1, Replacement1 [, Value2, Replacement2, ... [, 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
Enkel 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( "Det 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 IfError för är returvärdet Avisering, framtvingat till samma typ som det första argumentet till IfError (ett tal). | 1 |
Enkel IsError
| Formel | Beskrivning | Resultat |
|---|---|---|
| IsError( 1 ) | Argumentet är inte ett fel. | falsk |
| IsError( Blank() ) | Argumentet är tomt, men inte ett fel. | falsk |
| IsError( 1/0 ) | Argumentet är ett fel. | sann |
| If( IsError( 1/0 ), Notify( "Det fanns ett internt problem" ) ) ) | Argumentet för att IsError returnera ett felvärde (på grund av division 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( Blank() ) | Argumentet är tomt. | sann |
| IsBlankOrError( 1/0 ) | Argumentet är ett fel. | sann |
Enkel Error
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. Med funktionen Error 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 att omsluta funktionen Värde med IfErrorvisar etiketten inget värde eftersom felvärdet behandlas som tomt.