Share via


Napaka, funkcije IfError, IsError, IsBlankOrError

Velja za: Stolpci s formulo aplikacij Dataverse delovnega območja Tokovi namizja Aplikacije Power Platform , ki temeljijo na modelu CLI

Zazna napake in zagotovi alternativno vrednost ali ukrepa. Ustvari napako po meri ali posreduje napako.

opomba,

IfError

Funkcija IfError preskuša vrednosti, dokler ne najde napake. Če funkcija odkrije napako, ovrednoti in vrne pripadajočo nadomestno vrednost in ustavi nadaljnje vrednotenje. Privzeto vrednost je mogoče dodeliti tudi, ko ni najdenih napak. Struktura funkcije IfError je podobna strukturi funkcije If: funkcija IfError preverja, ali obstajajo napake, medtem ko funkcija If preverja, ali obstaja true.

Uporabite funkcijo IfError za zamenjavo napake z veljavno vrednostjo, da se lahko nadaljnji izračuni nadaljujejo. Na primer, uporabite to funkcijo, če bi lahko z uporabniškim vnosom nastalo deljenje z nič:

IfError( 1/x, 0 )

Ta formula vrne 0, če je vrednost za x nič, saj z 1/x nastane napaka. Če x ni nič, potem je vrnjeno 1/x.

Ustavitev nadaljnje obdelave

Pri veriženju formul v formulah vedenja, kot je:

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

Za drugo funkcijo Patch za DS2 bo izveden poskus, tudi če funkcija Patch za DS1 ne uspe. Obseg napake je omejen na vsako formulo, ki je verižena.

Uporabite funkcijo IfError za izvedbo dejanja in nadaljuje z obdelavo samo, če je bilo dejanje uspešno. Uporaba funkcije IfError v tem primeru:

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

Če ima funkcija Patch za DS1 težavo, se izvede prva možnost Notify. Nadaljnja obdelava se ne izvede, niti druga funkcija Patch za DS2. Če prva funkcija Patch uspe, se druga funkcija Patch izvede.

Če je naveden, je izbirni argument DefaultResult vrnjen, če ni odkritih napak. Brez tega argumenta je vrnjen zadnji argument Value.

Če nadgradimo zadnji primer, je mogoče preveriti vrnjeno vrednost iz funkcije IfError, da se ugotovi, ali so se pojavile težave:

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

Združljivost tipov

Funkcija IfError bo vrnila vrednost enega od svojih argumentov. Tipi vseh vrednosti, ki jih lahko vrne funkcija IfError, morajo biti združljivi.

V zadnjem primeru funkcija Patch vrne zapis, ki ni združljiv z logičnimi vrednostmi, uporabljanimi za formule Replacement ali možnost DefaultResult. Kar je v redu, saj ni situacije, v kateri bi bila vrnjena vrednost iz teh priklicev funkcije Patch vrnjena s funkcijo IfError.

opomba,

Med potekom vedenja za spremembo morajo biti vsi tipi argumentov za funkcijo IfError trenutno združljivi.

V enostavnem primeru, opisanem prej:

IfError( 1/x, 0 )

Vrsti 1/x in 0 sta združljivi, saj obe predstavljata številki. Če nista, bo drugi argument prisiljen v ujemanje s tipom prvega argumenta.

Excel bo prikazal #DIV/0!, ko pride do deljenja z ničlo.

Raje razmislite o funkciji IfError z naslednjim:

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

Zgornja formula ne bo delovala. Besedilni niz "#DIV/0!" bo prisiljen v tip prvega argumenta v funkcijo IfError, ki je številka. Rezultat funkcije IfError bo še ena napaka, saj besedilnega niza ni mogoče prisiliti. Kot popravek pretvorite prvi argument v besedilni niz, tako da funkcija IfError vedno vrne besedilni niz.

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

Kot je vidno zgoraj, lahko funkcija IfError vrne napako, če je Replacement ali DefaultResult napaka.

FirstError / AllErrors

Zapis FirstError in tabela AllErrors v nadomestnih formulah vsebujeta informacije o najdenih napakah. AllErrors je tabela zapisov z informacijami o napakah, pri čemer je FirstError bližnjica do prvega zapisa te tabele. Funkcija FirstError bo vedno vrnila enako vrednost kot funkcija First( AllErrors ).

Zapisi o napakah vključujejo:

