Del via


Funksjonene Error, IfError, IsError og IsBlankOrError

Gjelder for: Formelkolonner for lerretsapper Dataverse Skrivebordsflyter CLI for modelldrevne apper Power Pages Power Platform

Oppdager feil, og oppgir en alternativ verdi eller utfører en handling. Opprett en egendefinert feil, eller send en feil.

Merk

Hvis en app har deaktivert funksjonen for feilbehandling på formelnivå under Innstillinger>Oppdateringer>trukket tilbake, vil ikke disse funksjonene fungere som de skal.

IfError

IfError-funksjonen tester verdier til den finner en feil. Hvis funksjonen oppdager en feil, evaluerer funksjonen og returnerer en tilsvarende erstatningsverdi, og videre evaluering stoppes. En standardverdi kan også oppgis når det ikke blir funnet feil. Strukturen til IfError ligner på If-funksjonen: IfError tester for feil, mens If tester for sann.

Bruk IfError til å erstatte en feil med en gyldig verdi, slik at nedstrømsberegninger kan fortsette. Bruk for eksempel denne funksjonen hvis brukerinndata kan resultere i en divisjon med null:

IfError( 1/x, 0 )

Denne formelen returnerer 0 hvis verdien av x er null, som 1/x gir en feil. Hvis x ikke er null, returneres 1/x.

Stoppe videre behandling

Ved sammenkjeding av formler i virkemåteformler, for eksempel:

Patch( DS1, ... );
Patch( DS2, ... )

Den andre Patch-funksjonen til DS2 blir forsøkt, selv om Patch til DS1 mislykkes. Omfanget av en feil er begrenset til hver formel som er kjedet.

Bruk IfError til å utføre en handling og bare fortsette å behandle hvis handlingen var vellykket. Bruke IfError på dette eksemplet:

IfError(
    Patch( DS1, ... ), Notify( "problem in the first action" ),
    Patch( DS2, ... ), Notify( "problem in the second action" )
)

Hvis Patch for DS1 har et problem, utføres den første Notify. Ingen videre behandling skjer, inkludert den andre Patch av DS2. Hvis første Patch er vellykket, utføres andre Patch.

Hvis angitt, returneres det valgfrie DefaultResult-argumentet hvis ingen feil blir oppdaget. Uten dette argumentet returneres det siste Value-argumentet.

Angående det siste eksemplet, kan returverdien fra IfError kontrolleres for å finne ut om det var noen problemer:

IfError(
    Patch( DS1, ... ), Notify( "problem in the first action" );  false,
    Patch( DS2, ... ), Notify( "problem in the second action" ); false,
    true
)

Typekompatibilitet

IfError returnerer verdien til ett av argumentene. Typene av alle verdier som kan returneres av IfError, må være kompatible.

I det siste eksemplet returnerer Patch en post som ikke er kompatibel med de boolske verdiene som brukes for erstatningsformlene eller DefaultResult. Dette er greit, ettersom det ikke er noen tilfeller der returverdien fra disse Patch-kallene returneres av IfError.

Obs!

I løpet av prosessen som utføres for en endring, må alle typene for alle argumenter til IfError være kompatible for øyeblikket.

I det enkle eksemplet beskrevet tidligere:

IfError( 1/x, 0 )

Typene 1/x og 0 var kompatible siden begge var tall. Hvis de ikke er det, tvinges det andre argumentet til å samsvare med typen til det første argumentet.

Excel viser #DIV/0! når en divisjon med null oppstår.

Vurder IfError med følgende i stedet:

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

Formelen ovenfor fungerer ikke. Tekststrengen "#DIV/0!" tvinges til typen til det første argumentet til IfError, som er et tall. Resultatet av IfError er enda en feil siden tekststrengen ikke kan tvinges. Som en hurtigreparasjon konverterer du det første argumentet til en tekststreng, slik at IfError alltid returnerer en tekststreng:

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

Som sett ovenfor kan IfError returnere en feil hvis Replacement eller DefaultResult er en feil.

FirstError/AllErrors

Informasjon om feilene som ble funnet, er tilgjengelig i erstatningsformlene via FirstError-oppføringen og AllErrors-tabellen. AllErrors er en tabell med feilinformasjonsoppføringer med FirstError som en snarvei til den første oppføringen i denne tabellen. FirstError returnerer alltid samme verdi som First( AllErrors ).

Oppføringer for feil omfatter følgende:

