Share via


Funktionerne Error, IfError, IsError, IsBlankOrError

Gælder for: Lærredsapps Dataverse formelkolonner Skrivebordsflows Modeldrevne apps 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

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 for x er nul, da 1/x vil give 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 for et af dens argumenter. 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 værdier, som bruges til Replacement-formler eller DefaultResult. 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, ændres det andet argument, så det svarer til typen af det første argument.

I Excel vises #DIV/0!, når der indtræffer en division med nul.

Overvej IfError med følgende i stedet:

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

Ovenstående formel virker ikke. Tekststrengen "#DIV/0!" konverteres til typen for det første argument til IfError, som er et tal. Resultatet af IfError er endnu en fejl, da tekststrengen ikke kan konverteres. 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 over poster med fejloplysninger, hvor FirstError er en genvej til den første post i denne tabel. FirstError returnerer altid den samme værdi som First( All AllErrors ).

Fejlposter inkluderer:

Felt Type Beskrivelse
Kind ErrorKind-fasttekst (tal) Fejlens kategori.
Message Tekststreng Meddelelse om fejlen, der er velegnet til at blive vist for slutbrugeren.
Source Tekststreng Den placering, hvor fejlen opstod, og som blev brugt til rapportering. Hvis en formel f.eks. er bundet til en kontrolelementegenskab, vises den i formularen ControlName.PropertyName.
Observed Tekststreng Den placering, hvor fejlen vises for brugeren, og som bruges til rapportering. Hvis en formel f.eks. er bundet til en kontrolelementegenskab, vises den i formularen ControlName.PropertyName.
Details Post Detaljer om fejlen. I øjeblikket er det kun netværksfejl, der vises detaljer om. 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:

Kontrolelementet Button er aktiveret og viser en meddelelse fra funktionen Notify.

Der vil som regel kun være én fejl, som FirstError kan håndtere. 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.

Hvis du bruger IsError, forhindres eventuel 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 fejlhåndteringen blev tilføjet, 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.

Hvis du bruger IsBlankOrError, forhindres 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 )
Error( ErrorTable )

  • ErrorRecord – påkrævet. Post med fejloplysninger, herunder Type, Meddelelse og andre felter. Kind er påkrævet. FirstError kan overføres direkte.
  • ErrorTable – påkrævet. Tabel over poster med fejloplysninger. AllErrors kan overføres direkte.

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

  • Value(s) – påkrævet. Formler tester for en fejlværdi.
  • Replacement(s) – obligatorisk. De formler, der skal evalueres, og de værdier, der skal returneres, hvis matchende Value-argumenter har returneret en fejl.
  • DefaultResult – valgfri. De formler, der skal evalueres, hvis formlen ikke finder nogen fejl.

IsError( Value )
IsBlankOrError( Value )

  • Value – 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 var 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
IsError( 1 ) Argumentet er ikke en fejl. false
IsError( Blank() ) Argumentet er tomt, men ikke en fejl. false
IsError( 1/0 ) Argumentet er en fejl. true
If( IsError( 1/0 ), Notify( "Der var 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). true

Simpel IsBlankOrError

Formel Beskrivelse Resultat
IsBlankOrError( 1 ) Argumentet er ikke tomt eller en fejl. false
IsBlankOrError( Blank() ) Argumentet er tomt. true
IsBlankOrError( 1/0 ) Argumentet er en fejl. true

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 passere igennem, mens andre bliver undertrykt og udskiftet med en værdi. I det første tilfælde er b i fejltilstand, fordi funktionen Value har et ugyldigt argument. Da dette ikke er forklaret af formelskriveren, sendes den igennem, så brugeren kan se den. I det andet tilfælde vil b have værdien 0 med den samme formel, 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. ved, at division med nul ikke vil være et problem i en bestemt kontekst, kan disse fejl blive filtreret fra, så alle andre fejl forbliver intakte, med følgende formel:

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

Trin for trin

  1. Tilføj et Text input-kontrolelement, og navngiv det TextInput1, hvis det ikke allerede har dette navn som standard.

  2. Tilføj et Label-kontrolelement, og navngiv det Label1, hvis det ikke allerede har dette navn som standard.

  3. Angiv formlen for Label1s Text-egenskab til:

    IfError( Value( TextInput1.Text ), -1 )
    
  4. Skriv 1234 i TextInput1.

    Label1 viser værdien 1234, da det er et gyldigt input for funktionen Value.

  5. Skriv ToInfinity i TextInput1.

    Label1 viser værdien -1, da det ikke er et gyldigt input for funktionen Value. Uden at funktionen Value ombrydes med IfError, viser etiketten ikke nogen værdi, da fejlværdien behandles som tom.

Se også

Formelreference for Power Apps