Belešku
Pristup ovoj stranici zahteva autorizaciju. Možete pokušati da se prijavite ili da promenite direktorijume.
Pristup ovoj stranici zahteva autorizaciju. Možete pokušati da promenite direktorijume.
| Funkcije | Odnosi se na |
|---|---|
| Error IfError IsError |
|
| IsBlankOrError |
|
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 pronađ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 podseća IfError na funkciju If : IfError proverava da li postoje greške, a If proverava da li je tačno.
Koristite IfError je da biste zamenili grešku važećom vrednošću kako bi izračunavanja niz toka mogli 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 ga za izvršavanje radnje i nastavite sa obradom samo ako je radnja bila uspešna. 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, može se proveriti IfError povratna vrednost iz da bi se utvrdilo da li je bilo nekih problema:
IfError(
Patch( DS1, ... ), Notify( "problem in the first action" ); false,
Patch( DS2, ... ), Notify( "problem in the second action" ); false,
true
)
Tip kompatibilnosti
IfError daje vrednost jednog od argumenata. Tipovi svih vrednosti koje mogu da daju moraju biti IfError 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, pošto ne postoji situacija u kojoj bi povratnu vrednost iz ovih poziva zakrpa vratio IfError.
Belešku
Iako je ponašanje u toku za promenu, tipovi svih argumenata moraju IfError biti kompatibilni trenutno.
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 IfError razmotrite sledeće:
IfError( 1/x, "#DIV/0!" )
Gornja formula neće raditi. Tekstualna niska "#DIV/0!" se menja u tip prvog argumenta za IfError, što je broj. Rezultat je još IfError jedna greška jer tekstualna niska ne može da se menja. Kao rešenje, konvertujte prvi argument u tekstualnu nisku tako da IfError uvek vraća tekstualnu nisku:
IfError( Text( 1/x ), "#DIV/0!" )
Kao što je navedeno iznad, IfError može da vrati grešku ako su zamena ili podrazumevani rezultat greška.
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 ).
Error zapisi uključuju:
| 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:
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 proverava vrednost greške.
Povratna vrednost je logička vrednost true ili false.
Korišćenje IsError sprečava dalju obradu greške.
IsBlankOrError
Funkcija IsBlankOrError testira praznu vrednost ili vrednost greške i jednaka Or( IsBlank( X ), IsError( X ) )je vrednosti .
Kada omogućavate rukovanje greškama za postojeće aplikacije, razmotrite zamenu funkcije IsBlankIsBlankOrError da biste očuli 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. ErrorRukovanje razdvaja ove dve interpretacije praznog koje mogu da promene ponašanje postojećih aplikacija koje nastavljaju da 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, kao i da je popunite funkcijom Kind i Message, koristeći isti zapis opisan iznad za funkciju IfError .
U kontekstu , koristite IfErrorfunkciju Error za ponovnu upotrebu ili prolazak kroz grešku. Na primer, vaša logika IfError u može da odluči da se u nekim slučajevima greška može bezbedno zanemariti, ali u drugim slučajevima je važno da je pošaljete. U IfErrorokviru ili App.OnError koristite Error( FirstError ) da biste prošli kroz grešku.
Funkciji Error može da se prosleđuje i tabela grešaka, kao što bi bilo u tabeli AllErrors . Koristite Error( AllErrors ) da biste poništili sve greške, a ne samo prve.
Prazan zapis ili prazna tabela su prosleđeni rezultatima Error bez greške.
Sintaksa
Error( ErrorRecord )
Error( Tabela sa greškama )
- ErrorRecord – Obavezno. Error zapis informacija, uključujući "Vrsta", "Poruka" 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( Vrednost1, zamena1 [, Vrednost2, Zamena2, ... [, Podrazumevani rezultat ] ] )
- 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( Vrednost )
- Vrednost– Obavezno. Formula koja se testira.
Primeri
Jednostavno 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 |
| IfError( 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, Obavesti( "Došlo je do unutrašnjeg problema" ) | Prvi argument vraća vrednost greške (zbog deljenja nulom). Funkcija izračunava drugi argument i prikazuje poruku korisniku. Povratna vrednost je IfError povratna vrednost funkcije "Obavesti", prisivljena na isti tip kao i prvi argument za IfError (broj). | 1 |
Jednostavno IsError
| Formula | Opis | rezultat |
|---|---|---|
| IsError( 1 ) | Argument nije greška. | lažan |
| IsError( Prazno() ) | Argument je prazan, ali nije greška. | lažan |
| IsError( 1/0 ) | Argument je greška. | Istina |
| If( IsError( 1/0 ), Obavesti( "Došlo je do unutrašnjeg problema" ) | Argument za davanje IsError vrednosti 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 |
Jednostavno IsBlankOrError
| Formula | Opis | rezultat |
|---|---|---|
| IsBlankOrError( 1 ) | Argument nije greška niti prazna vrednost. | lažan |
| IsBlankOrError( Prazno() ) | Argument je prazna vrednost. | Istina |
| IsBlankOrError( 1/0 ) | Argument je greška. | Istina |
Jednostavno Error
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. Kada se koristi sa Error funkcijom, mogu se ukloniti očekivane greške i preostale greške će se zadržati i prijaviti. 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
Dodajte kontrolu Unos teksta i nazovite je Text1Input1 ako podrazumevano nema taj naziv.
Dodajte kontrolu Oznaka i nazovite je Label1 ako podrazumevano nema taj naziv.
Podesite formulu svojstva Text kontrole Label1 na:
IfError( Value( TextInput1.Text ), -1 )U TextInput1 unesite 1234.
Label1 prikazuje vrednost 1234 jer je ovo važeći ulaz u funkciju Value.
U TextInput1 unesite ToInfinity.
Label1 prikazuje vrednost-1 jer ovo nije validan ulaz u funkciju Value. Bez prelamanja funkcije "Vrednost IfError" sa , oznaka neće prikazati vrednost jer se vrednost greške tretira kao prazna.