Bemærk
Adgang til denne side kræver godkendelse. Du kan prøve at logge på eller ændre mapper.
Adgang til denne side kræver godkendelse. Du kan prøve at ændre mapper.
| Functions | Gælder for |
|---|---|
| Error IfError IsError |
|
| IsBlankOrError |
|
Registrerer fejl og angiver en alternativ værdi eller udfører handling. Opret en brugerdefineret fejl, eller videresend en fejl.
Bemærk
Hvis en app har deaktiveret funktionen Fejlstyring på formelniveau under Indstillinger>Opdateringer>udgået, fungerer disse funktioner ikke korrekt.
IfError
Funktionen IfError tester værdier, indtil den finder en fejl. Hvis funktionen opdager en fejl, evaluerer og returnerer funktionen en tilsvarende erstatningsværdi og stopper yderligere evaluering. Der kan også angives en standardværdi for, når der ikke er fundet fejl. Strukturen af IfError ligner strukturen i funktionen If : IfError tester for fejl, mens If tester for true.
Bruges IfError til at erstatte en fejl med en gyldig værdi, så downstream-beregninger kan fortsætte. Du kan f.eks. bruge denne funktion, hvis brugerinput kan resultere i en division med nul:
IfError( 1/x, 0 )
Denne formel returnerer 0 , hvis værdien af x er nul, som 1/x giver en fejl. Hvis x ikke er nul, returneres 1/x.
Stoppe videre behandling
Når formler sammenkædes i funktionsformler, f.eks.:
Patch( DS1, ... );
Patch( DS2, ... )
Den anden Patch-funktion til DS2 vil blive forsøgt, selvom Patch til DS1 ikke kan udføres. Omfanget af en fejl er begrænset til de formler, der er sammenkædet.
Bruges IfError til at udføre en handling og kun fortsætte behandlingen, hvis handlingen lykkedes. Gælder IfError for dette eksempel:
IfError(
Patch( DS1, ... ), Notify( "problem in the first action" ),
Patch( DS2, ... ), Notify( "problem in the second action" )
)
Hvis der er problemer med Patch til DS1, udføres den første Notify. Der sker ingen videre behandling, herunder den anden Patch af DS2. Hvis den første Patchudføres, udføres den anden Patch.
Hvis det valgfrie DefaultResult-argument er angivet, returneres det,, hvis der ikke er registreret fejl. Uden dette argument returneres det sidste Value-argument.
På baggrund af det sidste eksempel kan returværdien fra IfError kontrolleres for at afgøre, om der var problemer:
IfError(
Patch( DS1, ... ), Notify( "problem in the first action" ); false,
Patch( DS2, ... ), Notify( "problem in the second action" ); false,
true
)
Typekompatibilitet
IfError returnerer værdien af et af argumenterne. De typer af alle værdier, der kan returneres af IfError , skal være kompatible.
I det sidste eksempel returnerer Patch en post, der ikke er kompatibel med de booleske poster, der bruges til erstatningsformlerne eller Standardresultatet. Det er fint, da der ikke er nogen situation, hvor returværdien fra disse Patch-kald returneres af IfError.
Bemærk
Selvom funktionsmåden for en ændring er i gang, skal typerne af alle argumenter IfError være kompatible i øjeblikket.
I det simple eksempel, der er beskrevet tidligere:
IfError( 1/x, 0 )
Typerne 1/x og 0 var kompatible, da begge var tal. Hvis de ikke er det, tvinges det andet argument til at matche typen af det første argument.
Excel viser #DIV/0! når en division med nul opstår.
Overvej IfError i stedet med følgende:
IfError( 1/x, "#DIV/0!" )
Ovenstående formel virker ikke. Tekststrengen "#DIV/0!" gennemtvinges til typen af det første argument til IfError, som er et tal. Resultatet af IfError er endnu en fejl, da tekststrengen ikke kan gennemtvinges. Du kan løse problemet ved at konvertere det første argument til en tekststreng, så der IfError altid returneres en tekststreng:
IfError( Text( 1/x ), "#DIV/0!" )
Som vist ovenfor kan du returnere en fejl, IfError hvis Erstatning eller DefaultResult er en fejl.
FirstError/AllErrors
I erstatningsformularerne er der tilgængelige oplysninger om de fejl, der blev fundet, via posten FirstError og AllErrors-tabellen. AllErrors er en tabel med fejlinformationsposter, hvor FirstError er en genvej til den første post i denne tabel. FirstError returnerer altid den samme værdi som First( AllErrors ).
Error poster omfatter:
| Felt | Type | Beskrivelse |
|---|---|---|
| Slags | ErrorKind-fasttekst (tal) | Fejlens kategori. |
| Budskab | Tekststreng | Meddelelse om fejlen, der er velegnet til at blive vist for slutbrugeren. |
| Kilde | Tekststreng | Den placering, hvor fejlen opstod, og som blev brugt til rapportering. For en formel, der er bundet til en kontrolelementegenskab, er denne værdi f.eks. i formen ControlName.PropertyName. |
| Observeret | Tekststreng | Den placering, hvor fejlen vises for brugeren, og som bruges til rapportering. For en formel, der er bundet til en kontrolelementegenskab, er denne værdi f.eks. i formen ControlName.PropertyName. |
| Oplysninger | Post | Detaljer om fejlen. I øjeblikket gives der kun oplysninger om netværksfejl. Denne post indeholder HttpStatusCode, som indeholder HTTP-statuskoden, og HttpResponse, som indeholder brødteksten til svaret fra connectoren eller tjenesten. |
Hvis du f.eks. vil bruge følgende formel som et Button-kontrolelements OnSelect-egenskab:
Set( a, 1/0 )
Tilføj denne formel på egenskaben OnSelect for endnu et kontrolelement af typen Knap:
IfError( a, Notify( "Internal error: originated on " & FirstError.Source & ", surfaced on " & FirstError.Observed ) )
I eksempelformlen ovenfor vises følgende banner, når de to knapper aktiveres efter hinanden:
Typisk vil der kun være én fejl, som FirstError kan arbejde tilstrækkeligt med. Der er dog scenarier, hvor flere fejl kan returneres. Det kan f.eks. være ved brug af en formelsammenkædningsoperator eller Concurrent-funktion. Selv i disse situationer kan rapportering af FirstError være nok til at afsløre et problem i stedet for at overlæsse en bruger med flere fejl. Hvis du stadig har et krav om at arbejde med de enkelte fejl enkeltvis, kan du bruge tabellen AllErrors.
IsError
Funktionen IsError tester en fejlværdi.
Returværdien er boolesk sand eller falsk.
Brug IsError forhindrer yderligere behandling af fejlen.
IsBlankOrError
Funktionen IsBlankOrError tester enten en tom værdi eller en fejlværdi og svarer til Or( IsBlank( X ), IsError( X ) ).
Når du aktiverer fejlhåndtering for eksisterende apps, kan du overveje at erstatte IsBlank med IsBlankOrError for at bevare den eksisterende appfunktionsmåde. Før tilføjelsen af fejlhåndtering blev der brugt en tom værdi til at repræsentere både null-værdier fra databaser og fejlværdier. Error håndtering adskiller disse to fortolkninger af blank , hvilket kan ændre funktionsmåden for eksisterende apps, der fortsat bruger IsBlank.
Returværdien er boolesk sand eller falsk.
Brug IsBlankOrError forhindrer yderligere behandling af fejlen.
Brug funktionen Error til at oprette og rapportere en brugerdefineret fejl. Du kan f.eks. have logik til at bestemme, om en bestemt værdi er gyldig i konteksten eller ej. Det er noget, der ikke automatisk kontrolleres for et problem. Du kan oprette og returnere din egen fejl, komplet med Kind og Message, ved hjælp af den samme post, der er beskrevet ovenfor for funktionen IfError .
I konteksten af IfErrorskal du bruge funktionen Error til at omstyrte eller passere gennem en fejl. Din logik i IfError kan f.eks. beslutte, at en fejl i nogle tilfælde kan ignoreres sikkert, men i andre tilfælde er fejlen vigtig at sende igennem. I IfError eller App.OnError skal du bruge Error( FirstError ) til at gennemgå en fejl.
Funktionen Error kan også overføres en tabel med fejl, som findes i tabellen AllErrors . Brug Error( AllErrors ) til at omstyrte alle fejlene og ikke kun den første.
En tom post eller tom tabel, der overføres til Error , medfører ingen fejl.
Syntaks
Error( ErrorRecord )
Error( ErrorTable )
- ErrorRecord – påkrævet. Error oplysningspost, herunder Kind, Message og andre felter. Venlig er påkrævet. FirstError kan sendes direkte.
- Fejltabel – Påkrævet. Tabel over poster med fejloplysninger. AllErrors kan sendes direkte.
IfError( Value1, Replacement1 [, Value2, Replacement2, ... [, DefaultResult ] ] )
- Værdier – Påkrævet. Formler tester for en fejlværdi.
- Udskiftninger – Påkrævet. De formler, der skal evalueres, og de værdier, der skal returneres, hvis matchende Value-argumenter har returneret en fejl.
- DefaultResult – Valgfrit. De formler, der skal evalueres, hvis formlen ikke finder nogen fejl.
IsError( Værdi )
IsBlankOrError( Værdi )
- Værdi – Påkrævet. Formel, der skal testes.
Eksempler
Simpel IfError
| Formel | Beskrivelse | Resultat |
|---|---|---|
| IfError( 1, 2 ) | Det første argument er ikke en fejl. Funktionen har ikke andre fejl at kontrollere og ingen standard returværdi. Funktionen returnerer det seneste value-argument evalueret. | 1 |
| IfError( 1/0, 2 ) | Det første argument returnerer en fejlværdi (pga. division med nul). Funktionen evaluerer det andet argument og returnerer den som et resultat. | 2 |
| IfError( 10, 20, 30 ) | Det første argument er ikke en fejl. Funktionen har ikke andre fejl at kontrollere og har ingen standard returværdi. Funktionen returnerer argumentet DefaultResult. | 30 |
| IfError( 10, 11, 20, 21, 300 ) | Det første argument 10 er ikke en fejl, så funktionen evaluerer ikke det pågældende arguments tilsvarende udskiftning 11. Det tredje argument 20 er heller ikke en fejl, så funktionen evaluerer ikke det pågældende arguments tilsvarende udskiftning 21. Det femte argument 300 har ingen tilsvarende erstatning og er standard resultatet. Funktionen returnerer det resultat, da formlen ikke indeholder fejl. | 300 |
| IfError( 1/0, Notify( "Der opstod et internt problem") | Det første argument returnerer en fejlværdi (pga. division med nul). Funktionen evaluerer det andet argument, og der vises en meddelelse til brugeren. Returværdien af IfError er returværdien af Notify, der er tvunget til samme type som det første argument til IfError (et tal). | 1 |
Simpel IsError
| Formel | Beskrivelse | Resultat |
|---|---|---|
| IsError( 1 ) | Argumentet er ikke en fejl. | falsk |
| IsError( Blank() ) | Argumentet er tomt, men ikke en fejl. | falsk |
| IsError( 1/0 ) | Argumentet er en fejl. | sand |
| If( IsError( 1/0 ), Notify( "Der opstod et internt problem") | Argumentet til at IsError returnere en fejlværdi (på grund af division med nul). Denne funktion returnerer sand, hvilket medfører, at If viser en meddelelse til brugeren med funktionen Notify. Returværdien for If er returværdien for Notify, som er tvunget til at være af samme type som det første argument for If (en boolesk værdi). | sand |
Simpel IsBlankOrError
| Formel | Beskrivelse | Resultat |
|---|---|---|
| IsBlankOrError( 1 ) | Argumentet er ikke tomt eller en fejl. | falsk |
| IsBlankOrError( Blank() ) | Argumentet er tomt. | sand |
| IsBlankOrError( 1/0 ) | Argumentet er en fejl. | sand |
Simpel Error
I dette eksempel valideres datoer i forhold til hinanden, hvilket resulterer i en fejl, hvis der er problemer.
If( StartDate > EndDate,
Error( { Kind: ErrorKind.Validation, Message: "Start Date must be before End Date" } ) )
I dette eksempel kan nogle af fejlene blive videresendt, mens andre bliver undertrykt og udskiftet med en værdi. I det første tilfælde er b i en fejltilstand, fordi funktionen Value har et ugyldigt argument. Fordi dette er uventet af formelforfatteren, sendes det igennem, så brugeren ser det. I det andet tilfælde, med den samme formel,b har værdien 0, hvilket resulterer i en division med nul. I dette tilfælde kan formelskriveren vide, at dette er acceptabelt for denne logik, undertrykke fejlen (der vises intet banner) og returnere -1 i stedet.
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 filtreres på samme måde som enhver anden tabel. Bruges sammen med funktionen Error , kan forventede fejl fjernes, og de resterende fejl bevares og rapporteres. Hvis vi f.eks. vidste, at division med nul ikke ville være et problem i en bestemt kontekst, kunne disse fejl filtreres fra, så alle andre fejl blev efterladt intakte med følgende formel:
Error( Filter( AllErrors, Kind <> ErrorKind.Div0 ) )
Trin for trin
Tilføj et Text input-kontrolelement, og navngiv det TextInput1, hvis det ikke allerede har dette navn som standard.
Tilføj et Label-kontrolelement, og navngiv det Label1, hvis det ikke allerede har dette navn som standard.
Angiv formlen for Label1s Text-egenskab til:
IfError( Value( TextInput1.Text ), -1 )Skriv 1234 i TextInput1.
Label1 viser værdien 1234 , da dette er et gyldigt input til funktionen Value.
Skriv ToInfinity i TextInput1.
Label1 viser value-1 , da dette ikke er et gyldigt input til Value funktionen. Uden at ombryde funktionen Value med IfErrorviser etiketten ingen værdi, da fejlværdien behandles som en tom værdi.