Polje Vnesi Description
Vrsta ErrorKind enum (številka) Kategorija napake.
Sporočilo Besedilni niz Sporočilo o napaki, primerno za prikaz končnemu uporabniku.
Vir Besedilni niz Lokacija, kjer je nastala napaka, uporabljena za poročanje. Na primer, za formulo, vezano na lastnost kontrolnika, bo to v obliki ControlName.PropertyName.
Opazovano Besedilni niz Mesto, kjer se je napaka prikazala uporabniku, uporabljeno za poročanje. Na primer, za formulo, vezano na lastnost kontrolnika, bo to v obliki ControlName.PropertyName.
Podrobnosti Zapis Podrobnosti o napaki. Trenutno so na voljo podrobnosti samo za omrežne napake. Ta zapis vključuje HttpStatusCode, ki vsebuje kodo stanja HTTP, in HttpResponse, ki vsebuje telo odgovora priključka ali storitve.

Na primer, glejte naslednjo formulo kot lastnost OnSelect kontrolnika Button:

Set( a, 1/0 )

In to formulo v lastnosti OnSelect za kontrolnik za drugi Gumb:

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

Ko sta gumba aktivirana eden za drugim, zgornji primer formule prikaže naslednjo pasico.

Kontrolnik »Button« aktiviran, prikazuje obvestilo iz funkcije »Notify«.

Običajno bo samo ena napaka, s katero lahko funkcija FirstError deluje v zadostni meri. Vendar obstajajo scenariji, kjer je lahko vrnjenih več napak. Na primer, ko uporabljate operator veriženja formule ali funkcijo Concurrent. Tudi v teh situacijah je lahko poročanje FirstError dovolj, da razkrije težavo, namesto da uporabnika preobremeni z več napakami. Če morate še vedno delati z vsako napako posebej, lahko uporabite tabelo AllErrors.

IsError

Funkcija IsError preveri, ali obstaja vrednost napake.

Vrnjena vrednost je logična vrednost true ali false.

Z uporabo funkcije IsError se prepreči nadaljnja obdelava napake.

IsBlankOrError

Funkcija IsBlankOrError preizkusi funkcijo za prazno vrednost ali vrednost napake in je enakovredna funkciji Or( IsBlank( X ), IsError( X ) ).

Ko omogočate obravnavanje napak za obstoječe aplikacije, razmislite o zamenjavi funkcije IsBlank s funkcijo IsBlankOrError, da ohranite obstoječe vedenje aplikacije. Pred dodajanjem obravnave napak je bila prazna vrednost uporabljena za predstavitev tako ničelnih vrednosti iz baz podatkov kot vrednosti napak. Obravnavanje napak ločuje ti dve interpretaciji prazne vrednosti, kar bi lahko spremenilo vedenje obstoječih aplikacij, ki še naprej uporabljajo funkcijo IsBlank.

Vrnjena vrednost je logična vrednost true ali false.

Funkcija IsBlankOrError bo preprečila nadaljnjo obdelavo napake.

Za ustvarjanje napak po meri in poročanje o njih uporabite funkcijo Error. Na primer, morda imate logiko za ugotavljanje, ali je katera koli dana vrednost veljavna za vaš kontekst ali ne – nekaj, kar ni samodejno preverjeno za težavo. Lahko ustvarite in vrnete lastno napako, skupaj s Kind in Message, z uporabo istega zapisa, opisanega zgoraj za funkcijo IfError.

V kontekstu IfError uporabite funkcijo Error za ponovno vrnitev napake ali prehajanje skozi napako. Na primer, vaša logika v IfError lahko določi, da je v nekaterih primerih napako mogoče varno prezreti, v drugih primerih pa je napako pomembno posredovati. Znotraj IfError ali App.OnError uporabite Error( FirstError ) za prehajanje skozi napako.

Funkciji Error je mogoče posredovati tudi tabelo napak, tako kot bi jo našli v tabeli AllErrors. Uporabite Error( AllErrors ) za ponovno vrnitev vseh napak in ne samo prve.

Prazen zapis ali prazna tabela, posredovana v funkcijo Error ne povzroči nobene napake.

Sintaksa

Error( ErrorRecord )
Error( ErrorTable )

  • ErrorRecord – obvezno. Zapis z informacijami o napaki, vključno s poljema Kind in Message ter drugimi polji. Polje Kind je obvezno. FirstError je mogoče neposredno posredovati.
  • ErrorTable – obvezno. Tabela zapisov z informacijami o napakah. AllErrors je mogoče neposredno posredovati.

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

  • Value(s) – obvezno. Formule, za katere se preveri, ali obstaja vrednost napake.
  • Replacement(s) – obvezno. Formule za ovrednotenje in vrednosti za vrnitev, če so ujemajoči se argumenti Value vrnili napako.
  • DefaultResult – izbirno. Formule za ovrednotenje, če formula ne najde nobenih napak.

IsError( Value )
IsBlankOrError( Value )

  • Value – obvezno. Formula za preskušanje.

