Funktionerne Error, IfError, IsError, IsBlankOrError
Gælder for: Formelkolonner Dataverse for lærredapps Skrivebordsflow Modelbaserede apps Power Pages Power Platform CLI
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 der bliver fundet 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 i IfError ligner den, der er i funktionen If: IfError tester for fejl, men If tester for sand.
Brug 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.
Brug IfError til at udføre en handling og fortsætte med at behandle, hvis handlingen lykkedes. Anvend IfError i 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.
Hvis du bygger videre på det sidste eksempel, kan returværdien fra IfError kontrolleres for at finde ud af, om der opstod 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. Som er OK, da der ikke findes en situation, hvor returværdien fra disse Patch ville blive returneret af IfError.
Bemærk
Mens funktionsmåden for en ændring er aktiveret, skal alle typer argumenter til IfErrorvæ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 med følgende i stedet:
IfError( 1/x, "#DIV/0!" )
Ovenstående formel virker ikke. Tekststrengen "#DIV/0!"
tvinges til typen af det første argument til IfError, som er et tal. Resultatet af IfError er endnu en fejl, da tekststrengen ikke kan tvinges. Du kan løse problemet ved at konvertere det første argument til en tekststreng, så IfError altid returnerer en tekststreng:
IfError( Text( 1/x ), "#DIV/0!" )
Som vist ovenfor kan IfError returnere en fejl, hvis Replacement 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 ).
Fejlposter inkluderer:
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. |
Detaljer | 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 for en fejlværdi.
Returværdien er boolesk sand eller falsk.
Brug af IsError forhindrer yderligere behandling af fejlen.
IsBlankOrError
Funktionen IsBlankOrError tester for 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. Fejlhåndtering adskiller disse to fortolkninger af tom, hvilket kan ændre funktionsmåden for eksisterende apps, der fortsætter med at bruge IsBlank.
Returværdien er boolesk sand eller falsk.
Brug af 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 Type og Meddelelse, ved hjælp af den samme post, der er beskrevet ovenfor for funktionen IfError.
I konteksten af IfError skal du bruge funktionen Error til at genudløse eller passere gennem en fejl. Din logik IfError kan f.eks. bestemme, at i visse tilfælde kan en fejl sikkert ignoreres, mens den i andre tilfælde er vigtig at sende ud. I IfError eller App.OnError skal du bruge Error( FirstError ) til at udsende en fejl.
Funktionen Error kan også få overført en fejltabel, som findes i tabellen AllErrors. Brug Error( AllErrors ) til at genudløse alle fejlene og ikke kun den første.
En tom post eller en tom tabel, der er overført til Error, resulterer i ingen fejl.
Syntaks
Error( ErrorRecord )
Fejl( Fejltabel )
- ErrorRecord – påkrævet. Post med fejloplysninger, herunder Type, Meddelelse 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 for IfError er returværdien for Notify, som er tvunget til at være af samme type som det første argument for IfError (et tal). | 1 |
Simpel IsError
Formel | Beskrivelse | Resultat |
---|---|---|
ErFejl( 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") ) | Det første argument til IsError returnerer en fejlværdi (pga. 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 fejl
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. Når du bruger 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 funktionen Value ombrydes med IfError, viser etiketten ikke nogen værdi, da fejlværdien behandles som tom.