Felt Type Beskrivelse
Snill ErrorKind-opplisting (tall) Kategori for feilen.
Budskap Tekststreng Melding om feilen som er egnet til å vises til sluttbrukeren.
Kilde Tekststreng Stedet feilen stammer fra, brukes til rapportering. For en formel som er bundet til en kontrollegenskap, er for eksempel denne verdien i skjemaet ControlName.PropertyName.
Observert Tekststreng Stedet der feilen vises for brukeren, brukes til rapportering. For en formel som er bundet til en kontrollegenskap, er for eksempel denne verdien i skjemaet ControlName.PropertyName.
Detaljer Spill inn Detaljer om feilen. For øyeblikket gis detaljer bare for nettverksfeil. Denne oppføringen omfatter HttpStatusCode, som inneholder HTTP-statuskoden og HttpResponse, som inneholder brødteksten i svaret fra koblingen eller tjenesten.

Vurder for eksempel følgende formel i Button-kontrollens OnSelect-egenskap:

Set( a, 1/0 )

Og denne formelen for egenskapen OnSelect for en andre Button-kontroll:

IfError( a, Notify( "Internal error: originated on " & FirstError.Source & ", surfaced on " & FirstError.Observed ) )

Eksempelformelen ovenfor viser følgende banner når de to knappene aktiveres i rekkefølge:

Button-kontroll aktivert, og viser et varsel fra Notify-funksjonen.

Vanligvis vil Der bare være én feil som FirstError kan fungere tilstrekkelig med. Det finnes imidlertid scenarioer der flere feil kan returneres. Når du for eksempel bruker en operator for formelkjeding eller Concurrent-funksjonen. Selv i disse situasjonene kan rapportering av FirstError være nok til å avsløre et problem i stedet for å overbelaste en bruker med flere feil. Hvis du likevel har et krav om at hver feil skal behandles enkeltvis, kan du bruke AllErrors-tabellen.

IsError

IsError-funksjonen tester for en feilverdi.

Returverdien til begge er den boolske verdien true eller false.

Bruk av IsError forhindrer videre behandling av feilen.

IsBlankOrError

Funksjonen IsBlankOrError tester for en tom verdi eller en feilverdi og tilsvarer Or( IsBlank( X ), IsError( X ) ).

Når du aktiverer feilhåndtering for eksisterende apper, bør du vurdere å erstatte IsDiagram med IsBlankOrError for å beholde eksisterende appvirkemåte. Før feilhåndtering ble lagt til, ble en tom verdi brukt til å representere både nullverdier fra databaser og feilverdier. Feilhåndtering skiller disse to tolkningene av tom, som kan endre funksjonaliteten til eksisterende apper som fortsetter å bruke IsBlank.

Returverdien er den boolske verdien true eller false.

Bruk av IsBlankOrError forhindrer videre behandling av feilen.

Bruk Error-funksjonen til å opprette og rapportere en egendefinert feil. Du har for eksempel kanskje logikk for å finne ut om en gitt verdi er gyldig for konteksten eller ikke, noe som ikke kontrolleres for problemer automatisk. Du kan opprette og returnere din egen feil, der du tar med både Type og Melding, ved å bruke den samme oppføringen som er beskrevet ovenfor for IfError-funksjonen.

I konteksten for IfError bruker du Error-funksjonen til å generere en feil på nytt eller sende gjennom en feil. Logikken i IfError kan for eksempel fastsette at en feil kan trygt ignoreres i enkelte tilfeller, men er viktig å sende gjennom i andre tilfeller. Bruk Error( FirstError ) i IfError eller App.OnError til å sende en feil gjennom.

Error-funksjonen også få tilsendt en tabell med feil, som finnes i AllErrors-tabellen. Bruk Error( AllErrors ) til å generere alle feilene på nytt og ikke bare den første.

En tom oppføring eller tom tabell sendt til Error fører ikke til feil.

Syntaks

Feil( ErrorRecord )
Feil( Feiltabell )

  • ErrorRecord – Obligatorisk. Oppføring for feilinformasjon, inkludert Type, Melding og andre felter. Snill er påkrevd. FirstError kan sendes direkte.
  • ErrorTable – Obligatorisk. Tabell med oppføringer for feilinformasjon. AllErrors kan sendes direkte.

IfError( Verdi1; Erstatning1 [; Verdi2; Erstatning2;... [, DefaultResult ] ] )

  • Verdier – Obligatorisk. Formlene som skal testes for en feilverdi.
  • Erstatninger – Påkrevd. Formlene som skal evalueres og verdiene som skal returneres hvis Value-argumentene returnerte en feil.
  • DefaultResult – Valgfritt. Formlene som skal evalueres hvis formelen ikke finner noen feil.

ErFeil( Verdi )
IsBlankOrError( verdi )

  • Verdi – Obligatorisk. Formel som skal testes.