Primeri

Enostavna funkcija IfError

Formula Opis Rezultat
IfError( 1, 2 ) Prvi argument ni napaka. Funkcija nima drugih napak za preverjanje in ne privzete vrnjene vrednosti. Funkcija vrne zadnji ovrednoten argument value. 1
IfError( 1/0, 2 ) Prvi argument vrne vrednost napake (zaradi deljenja z nič). Funkcija ovrednoti drugi argument in ga vrne kot rezultat. 2
IfError( 10, 20, 30 ) Prvi argument ni napaka. Funkcija nima drugih napak za preverjanje, toda ima privzeto vrnjeno vrednost. Funkcija vrne argument DefaultResult. 30
IfError( 10, 11, 20, 21, 300 ) Prvi argument 10 ni napaka, zato funkcija ne ovrednoti pripadajoče zamenjave 11 tega argumenta. Tretji argument 20 prav tako ni napaka, zato funkcija ne ovrednoti pripadajoče zamenjave 21 tega argumenta. Peti argument 300 nima pripadajoče zamenjave in je privzeti rezultat. Funkcija vrne ta rezultat, ker formula ne vsebuje napak. 300
IfError( 1/0, Notify( "There was an internal problem" ) ) Prvi argument vrne vrednost napake (zaradi deljenja z nič). Funkcija ovrednoti drugi argument in prikaže sporočilo uporabniku. Vrnjena vrednost funkcije IfError je vrnjena vrednost funkcije Notify, prisiljena na isti tip kot prvi argument na funkcijo IfError (številka). 1

Enostavna funkcija IsError

Formula Opis Rezultat
IsError( 1 ) Argument ni napaka. neresnično
IsError( Blank() ) Argument je prazen, vendar ne napaka. neresnično
IsError( 1/0 ) Argument je napaka. true
If( IsError( 1/0 ), Notify( "There was an internal problem" ) ) Argument na IsError vrne vrednost napake (zaradi deljenja z nič). Ta funkcija vrne vrednost true, ki povzroči, da funkcija If uporabniku prikaže sporočilo s funkcijo Notify. Vrnjena vrednost funkcije If je vrnjena vrednost funkcije Notify, prisiljena na isti tip kot prvi argument na funkcijo If (logična vrednost). true

Preprosta funkcija IsBlankOrError

Formula Opis Rezultat
IsBlankOrError( 1 ) Argument je ni napaka ali prazen. neresnično
IsBlankOrError( Blank() ) Argument je prazen. true
IsBlankOrError( 1/0 ) Argument je napaka. true

Preprosta funkcija Error

V tem primeru so datumi medsebojno preverjani, kar povzroči napako, če pride do težave.

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

V tem primeru so nekatere napake lahko posredovane, medtem ko so druge preprečene in nadomeščene z vrednostjo. V prvem primeru bo b v stanju napake, ker ima funkcija Value neveljaven argument. Ker avtor formule tega ne pričakuje, je posredovan tako, da ga bo uporabnik videl. V drugem primeru bo vrednost b v isti formuli 0, kar ima za posledico deljenje z nič. V tem primeru pisec formule morda ve, da je to sprejemljivo za to logiko, ki prepreči napako (ni prikazane pasice) in namesto tega vrne –1.

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

Tabelo AllErrors je mogoče filtrirati kot vsako drugo tabelo. Če se uporablja s funkcijo Error , lahko pričakovane napake odstranite, preostale napake pa obdržite in o njih poročate. Na primer, če bi vedeli, da deljenje z ničlo ne bo predstavljalo težave v določenem kontekstu, bi te napake lahko izločili s filtriranjem, vse ostale napake pa pustili nedotaknjene z naslednjo formulo:

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

Korak za korakom

  1. Dodajte kontrolnik Text input in ga poimenujte TextInput1, če privzeto nima tega imena.

  2. Dodajte kontrolnik Label in ga poimenujte Label1, če privzeto nima imena.

  3. Nastavite formulo za lastnost Besedilo za Label1 na:

    IfError( Value( TextInput1.Text ), -1 )
    
  4. V TextInput1 vnesite 1234.

    Label1 bo prikazala vrednost 1234, ker je to veljaven vnos za funkcijo »Value«.

  5. V TextInput1 vnesite ToInfinity.

    Label1 bo prikazala vrednost -1, ker je to ni veljaven vnos za funkcijo »Value«. Brez preloma besedila za funkcijo »Value« s funkcijo »IfError« oznaka ne bi prikazovala vrednosti, saj je vrednost napake obravnavana kot prazno.

Glejte tudi

Sklic formule za Power Apps