Deli putem


Funkcije Error, IfError, IsError, IsBlankOrError

Odnosi se na: Kolone Dataverse formule aplikacija platna Tokovi na radnoj površini CLI aplikacija Power Pages Power Platform zasnovane na modelu

Otkriva greške i obezbeđuje alternativnu vrednost ili preduzima radnju. Kreirajte prilagođenu grešku ili prođite kroz grešku.

Belešku

Ako je aplikacija onemogućila funkciju upravljanja greškama na nivou formule pod Ažuriranja postavki>Penzionisano>, te funkcije neće raditi ispravno.

IfError

Funkcija IfError testira vrednosti dok ne nađe grešku. Ako funkcija otkrije grešku, funkcija izračunava i vraća odgovarajuću zamenu vrednosti i zaustavlja dalje izračunavanje. Ako se ne pronađu greške, može se dobiti i podrazumevana vrednost. Struktura funkcije IfError liči na strukturu funkcije If: IfError testira da li postoje greške, dok If testira da li je tačno.

Koristite IfError da biste zamenili grešku važećom vrednošću, tako da se izračunavanja koja slede mogu da se nastave. Na primer, koristite ovu funkciju ako korisnički unos može rezultirati deljenjem nulom:

IfError( 1/x, 0 )

Ova formula vraća 0 ako je vrednost nula x , kao što 1/x proizvodi grešku. Ako x nije nula, tada se vraća 1/x.

Zaustavljanje dalje obrade

Kada lančano povezujete formule zajedno u formulama ponašanja, kao što su:

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

Druga funkcija Patch na DS2 će se pokušati čak i ako Patch na DS1 ne uspeva. Obim greške je ograničen na svaku formulu koja je lančano povezana.

Koristite IfError da biste izvršili radnju, pa nastavite obradu samo ako je radnja uspela. Primena IfError na ovaj primer:

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

Ako funkcija Patch elementa DS1 ima problem, izvršava se prva funkcija Notify. Neće biti dalje obrade, uključujući drugu funkciju Patch od DS2. Ako prva funkcija Patch uspe, izvršava se druga funkcija Patch.

Ako nije navedeno, vraća se opcionalni argument DefaultResult ako nije otkrivena nijedna greška. Bez ovog argumenta, vraća se poslednji argument Value.

Na osnovu poslednjeg primera, vraćena vrednost iz funkcije IfError može da se proveri da bi se utvrdilo da li je bilo problema:

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

Tip kompatibilnosti

IfError vraća vrednost jednog od svojih argumenata. Tipovi svih vrednosti koje IfError može da vrati moraju biti kompatibilni.

U poslednjem primeru, Patch vraća zapis koji nije kompatibilan sa Booleansima koji se koriste za formule zamene ili DefaultResult. To je u redu, jer ne postoji situacija u kojoj bi vraćena vrednost iz ovih poziva funkcije Patch bila vraćena iz funkcije IfError.

Belešku

Dok se ponašanje u procesu menja, tipovi svih argumenata za IfError moraju biti trenutno kompatibilni.

U ranije opisanom jednostavnom primeru:

IfError( 1/x, 0 )

Tipovi 1/x i 0 su bili kompatibilni jer su to brojevi. Ako nisu, drugi argument je primoran da odgovara tipu prvog argumenta.

Ekcel prikazuje #DIV/0! kada dođe do podele sa nulom.

Umesto toga, razmotrite IfError sa sledećim:

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

Gornja formula neće raditi. Tekstualni string "#DIV/0!" je primoran na tip prvog argumenta za IfError, što je broj. Rezultat IfError je još jedna greška jer tekst string ne može biti prinudan. Kao ispravku, prvi argument konvertujte u tekstualnu nisku, tako da IfError uvek vraća tekstualnu nisku:

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

Kao što se vidi gore, IfError može da vrati grešku ako Replacement ili DefaultResult rezultuje greškom.

FirstError / AllErrors

U formulama za zamenu, informacije o pronađenim greškama su dostupne preko zapisa FirstError i tabele AllErrors. AllErrors je tabela zapisa informacija o greškama sa FirstError je prečica do prvog zapisa ove tabele. FirstError uvek vraća istu vrednost kao First( AllErrors ).

Zapisi o grešci obuhvataju:

Polje Tip Opis
Vrsta ErrorKind numerički (broj) Kategorija greške.
Poruku Tekstualna niska Poruka o grešci, pogodna za prikazivanje krajnjem korisniku.
Izvor Tekstualna niska Lokacija na kojoj potiče greška, koristi se za izveštavanje. Na primer, za formulu vezanu za kontrolnu osobinu, ova vrednost je u obliku ControlName.PropertyName.
Posmatrao Tekstualna niska Lokacija gde je greška prikazana korisniku, koristi se za izveštavanje. Na primer, za formulu vezanu za kontrolnu osobinu, ova vrednost je u obliku ControlName.PropertyName.
Detalji Record Detalji o grešci. Trenutno, detalji su dati samo za greške u mreži. Ovaj zapis uključuje HttpStatusCode koji sadrži HTTP statusni kod i HttpResponse koji sadrži telo odgovor iz konektora ili usluge.

Na primer, razmotrite sledeću formulu kao svojstvo OnSelect kontrole Dugme:

Set( a, 1/0 )

I ova formula na svojstvu OnSelect druge kontrole Dugmeta:

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

Gornja primer formule bi prikazao sledeći baner kada se dva dugmeta aktiviraju u nizu:

Aktivirana je kontrola dugmeta, koja prikazuje obaveštenje funkcije Notify.

Tipično, postojaće samo jedna greška sa kojom FirstError može dovoljno raditi. Međutim, postoje scenariji u kojima može biti vraćeno više grešaka. Na primer, kada koristite operator za povezivanje formula ili funkciju Concurrent. Čak i u ovakvim situacijama, izveštavanje FirstError može biti dovoljno da otkrije problem umesto da preoptereti korisnika sa više grešaka. Ako i dalje imate zahtev da radite sa svakom greškom pojedinačno, možete da koristite tabelu AllErrors.

IsError

Funkcija IsError testira da li je vrednost greška.

Povratna vrednost je logička vrednost true ili false.

Korišćenje IsError sprečava dalju obradu greške.

IsBlankOrError

Funkcija IsBlankOrError testira da li je vrednost prazna ili pogrešna da ekvivalentna je sa Or( IsBlank( X ), IsError( X ) ).

Kada omogućite upravljanje greškama za postojeće aplikacije, razmislite o zameni funkcije IsBlank funkcijom IsBlankOrError da biste zaštitili postojeće ponašanje aplikacije. Pre dodavanja rukovanja greškama, prazna vrednost je korišćena za predstavljanje i nultih vrednosti iz baza podataka i vrednosti grešaka. Rukovanje greškama razdvaja ove dve interpretacije praznog, što bi moglo da promeni ponašanje postojećih aplikacija koje i dalje koriste IsBlank.

Povratna vrednost je logička vrednost true ili false.

Korišćenje IsBlankOrError sprečava dalju obradu greške.

Koristite funkciju Error da biste kreirali i prijavili prilagođenu grešku. Na primer, možda imate logiku da utvrdite da li je neka data vrednost važeća za vaš kontekst ili ne – nešto što se ne proverava automatski kada nastane problem. Možete da kreirate i vratite sopstvenu grešku, upotpunjenu funkcijama Kind i Message, koristeći isti zapis opisan iznad za funkciju IfError.

U kontekstu funkcije IfError, koristite funkciju Error da biste ponovo izbacili ili prošli kroz grešku. Na primer, vaša logika u IfError može odlučiti da se u nekim slučajevima greška može bezbedno ignorisati, ali u drugim slučajevima greška je važna za slanje. U okviru funkcija IfError ili App.OnError, koristite Error( FirstError ) da biste prošli kroz grešku.

Funkciji Greška može se proslediti i tabela grešaka, kao što bi se našla u tabeli AllErrors. Koristite Error( AllErrors ) da biste ponovo izbacili sve greške, a ne samo prvu.

Zapis koji je prazan ili prazna tabela prosleđena funkciji Error ne rezultira greškom.

Sintaksa

Greška( ErrorRecord )
Greška( Tabela grešaka)

  • ErrorRecord – Obavezno. Zapis informacija o grešci, uključujući Kind, Message i druga polja. Vrsta je potrebna. FirstError se može proći direktno.
  • ErrorTable – Obavezno. Tabela zapisa sa informacijama o greškama. AllErrors se može proslediti direktno.

IfError ( ValueKSNUMKS, ReplacementKSNUMKS [, ValueKSNUMKS, ReplacementKSNUMKS, ... [, DefaultResult ] ] )

  • Vrednosti – Obavezno. Formule za testiranje da li je vrednost greška.
  • Zamene – Obavezno. Formule koje treba izračunati i vrednosti koje se vraćaju ako su agrumenti Vrednosti koji se podudaraju vratili grešku.
  • DefaultResult – Opciono. Formule za izračunavanje ako formula ne nađe nikakve greške.