Eksempler

Enkel IfError

Formel Beskrivelse Resultat
IfError( 1, 2 ) Det første argumentet er ikke en feil. Funksjonen har ingen andre feil som kan kontrolleres, og ingen standard returverdi. Funksjonen returnerer det siste value-argumentet evaluert. 1
IfError( 1/0, 2 ) Det første argumentet returnerer en feilverdi (på grunn av deling med null). Funksjonen evaluerer det andre argumentet og returnerer det som resultatet. 2
IfError( 10, 20, 30 ) Det første argumentet er ikke en feil. Funksjonen har ingen andre feil som kan kontrolleres, men har en standard returverdi. Funksjonen returnerer DefaultResult-argumentet. 30
IfError( 10, 11, 20, 21, 300 ) Det første argumentet 10 er ikke en feil, så funksjonen vurderer ikke argumentets tilsvarende erstatning 11. Det tredje argumentet 20 er heller ikke en feil, så funksjonen vurderer ikke argumentets tilsvarende erstatning 21. Det femte argumentet 300 har ingen tilsvarende erstatninger og er standardresultatet. Funksjonen returnerer resultatet fordi formelen ikke inneholder noen feil. 300
IfError( 1/0, Notify( "Der oppsto et internt problem") ) Det første argumentet returnerer en feilverdi (på grunn av deling med null). Funksjonen evaluerer det andre argumentet og viser en melding til brukeren. Returverdien til IfError er returverdien til Notify, påtvunget til den samme typen som det første argumentet til IfError (et tall). 1

Enkel IsError

Formel Beskrivelse Resultat
ErFeil( 1 ) Argumentet er ikke en feil. falsk
IsError( Blank() ) Argumentet er tomt, men ikke en feil. falsk
IsError( 1/0 ) Argumentet er en feil. sann
If( IsError( 1/0 ), Notify( "Der oppsto et internt problem") ) Argumentet til IsError returnerer en feilverdi (på grunn av deling med null). Denne funksjonen returnerer true, som gjør at If viser en melding til brukeren med Notify-funksjonen. Returverdien til If er returverdien til Notify, påtvunget til den samme typen som det første argumentet til If (en boolsk verdi). sann

Enkel IsBlankOrError

Formel Beskrivelse Resultat
IsBlankOrError( 1 ) Argumentet er verken en feil eller en tom. falsk
IsBlankOrError( Blank() ) Argumentet er en tom. sann
IsBlankOrError( 1/0 ) Argumentet er en feil. sann

Enkel Error

I dette eksemplet valideres datoer i forhold til hverandre, som gir en feil hvis det oppstår et problem.

If( StartDate > EndDate,
    Error( { Kind: ErrorKind.Validation, Message: "Start Date must be before End Date" } ) )

I dette eksemplet kan enkelte feil passere mens andre undertrykkes og erstattes med en verdi. I det første tilfellet er b i en feiltilstand fordi Value-funksjonen har et ugyldig argument. Fordi dette er uventet av formelforfatteren, sendes det gjennom slik at brukeren ser det. I det andre tilfellet, med samme formel,b har verdien 0, noe som resulterer i en divisjon med null. I dette tilfellet kan det hende at formelforfatteren vet at dette er akseptabelt for denne logikken, slik at feilen undertrykkes (det vises ingen banner), og -1 returneres 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åte som alle andre tabeller. Brukt sammen med Error-funksjonen kan forventede feil fjernes, og de resterende feilene beholdes og rapporteres. Hvis vi for eksempel visste at divisjon med null ikke kom til å være et problem i en bestemt kontekst, kunne disse feilene filtreres ut, slik at alle andre feil ble intakte med følgende formel:

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

Trinnvis

  1. Legg til en Text input-kontroll, og gi den navnet TextInput1 hvis den ikke har dette navnet som standard.

  2. Legg til en Label-kontroll, og gi den navnet Label1 hvis den ikke har det navn som standard.

  3. Angi formelen for Text-egenskapen til Label1 til:

    IfError( Value( TextInput1.Text ), -1 )
    
  4. I TextInput1 skriver du inn 1234.

    Label1 viser verdien 1234 da dette er en gyldig inndata til Value-funksjonen.

  5. I TextInput1 skriver du inn ToInfinity.

    Label1 viser verdien-1 siden dette ikke er gyldige inndata til Value-funksjonen. Hvis ikke IfError brukes for Value-funksjonen, ville ikke etiketten vise noen verdi. Det er fordi at verdien ville behandles som tom.

Se også

Formelreferanse for Power Apps