Funkcija Pogreške

Odnosi se na: Aplikacije od gotovih gradivnih elemenata Aplikacije stvorene prema modelu

Pruža informacije o pogrešci za prethodne promjene izvoru podataka.

Pregled

Pogreške se mogu dogoditi kada se neki zapis izvora podataka promijeni. Mogući su mnogi uzroci, uključujući i prekide mreže, neadekvatne dozvole i konflikte pri uređivanju.

Funkcije koje mijenjaju podatke u izvorima podataka, kao što su Patch, Collect, Remove, RemoveIf, Update, UpdateIf i SubmitForm prijavljuju pogreške na dva načina:

  • Svaka od ovih funkcija vratit će vrijednost pogreške kao rezultat operacije. Pogreške se mogu otkriti pomoću funkcije IsError i zamijeniti ili potisnuti funkcijama IfError i App.OnError kao i obično. Dodatne informacije potražite u odjeljku Otklanjanje pogrešaka.
  • Nakon operacije, funkcija Errors također će vratiti pogreške za prethodne operacije.. Ovo može biti korisno za prikaz poruke o pogrešci na zaslonu obrasca bez potrebe za bilježenjem pogreške u varijabli stanja.

Neke pogreške možete izbjeći prije nego što se pojave, korištenjem funkcija Validate i DataSourceInfo. Pogledajte rad s izvorima podataka za više prijedloga o tome kako raditi s pogreškama i kako ih izbjeći.

Opis

Funkcija Errors vraća tablicu pogrešaka koja sadrži sljedeće stupce:

  • Record. Zapis izvora podataka koji je imao pogrešku. Ako se pogreška dogodila tijekom stvaranja zapisa, ovaj stupac imat će vrijednost prazno.
  • Stupac. Stupac koji je uzrokovao pogrešku, ako se pogreška može pripisati jednom stupcu. U suprotnom, imat će vrijednost prazno.
  • Message. Opis pogreške. Ovaj se niz pogreške može prikazati krajnjem korisniku. Imajte na umu da ovu poruku može generirati izvor podataka i da može biti dugačka te će sadržavati sirove nazive stupaca koji korisniku ne moraju značiti ništa.
  • Error. Kôd pogreške koji se može koristiti u formulama za razrješavanje pogreške:
ErrorKind Opis
ErrorKind.Conflict Druga je promjena načinjena istom zapisu, što je rezultiralo konfliktom promjene. Upotrijebite funkciju Refresh da biste ponovno učitali zapis i pokušajte ponovno s promjenom.
ErrorKind.ConstraintViolation Prekršeno je jedno ili više ograničenja.
ErrorKind.CreatePermission Pokušalo se stvoriti neki zapis, a trenutačni korisnik nema dozvolu za stvaranje zapisa.
ErrorKind.DeletePermission Pokušalo se izbrisati neki zapis, a trenutačni korisnik nema dozvolu za brisanje zapisa.
ErrorKind.EditPermission Pokušalo se uredti neki zapis, a trenutačni korisnik nema dozvolu za uređivanje zapisa.
ErrorKind.GeneratedValue Pokušalo se promijeniti stupac koji izvor podataka automatski generira.
ErrorKind.MissingRequired Vrijednost za potrebni stupac nedostaje iz zapisa.
ErrorKind.None Nema pogreške.
ErrorKind.NotFound Pokušalo se urediti ili izbrisati neki zapis, ali zapis nije pronađen. Drugi je korisnik možda promijenio zapis.
ErrorKind.ReadOnlyValue Pokušalo se promijeniti stupac koji je samo za čitanje.
ErrorKind.Sync Izvor podataka je prijavio pogrešku. Dodatne informacije potražite u stupcu Poruka.
ErrorKind.Unknown Došlo je do pogreške, ali nepoznate vrste.
ErrorKind.Validation Otkriven je opći problem s provjerom valjanosti koji nije odgovarao nijednoj drugoj vrsti.

Pogreške se mogu vratiti za cijeli izvor podataka ili samo za odabrani redak unosom argumenta Record te funkcije.

Patch ili neka druga funkcija za rad s podatcima može vratiti vrijednost prazno ako, na primjer, nije moguće stvoriti zapis. Možete proslijediti prazno u funkciju Errors koja će u tim slučajevima vratiti odgovarajuće informacije o pogrešci. Naknadna upotreba funkcija za rad s podatcima na tom izvoru podataka izbrisat će ove podatke o pogrešci.

Ako nema pogrešaka, tablica koju funkcija Errors vrati imat će vrijednost prazno i može se testirati funkcijom IsEmpty.

Sintaksa

Errors( izvor podataka [, zapis ] )

  • DataSource – obavezno. Izvor podataka čije pogreške želite vratiti.
  • Record – neobavezno. Određeni zapis čije pogreške želite vratiti. Ako ne navedete ovaj argument, funkcija vraća pogreške za cijeli izvor podataka.

Primjeri

Korak po korak

U ovom primjeru koristit ćemo izvor podataka IceCream:

Sladoled.

U ovoj aplikaciji korisnik učitava zapis Chocolate u obrazac za unos podataka, a zatim mijenja vrijednost Quantity na 90. Zapis s kojim treba raditi smješten je u kontekstnu varijabluEditRecord:

  • UpdateContext( { EditRecord: LookUp( IceCream, Flavor = "Chocolate" ) } )

Da bi se to promijenilo u izvoru podataka, koristi se funkcija Patch:

  • Patch( IceCream, EditRecord, Gallery.Updates )

gdje Gallery.Updates daje rezultat { Quantity: 90 } budući da je izmijenjeno samo svojstvo Quantity.

Nažalost, tik prije no što je pozvana funkcija Patch, netko drugi modificira vrijednost Quantity za Chocolate na 80. Aplikacija Power Apps otkrit će to i neće dopustiti da se dogodi konfliktna promjena. Možete provjeriti postoji li ova situacija formulom:

  • IsEmpty( Errors( IceCream, EditRecord ) )

koja vraća false jer je funkcija Errors vratila sljedeću tablicu:

Zapis Stupac Poruka Pogreška
{ Flavor: "Chocolate", Quantity: 100 } prazno „Drugi je korisnik izmijenio zapis koji pokušavate izmijeniti. Ponovno učitajte zapis i pokušajte opet.” ErrorKind.Conflict

Na obrazac možete staviti oznaku koja će korisniku pokazati ovu pogrešku.

  • Da biste pokazali tu pogrešku, postavite svojstvo Text te oznake na ovu formulu:
    Label.Text = First(Errors( IceCream, EditRecord )).Message

Možete uz to dodati gumb Reload na obrazac da bi korisnik mogao učinkovito razriješiti konflikt.

  • Da bi se gumb prikazao samo kada dođe do sukoba, postavite svojstvo Visible gumba na ovu formulu:
    !IsEmpty( Lookup( Errors( IceCream, EditRecord ), Error = ErrorKind.Conflict ) )
  • Da biste vratili promjenu kada korisnik odabere taj gumb, postavite njezino svojstvo OnSelect na ovu formulu:
    ReloadButton.OnSelect = Revert( IceCream, EditRecord )