IsError( Vrednost)
IsBlankOrError( Value )

  • Vrednost– Obavezno. Formula koja se testira.

Primeri

Jednostavna IfError

Formula Opis rezultat
IfError( 1, 2 ) Prvi argument nije greška. Funkcija nema drugih grešaka za proveru i nema podrazumevane povratne vrednosti. Funkcija vraća poslednji izračunati argument vrednosti. 1
AkoGreška( 1/0, 2 ) Prvi argument vraća vrednost greške (zbog deljenja nulom). Funkcija izračunava drugi argument i vraća ga kao rezultat. 2
IfError( 10, 20, 30 ) Prvi argument nije greška. Funkcija nema drugih grešaka za proveru, ali ima podrazumevane povratne vrednosti. Funkcija vraća argument DefaultResult. 30
IfError ( 10, 11, 20, 21, 300 ) Prvi argument 10 nije greška, tako da funkcija ne izračunava odgovarajuću zamenu tog argumenta, 11. Treći argument 20 takođe nije greška, tako da funkcija ne izračunava odgovarajuću zamenu tog argumenta, 21. Peti argument, 300, nema odgovarajuću zamenu i podrazumevani je rezultat. Funkcija vraća taj rezultat jer formula ne sadrži greške. 300
IfError( 1/0, Notifi( "Postojao je unutrašnji problem") ) Prvi argument vraća vrednost greške (zbog deljenja nulom). Funkcija izračunava drugi argument i prikazuje poruku korisniku. Vraćena vrednost od IfError je vraćena vrednost funkcije Notify, promenjena na isti tip kao i prvi argument od IfError (broj). 1

Jednostavna IsError

Formula Opis rezultat
IsError( 1 ) Argument nije greška. lažan
IsError( Blank() ) Argument je prazan, ali nije greška. lažan
IsError( 1/0 ) Argument je greška. Istina
if( IsError( 1/0 ), Notifi( "Postojao je unutrašnji problem" ) ) Prvi argument od IsError vraća vrednost greške (zbog deljenja nulom). Ova funkcija vraća true, što uzrokuje da If korisniku prikazuje poruku pomoću funkcije Notify. Vraćena vrednost od If je vraćena vrednost funkcije Notify, promenjena na isti tip kao i prvi argument od If (logička vrednost). Istina

Jednostavna funkcija IsBlankOrError

Formula Opis rezultat
IsBlankOrError( 1 ) Argument nije greška niti prazna vrednost. lažan
IsBlankOrError( Blank() ) Argument je prazna vrednost. Istina
IsBlankOrError( 1/0 ) Argument je greška. Istina

Primer greške

U ovom primeru, datumi se proveravaju u odnosu jedni na druge, što rezultira greškom ako postoji problem.

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

U ovom primeru, nekim greškama je dozvoljeno da prođu, dok su druge potisnute i zamenjene vrednošću. U prvom slučaju, b je u stanju greške jer funkcija Vrednost ima neispravan argument. Budući da je ovo neočekivano od strane pisca formule, prolazi se tako da ga korisnik vidi. U drugom slučaju, sa istom formulom, b ima vrednost 0, što rezultira deljenjem sa nulom. U ovom slučaju, pisac formula može znati da je to prihvatljivo za ovu logiku, potisnuti grešku (baner se ne prikazuje) i umesto toga vratiti -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

Tabela AllErrors može da se filtrira kao i svaka druga tabela. Koristi se sa funkcijom Error, očekivane greške mogu biti uklonjene, a preostale greške zadržane i prijavljene. Na primer, ako bismo znali da podela sa nulom neće biti problem u određenom kontekstu, te greške bi mogle biti filtrirane, ostavljajući sve ostale greške netaknute sa sledećom formulom:

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

Korak po korak

  1. Dodajte kontrolu Unos teksta i nazovite je Text1Input1 ako podrazumevano nema taj naziv.

  2. Dodajte kontrolu Oznaka i nazovite je Label1 ako podrazumevano nema taj naziv.

  3. Podesite formulu svojstva Text kontrole Label1 na:

    IfError( Value( TextInput1.Text ), -1 )
    
  4. U TextInput1 unesite 1234.

    Label1 prikazuje vrednost 1234 jer je ovo važeći ulaz u funkciju Value.

  5. U TextInput1 unesite ToInfinity.

    Label1 prikazuje vrednost-1 jer ovo nije validan ulaz u funkciju Value. Bez prelamanja funkcije Value funkcijom IfError, oznaka ne bi prikazala vrednost, jer se vrednost greške tretira kao a prazno.

Takođe pogledajte

Formula referenca za Power Apps