Funkcije Error, IfError, IsError, IsBlankOrError
Odnosi se na: Stupci formule aplikacija
Dataverse od gotovih gradivnih
elemenata Tokovi radne površine CLI aplikacije stvorene
prema
Power Pages
Power Platform modelu
Otkriva pogreške i pruža alternativnu vrijednost ili poduzima mjere. Stvorite prilagođenu pogrešku ili prođite kroz pogrešku.
Napomena
- Ponašanje koje ovaj članak opisuje dostupno je samo kada je uključena značajka pretpregleda Upravljanje pogreškama na razini formule u odjeljcima Postavke > Buduće značajke > Pretpregled.
IfError
Funkcija IfError testira vrijednosti dok ne nađe pogrešku. Ako ova funkcija otkrije pogrešku, procjenjuje i vraća odgovarajuću zamjensku vrijednost i zaustavlja daljnju procjenu. Zadana vrijednost može se dobiti i ako se ne pronađu pogreške. Struktura funkcije IfError nalikuje onoj kod funkcije If: IfError ispituje ima li pogrešaka, dok If ispituje ima li vrijednosti true.
Upotrijebite funkciju IfError kako biste zamijenili pogrešku s valjanom vrijednošću tako da se mogu nastaviti proračuni nizvodno. Na primjer, koristite ovu funkciju ako korisnikov unos može rezultirati dijeljenjem s nulom:
IfError( 1/x, 0 )
Ta formula vraća 0
ako je vrijednost x
nula jer će 1/x
proizvesti pogrešku. Ako x
nije nula, tada se vraća 1/x
.
Zaustavljanje daljnje obrade
Prilikom ulančavanja formula zajedno u formulama ponašanja, kao što su:
Patch( DS1, ... );
Patch( DS2, ... )
Druga funkcija Patch za DS2
pokušat će se čak i ako Patch za DS1
ne uspije. Djelokrug pogreške ograničen je na svaku ulančanu formulu.
Upotrijebite funkciju IfError kako biste izveli neku radnju i nastavili obradu samo ako je radnja bila uspješna. Primjena funkcije IfError na ovaj primjer:
IfError(
Patch( DS1, ... ), Notify( "problem in the first action" ),
Patch( DS2, ... ), Notify( "problem in the second action" )
)
Ako Patch za DS1
naiđe na problem, izvršava se prva funkcija Notify. Ne dolazi do daljnje obrade, uključujući i drugu funkciju Patch za DS2
. Ako prva funkcija Patch uspije, izvršit će se druga funkcija Patch.
Ako postoji, neobvezni argument DefaultResult vraća se ako nisu otkrivene pogreške. Kada nema ovog argumenta, vraća se posljednji argument Value.
Nadovezujući se na zadnji primjer, povratna vrijednost funkcije IfError može se provjeriti kako bi se vidjelo je li bilo problema:
IfError(
Patch( DS1, ... ), Notify( "problem in the first action" ); false,
Patch( DS2, ... ), Notify( "problem in the second action" ); false,
true
)
Kompatibilnost vrste
Funkcija IfError vratit će vrijednost jednog od njezinih argumenata. Vrste svih vrijednosti koje funkcija IfError može vratiti moraju biti kompatibilne.
U posljednjem primjeru, funkcija Patch vratit će zapis koji nije kompatibilan s Booleovim vrijednostima korištenim za formule Replacement ili DefaultResult. To je u redu jer ne postoji situacija u kojoj bi funkcija IfError vratila povratnu vrijednost od ovih poziva funkcije Patch.
Napomena
Dok je ponašanje u procesu za promjenu, vrste svih argumenata za IfError trenutačno moraju biti kompatibilne.
U ranije opisanom jednostavnom primjeru:
IfError( 1/x, 0 )
Vrste 1/x
i 0
kompatibilne su jer su bile brojevi. Ako nisu, drugi argument će se prilagoditi tako da odgovara vrsti prvog argumenta.
Excel će prikazati #DIV/0! kada dođe do dijeljenja s nulom.
Razmotrite IfError sa sljedećim umjesto toga:
IfError( 1/x, "#DIV/0!" )
Gornja formula neće raditi. Tekstni niz "#DIV/0!"
bit će prilagođen vrsti prvog argumenta za funkciju IfError, koji predstavlja broj. Rezultat funkcije IfError bit će još jedna pogreška jer se tekstni niz ne može prilagoditi. Riješite to pretvaranjem prvog argumenta u tekstni niz da bi funkcija IfError uvijek vraćala tekstni niz:
IfError( Text( 1/x ), "#DIV/0!" )
Kao što se vidi gore, funkcija IfError može vratiti pogrešku ako funkcija Replacement ili DefaultResult daje pogrešku.
FirstError / AllErrors
Unutar zamjenskih formula zapis tablice FirstError i AllErrors pruža informacije o svim pronađenim greškama. AllErrors je tablica zapisa s informacijama o pogrešci gdje je FirstError prečac do prvog zapisa ove tablice. FirstError uvijek će vratiti istu vrijednost kao First( AllErrors ).
Zapisi o pogreškama uključuju sljedeće:
Polje | Tip | Opis |
---|---|---|
Vrsta | Numerička vrijednost ErrorKind (broj) | Kategorija pogreške. |
Poruka | Tekstni niz | Poruka o pogrešci, prikladna za prikazivanje krajnjem korisniku. |
Izvor | Tekstni niz | Lokacija na kojoj je pogreška nastala, korištena za izvješćivanje. Na primjer, za formulu vezanu za svojstvo kontrole, to će biti u obliku ControlName.PropertyName. |
Zapaženo | Tekstni niz | Lokacija gdje se pogreška prikazala korisniku, korištena za izvješćivanje. Na primjer, za formulu vezanu za svojstvo kontrole, to će biti u obliku ControlName.PropertyName. |
Pojedinosti | Zapis | Pojedinosti o pogrešci. Trenutačno se pojedinosti daju samo za mrežne pogreške. Ovaj zapis uključuje HttpStatusCode koji sadrži HTTP kod stanja i HttpResponse koji sadrži tijelo odgovor iz poveznika ili usluge. |
Na primjer, razmotrite sljedeću formulu kao svojstvo OnSelect kontrole Button:
Set( a, 1/0 )
I ta formula u svojstvu OnSelect druge kontrole Gumb:
IfError( a, Notify( "Internal error: originated on " & FirstError.Source & ", surfaced on " & FirstError.Observed ) )
Gornji primjer formule prikazuje sljedeći natpis ako se dva gumba aktiviraju redom:
Obično će postojati samo jedna pogreška s kojom FirstError može dostatno raditi. Međutim, postoje scenariji u kojima se može vratiti više pogrešaka. Na primjer, kada koristite operatora lančanog povezivanja formula ili istovremenu funkciju. Čak i u tim situacijama, FirstError prijavljivanje moglo bi biti dovoljno da otkrije problem umjesto da preoptereti korisnika višestrukim pogreškama. Ako i dalje morate raditi sa svakom pogreškom zasebno, možete koristiti tablicu AllErrors.
IsError
Funkcija IsError ispituje postoji li vrijednost pogreške.
Povratna vrijednost je Booleovo true ili false.
Upotreba funkcije IsError spriječit će daljnju obradu pogreške.
IsBlankOrError
Funkcija IsBlankOrError testira praznu vrijednost ili vrijednost pogreške i ekvivalent je Or( IsBlank( X ), IsError( X ) )
.
Kada omogućavate postupanje s pogreškama za postojeće aplikacije, razmislite o zamjeni IsBlank s IsBlankOrError radi očuvanja postojećeg ponašanja aplikacije. Prije dodavanja postupanja s pogreškama, vrijednost prazno korištena je za predstavljanje null vrijednosti iz baza podataka i vrijednosti pogrešaka. Postupanje s pogreškama razdvaja ove dvije interpretacije praznog što bi moglo promijeniti ponašanje postojećih aplikacija koje i dalje koriste IsBlank.
Povratna je vrijednost Booleovo true ili false.
Korištenje IsBlankOrError spriječit će daljnju obradu pogreške.
Upotrijebite funkciju Error za izradu i prijavu prilagođene pogreške. Na primjer, možda imate logiku da odredite je li bilo koja dana vrijednost važeća za vaš kontekst ili ne, nešto što se automatski ne provjerava za problem. Možete stvoriti i vratiti vlastitu pogrešku, zajedno s opcijama Kind i Message, koristeći isti zapis opisan gore za funkciju IfError.
U kontekstu IfError, upotrijebite funkciju Error za ponovno vraćanje ili prolazak kroz pogrešku. Na primjer, vaša logika u IfError može odlučiti da se u nekim slučajevima pogreška može sigurno zanemariti, ali je u drugim slučajevima važno poslati pogrešku. Unutar IfError ili App.OnError, koristite Error( FirstError ) da biste prošli kroz pogrešku.
Funkciji Error može se proslijediti i tablica pogrešaka, kao što bi se mogla pronaći u tablici AllErrors. Koristite Error( AllErrors ) za ponovno vraćanje svih pogrešaka, a ne samo prve.
Prazan zapis ili prazna tablica proslijeđena u Error ne rezultira pogreškama.
Sintaksa
Error( ErrorRecord )
Error( ErrorTable )
- ErrorRecord – obavezno. Zapis informacija o pogrešci, uključujući Kind, Message i druga polja. Kind je obavezno. FirstError može se izravno proslijediti.
- ErrorTable – obavezno. Tablica zapisa podataka o pogrešci. AllErrors može se izravno proslijediti.
IfError( Value1, Replacement1 [, Value2, Replacement2, ... [, DefaultResult ] ] )
- Value(s) – obavezno. Formula za ispitivanje ima li vrijednosti pogreške.
- Replacement(s) – obavezno. Formule za procjenu i vrijednosti koje se vraćaju ako su podudarajući argumenti Value vratili pogrešku.
- DefaultResult – neobavezno. Formule za procjenu ako formula ne nađe nikakve pogreške.
IsError( Value )
IsBlankOrError( Vrijednost )
- Value – obavezno. Formula za testiranje.
Primjeri
Jednostavna upotreba funkcije IfError
Formula | Opis | Rezultat |
---|---|---|
IfError( 1, 2 ) | Prvi argument nije pogreška. Funkcija nema drugih pogrešaka za provjeru i nema zadanu povratnu vrijednost. Funkcija vraća posljednji procijenjeni argument Value. | 1 |
IfError( 1/0, 2 ) | Prvi argument vraća vrijednost pogreške (zbog dijeljenja s nulom). Funkcija procjenjuje drugi argument i vraća ga kao rezultat. | 2 |
IfError( 10, 20, 30 ) | Prvi argument nije pogreška. Funkcija nema drugih pogrešaka za provjeru, ali ima zadanu povratnu vrijednost. Funkcija vraća argument DefaultResult. | 30 |
IfError( 10, 11, 20, 21, 300 ) | Prvi argument 10 nije pogreška, pa funkcija ne procjenjuje odgovarajuću zamjenu argumenta 11. Ni treći argument 20 nije pogreška, pa funkcija ne procjenjuje odgovarajuću zamjenu argumenta 21. Peti argument 300 nema odgovarajuću zamjenu i zadani je rezultat. Funkcija vraća taj rezultat jer formula ne sadrži pogreške. | 300 |
IfError( 1/0, Notify( "There was an internal problem" ) ) | Prvi argument vraća vrijednost pogreške (zbog dijeljenja s nulom). Funkcija procjenjuje drugi argument i prikazuje poruku korisniku. Povratna vrijednost funkcije IfError povratna je vrijednost funkcije Notify, prilagođena tako da bude iste vrste kao prvi argument za IfError (broj). | 1 |
Jednostavna upotreba funkcije IsError
Formula | Opis | Rezultat |
---|---|---|
IsError( 1 ) | Argument nije pogreška. | pogrešno |
IsError( Prazno() ) | Argument je prazan, ali nije i pogreška. | pogrešno |
IsError( 1/0 ) | Argument je pogreška. | true |
If( IsError( 1/0 ), Notify( "There was an internal problem" ) ) | Argument funkcije IsError vraća vrijednost pogreške (zbog dijeljenja s nulom). Ova funkcija vraća true što uzrokuje da If korisniku prikazuje poruku s funkcijom Notify. Povratna vrijednost funkcije If povratna je vrijednost funkcije Notify, prilagođena tako da bude iste vrste kao prvi argument za If (Booleova vrijednost). | true |
Simple IsBlankOrError
Formula | Opis | Rezultat |
---|---|---|
IsBlankOrError( 1 ) | Argument nije pogreška ili prazan. | pogrešno |
IsBlankOrError( Blank() ) | Argument je prazan. | true |
IsBlankOrError( 1/0 ) | Argument je pogreška. | true |
Jednostavna pogreška
U ovom primjeru datumi se provjeravaju jedan u odnosu na drugi, što rezultira pogreškom ako postoji problem.
If( StartDate > EndDate,
Error( { Kind: ErrorKind.Validation, Message: "Start Date must be before End Date" } ) )
U ovom primjeru neke pogreške mogu proći, dok su druge potisnute i zamijenjene vrijednošću. U prvom slučaju, b bit će u stanju pogreške jer funkcija Value ima nevažeći argument. Budući da je to neočekivano od strane pisca formula, prolazi se tako da će ga korisnik vidjeti. U drugom slučaju, s istom formulom, b imat će vrijednost 0, što će rezultirati dijeljenjem s nulom. U ovom slučaju, pisac formule može znati da je to prihvatljivo za ovu logiku, potisnuti pogrešku (ne prikazuje se natpis) i umjesto 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
Tablica AllErrors može se filtrirati kao i svaka druga tablica. Upotrebom s funkcijom Error očekivane pogreške mogu se ukloniti, a preostale pogreške zadržati i prijaviti. Na primjer, kad bismo znali da dijeljenje s nulom neće biti problem u određenom kontekstu, te bi se pogreške mogle filtrirati, ostavljajući sve druge pogreške netaknutima sljedećom formulom:
Error( Filter( AllErrors, Kind <> ErrorKind.Div0 ) )
Korak po korak
Dodajte kontrolu Text input i nazovite je TextInput1 ako to već nije zadano ime.
Dodajte kontrolu Label i nazovite je Label1 ako to već nije zadano ime.
Postavite formulu za svojstvo Text kontrole Label1 na:
IfError( Value( TextInput1.Text ), -1 )
U TextInput1 unesite 1234.
Label1 će pokazati vrijednost 1234 jer ovo je valjani unos u funkciju Value.
U TextInput1 unesite ToInfinity.
Label1 će pokazati vrijednost -1 jer ovo nije valjani unos u funkciju Value. Bez omatanja funkcije Value funkcijom IfError, oznaka ne bi pokazala vrijednost jer se vrijednost pogreške tretira kao prazno.
Pogledajte također
Povratne informacije
https://aka.ms/ContentUserFeedback.
Stiže uskoro: Tijekom 2024. postupno ćemo ukinuti servis Problemi sa servisom GitHub kao mehanizam za povratne informacije za sadržaj i zamijeniti ga novim sustavom za povratne informacije. Dodatne informacije potražite u članku:Pošaljite i pogledajte povratne informacije za