Dijeli putem


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

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:

Aktivirana je kontrola Button, koja prikazuje obavijest iz funkcije Notify.

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

  1. Dodajte kontrolu Text input i nazovite je TextInput1 ako to već nije zadano ime.

  2. Dodajte kontrolu Label i nazovite je Label1 ako to već nije zadano ime.

  3. Postavite formulu za svojstvo Text kontrole Label1 na:

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

    Label1 će pokazati vrijednost 1234 jer ovo je valjani unos u funkciju Value.

  5. 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

Referenca formule za Power Apps