Funkcija "Greške"
Važi za: Canvas aplikacije Model-driven aplikacije
Pruža informacije o grešci za prethodne promene u izvoru podataka.
Pregled
Greške se mogu dogoditi kada se promeni zapis izvora podataka. Mogući su mnogi uzroci, uključujući prekid mreže, neadekvatne dozvole i neusaglašenosti oko uređivanja.
Funkcije koje menjaju podatke u izvorima podataka, kao što su Patch, Collect, Remove, RemoveIf, Update, UpdateIf i SubmitForm prijavljuju greške na dva načina:
- Svaka od ovih funkcija će vratiti grešku kao rezultat operacije. Greške se mogu otkriti pomoću funkcije IsError i zameniti ili potisnuti funkcijom IfError i App.OnError, kao i obično. Za više informacija, pogledajte članak Rukovanje greškama.
- Nakon operacije, funkcija Errors će takođe vratiti greške za prethodne operacije. Ovo može biti korisno za prikazivanje poruke o grešci na ekranu obrasca bez potrebe da hvatate grešku u promenljivoj statusa.
Neke greške možete izbeći pre nego što se one pojave korišćenjem funkcija Validate i DataSourceInfo. Pogledajte rad sa izvorima podataka za više predloga o tome kako raditi i izbegavati greške.
Opis
Funkcija Errors vraća tabelu grešaka koja sadrži sledeće kolone:
- Zapis. Zapis u izvoru podataka koji je imao grešku. Ako se greška dogodila tokom kreiranja zapisa, ova kolona će biti prazna.
- Kolona. Kolona koja je izazvala grešku, ako se greška može pripisati jednoj koloni. Ako ne, to će biti prazno.
- Poruka. Opis greške. Ova niska grešaka se može prikazati krajnjem korisniku. Imajte na umu da ovu poruku može generisati izvor podataka, da može biti dugačka i da može sadržati sirove nazive kolona, koji za korisnika možda nemaju nikakvo značenje.
- Greška. Kôd greške koji se može koristiti u formulama za rešavanje greške:
ErrorKind | Opis |
---|---|
ErrorKind.Conflict | Nastala je druga promena za isti zapis, što je dovelo do neusaglašenosti pri promeni. Koristite funkciju Refresh da biste ponovo učitali zapis, pa ponovo pokušajte da obavite promenu. |
ErrorKind.ConstraintViolation | Jedno ili više ograničenja je prekršeno. |
ErrorKind.CreatePermission | Načinjen je pokušaj kreiranja zapisa, a trenutni korisnik nema dozvolu za kreiranje zapisa. |
ErrorKind.DeletePermission | Načinjen je pokušaj brisanja zapisa, a trenutni korisnik nema dozvolu za brisanje zapisa. |
ErrorKind.EditPermission | Načinjen je pokušaj uređivanja zapisa, a trenutni korisnik nema dozvolu za uređivanje zapisa. |
ErrorKind.GeneratedValue | Načinjen je pokušaj da se promeni kolona koju izvor podataka automatski generiše. |
ErrorKind.MissingRequired | Vrednost za potrebnu kolonu nedostaje iz zapisa. |
ErrorKind.None | Nema greške. |
ErrorKind.NotFound | Načinjen je pokušaj uređivanja ili brisanja zapisa, ali zapis nije pronađen. Drugi korisnik je možda promenio zapis. |
ErrorKind.ReadOnlyValue | Načinjen je pokušaj promene kolone koja je samo za čitanje. |
ErrorKind.Sync | Greška je prijavljena od strane izvora podataka. Proverite kolonu Poruka za više informacija. |
ErrorKind.Unknown | Došlo je do greške, ali nepoznate vrste. |
ErrorKind.Validation | Otkriven je opšti problem validacije koji nije odgovarao nijednoj drugoj vrsti. |
Greške se mogu vratiti za čitav izvor podataka ili samo za odabrani red pružanjem argumenta funkciji Record.
Patch ili neka druga funkcija podataka može vratiti praznu vrednost ako, na primer, nije moguće kreirati zapis. Možete da prosledite prazno u Errors, a ona će vratiti odgovarajuće informacije o greškama u tim slučajevima. Naredna upotreba funkcije podataka u istom izvoru podataka očistiće ove informacije o grešci.
Ako nema grešaka, tabela koju vraća funkcija Errors biće empty i može se testirati pomoću funkcije IsEmpty.
Sintaksa
Errors( DataSource [, Zapis ] )
- DataSource – Obavezno. Izvor podataka za koji želite da vraća greške.
- Record – Opcionalno. Određeni zapis za koji želite da vraća greške. Ako ne navedete ovaj argument, funkcija vraća greške za ceo izvor podataka.
Primeri
Korak po korak
Za ovaj primer, radićemo sa izvorom podataka IceCream:
Kroz aplikaciju korisnik učitava zapis Čokolada u obrascu za unos podataka, a zatim menja vrednost Količina na 90. Zapis sa kojim se radi smešten je u promenljivu konteksta EditRecord:
- UpdateContext( { EditRecord: LookUp( IceCream, Flavor = "Chocolate" ) } )
Da biste izvršili ovu promenu u izvoru podataka, funkcija Patch se koristi:
- Patch( IceCream, EditRecord, Gallery.Updates )
gde se Gallery.Updates izračunava na { Quantity: 90 }, pošto je izmenjeno samo svojstvo Quantity.
Na žalost, malo pre nego što je funkcija Patch pozvana, neko drugi menja svojstvo Quantity za čokoladu na 80. Power Apps će otkriti to i neće dozvoliti da se dogodi neusaglašena promena. Možete proveriti ovu situaciju pomoću formule:
- IsEmpty( Errors( IceCream, EditRecord ) )
koja vraća netačno, zato što je funkcija Errors vratila sledeću tabelu:
Zapis | Kolona | Poruka | Greška |
---|---|---|---|
{ Flavor: "Chocolate", Quantity: 100 } | prazno | „Drugi korisnik je izmenio zapis koji pokušavate da izmenite. Ponovo učitajte zapis, a zatim pokušajte ponovo.“ | ErrorKind.Conflict |
Na obrazac možete staviti oznaku koja će korisniku pokazati ovu grešku.
- Da biste prikazali grešku, podesite svojstvo Text oznake prema ovoj formuli:
Label.Text = First(Errors( IceCream, EditRecord )).Message
Takođe možete da dodate dugme Učitaj ponovo na obrazac, tako da korisnik može efikasno rešiti neusaglašenost.
- Da biste dugme prikazali samo kada je došlo do neusaglašenosti, podesite svojstvo Visible dugmeta prema ovoj formuli:
!IsEmpty( Lookup( Errors( IceCream, EditRecord ), Error = ErrorKind.Conflict ) ) - Da biste vratili promenu koju korisnik izabere kada pritisne dugme, podesite njegovo svojstvo OnSelect prema ovoj formuli:
ReloadButton.OnSelect = Revert( IceCream, EditRecord )