Napomena
Za pristup ovoj stranici potrebna je autorizacija. Možete se pokušati prijaviti ili promijeniti direktorije.
Za pristup ovoj stranici potrebna je autorizacija. Možete pokušati promijeniti direktorije.
| Funkcije | Odnosi se na |
|---|---|
| Error IfError IsError |
|
| IsBlankOrError |
|
Otkriva pogreške i pruža alternativnu vrijednost ili poduzima mjere. Stvorite prilagođenu pogrešku ili prođite kroz pogrešku.
Napomena
Ako je aplikacija onemogućila značajku upravljanja pogreškama na razini formule u odjeljku Postavke>Ažuriranja>povučena, te funkcije neće ispravno funkcionirati.
IfError
Funkcija IfError provjerava vrijednosti dok ne pronađ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 podsjeća na IfError funkciju If : IfError provjerava pogreške, a ako se testira na vrijednost true.
Koristi IfError se za zamjenu pogreške valjanom vrijednošću kako bi se daljnji izračuni mogli nastaviti. Na primjer, koristite ovu funkciju ako korisnikov unos može rezultirati dijeljenjem s nulom:
IfError( 1/x, 0 )
Ova formula vraća 0 ako je vrijednost nula x , kao što 1/x proizvodi 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.
Koristi IfError se za akciju i nastavak obrade samo ako je akcija bila uspješna. Primjena na IfError 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.
Na temelju posljednjeg primjera moguće je provjeriti povratnu IfError vrijednost iz da bi se utvrdilo postoje li problemi:
IfError(
Patch( DS1, ... ), Notify( "problem in the first action" ); false,
Patch( DS2, ... ), Notify( "problem in the second action" ); false,
true
)
Kompatibilnost vrste
IfError vraća vrijednost jednog od argumenata. Vrste svih vrijednosti koje može vratiti moraju biti IfError kompatibilne.
U posljednjem primjeru,Patch vraća zapis koji nije kompatibilan s logičkim vrijednostima koji se koriste za formule zamjene ili DefaultResult. Što je u redu, s obzirom na to da nema situacije u kojoj bi povratna vrijednost iz tih poziva zakrpa vratila IfError.
Napomena
Iako se ponašanje promjene obrađuje, vrste svih argumenata koje je potrebno trenutno IfError povezati 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 je prisiljen da odgovara vrsti prvog argumenta.
Excel prikazuje #DIV/0! kada dođe do podjele s nulom.
Razmislite IfError o sljedećem:
IfError( 1/x, "#DIV/0!" )
Gornja formula neće raditi. Tekstni niz "#DIV/0!" prisilno je postavljen na vrstu prvog argumenta u IfError, što je broj. Rezultat je još IfError jedna pogreška jer tekstni niz ne može biti prisilno postavljen. Kao ispravak, pretvorite prvi argument u tekstni niz tako da uvijek IfError vraća tekstni niz:
IfError( Text( 1/x ), "#DIV/0!" )
Kao što je prethodno navedeno, IfError može vratiti pogrešku ako je pogreškaZamjena ili DefaultResult .
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škama, pri čemu je FirstError prečac do prvog zapisa ove tablice. FirstError uvijek vraća istu vrijednost kao First( AllErrors ).
Error zapisi obuhvaćaju 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, ta je vrijednost u obliku ControlName.PropertyName. |
| Promatrana | Tekstni niz | Lokacija gdje se pogreška prikazala korisniku, korištena za izvješćivanje. Na primjer, za formulu vezanu za svojstvo kontrole, ta je vrijednost u obliku ControlName.PropertyName. |
| Pojedinosti | Zapis | Pojedinosti o pogrešci. Trenutno su pojedinosti navedene samo za mrežne pogreške. Ovaj zapis uključuje HttpStatusCode koji sadrži HTTP statusni kod 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 dovoljno 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 provjerava vrijednost pogreške.
Povratna vrijednost je Booleovo true ili false.
Korištenjem IsError se sprječava daljnja obrada pogreške.
IsBlankOrError
Funkcija IsBlankOrError provjerava praznu vrijednost ili vrijednost pogreške i odgovara vrijednosti Or( IsBlank( X ), IsError( X ) ).
Prilikom omogućivanja rukovanja pogreškama za postojeće aplikacije razmislite o zamjeni servisa IsBlank s IsBlankOrError da biste sačuvali postojeće ponašanje aplikacije. Prije dodavanja rukovanja pogreškama, prazna vrijednost korištena je za predstavljanje nultih vrijednosti iz baza podataka i vrijednosti pogrešaka. Error rukovanjem odvaja ta dva tumačenja praznina koja mogu promijeniti ponašanje postojećih aplikacija koje i dalje koriste IsBlank.
Povratna je vrijednost Booleovo true ili false.
Korištenjem IsBlankOrError se sprječava daljnja obrada pogreške.
Pomoću funkcije Error stvorite i prijavite prilagođenu pogrešku. 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, unesite Kind iMessage, koristeći isti zapis opisan gore za funkciju IfError .
U kontekstu funkcije IfErrorkoristite funkciju da Error biste ponovno stisli ili prošli kroz pogrešku. Na primjer, vaša logika IfError u može odlučiti da se u nekim slučajevima može zanemariti pogreška, ali u drugim slučajevima pogreška je važna za slanje. Unutar IfError ili App.OnErrorupotrijebiteError ( FirstError ) da biste prošli kroz pogrešku.
Funkciju Error je moguće i dodati u tablicu pogrešaka, kao što bi se nalazilo u tablici AllErrors . Koristite Error( AllErrors ) da biste ponovno stisli sve pogreške, a ne samo prve.
Pri proslijeđenom praznom zapisu ili praznoj tablici Error nema pogreške.
Sintaksa
Error( ErrorRecord )
Error( Tablica pogrešaka )
- ErrorRecord – obavezno. Error zapis s informacijama, uključujući polja Vrsta, Poruka i druga polja. Ljubaznost je potrebna. FirstError se može proslijediti izravno.
- Tablica pogrešaka– obavezno. Tablica zapisa podataka o pogrešci. AllErrors se može proslijediti izravno.
IfError( Vrijednost1, Zamjena1 [, Vrijednost2, Zamjena2, ... [, DefaultResult ] )
- Vrijednosti – Obavezno. Formula za ispitivanje ima li vrijednosti pogreške.
- Zamjene – Obavezno. Formule za procjenu i vrijednosti koje se vraćaju ako su podudarajući argumenti Value vratili pogrešku.
- DefaultResult – Nije obavezno. Formule za procjenu ako formula ne nađe nikakve pogreške.
IsError( Vrijednost )
IsBlankOrError( Vrijednost )
- Vrijednost– Obavezno. Formula za testiranje.
Primjeri
Jednostavan 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( "Došlo je do internog problema" ) | Prvi argument vraća vrijednost pogreške (zbog dijeljenja s nulom). Funkcija procjenjuje drugi argument i prikazuje poruku korisniku. Povratna vrijednost jest IfError povratna vrijednost stavke Obavijesti, prisilno odabrana na istu vrstu kao i prvi argument u IfError (broj). | 1 |
Jednostavan IsError
| Formula | Opis | Rezultat |
|---|---|---|
| IsError( 1 ) | Argument nije pogreška. | lažan |
| IsError(Blank() ) | Argument je prazan, ali nije i pogreška. | lažan |
| IsError( 1/0 ) | Argument je pogreška. | istinit |
| If( IsError( 1/0 ), Notify( "Došlo je do internog problema" ) ) | Argument koji vraća IsError 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). | istinit |
Jednostavan IsBlankOrError
| Formula | Opis | Rezultat |
|---|---|---|
| IsBlankOrError( 1 ) | Argument nije pogreška ili prazan. | lažan |
| IsBlankOrError(Blank() ) | Argument je prazan. | istinit |
| IsBlankOrError( 1/0 ) | Argument je pogreška. | istinit |
Jednostavan Error
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 je u stanju pogreške jer funkcija Value ima nevažeći argument. Budući da je to neočekivano od strane pisca formule, prosljeđuje se tako da ga korisnik vidi. U drugom slučaju, s istom formulom,b ima vrijednost 0, što rezultira 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. Koristi se s funkcijom Error , očekivane se pogreške mogu ukloniti, a preostale se pogreške zadržavaju i prijavljuju. Na primjer, ako bismo znali da dijeljenje s nulom neće biti problem u određenom kontekstu, te bi se pogreške mogle filtrirati, ostavljajući sve ostale 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.
Oznaka1 prikazuje vrijednost 1234 jer je to valjan ulaz u funkciju Value.
U TextInput1 unesite ToInfinity.
Label1 prikazuje vrijednost-1 jer to nije valjan ulaz u funkciju Value. Bez prelamanja funkcije Value s IfError, oznaka ne prikazuje vrijednost jer se vrijednost pogreške tretira kao prazna.