Del via


Funksjonene Error, IfError, IsError og IsBlankOrError

Gjelder: Lerretsapper Dataverse-formelkolonner Skrivebordsflyt Modelldrevne apper Power Platform CLI

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

Obs!

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 x er null, siden 1/x vil føre til 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 vil Patch returnere en oppføring som ikke er kompatibel med boolske verdier brukt til Replacement-formlene 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, vil det andre argumentet bli påtvunget for å samsvare med typen for det første argumentet.

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

Vurder IfError med følgende i stedet:

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

Formelen ovenfor fungerer ikke. Tekststrengen "#DIV/0!" påtvinges til typen for det første argumentet til IfError, som er et tall. Resultatet av IfError vil være nok en feil siden tekststrengen ikke kan på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 oppføringer for feilinformasjon der FirstError er 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
Type ErrorKind-opplisting (tall) Kategori for feilen.
Melding Tekststreng Melding om feilen som er egnet til å vises til sluttbrukeren.
Kilde Tekststreng Stedet feilen stammer fra, brukes til rapportering. Når det for eksempel gjelder en formel som er bundet til en kontrollegenskap, har denne formen ControlName.PropertyName.
Observert Tekststreng Stedet der feilen vises for brukeren, brukes til rapportering. Når det for eksempel gjelder en formel som er bundet til en kontrollegenskap, har denne formen ControlName.PropertyName.
Detaljer Oppføring Detaljer om feilen. For øyeblikket finnes det bare detaljer 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 oppstår det bare é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 vil forhindre 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 tilføyingen av feilhåndtering, 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 at feilen behandles videre.

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

Error( ErrorRecord )
Error( ErrorTable )

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

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

  • Value(s) – obligatorisk. Formlene som skal testes for en feilverdi.
  • Replacement(s) – obligatorisk. 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.

IsError( Value )
IsBlankOrError( Value )

  • Value - 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( «Det oppstod 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
IsError( 1 ) Argumentet er ikke en feil. usann
IsError( Blank() ) Argumentet er tomt, men ikke en feil. usann
IsError( 1/0 ) Argumentet er en feil. true
If( IsError( 1/0 ), Notify( «Det oppstod 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). true

Enkel IsBlankOrError

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

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. Siden dette er uventet for formelforfatteren, sendes den gjennom slik at brukeren ser den. I det andre tilfellet får b verdien 0 med samme formel, som fører til deling på 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 deling på null ikke kom til å bli et problem i en bestemt sammenheng, kunne disse feilene ha blitt filtrert ut, slik at alle andre feil forble uberørt 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, da dette ikke er en gyldig 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