Funcția erori

Se aplică pentru: Aplicații Canvas Aplicații bazate pe model

Oferă informații despre eroare pentru modificările anterioare la o sursă de date.

Prezentare generală

Erorile pot apărea atunci când este modificată o înregistrare a unei surse de date. Sunt posibile multe cauze, inclusiv întreruperi din rețea, permisiuni inadecvate și conflicte de editare.

Funcțiile care modifică sursele de date, ca Corecție, Colectare, Înlăturare, RemoveIf, Actualizare, UpdateIf și SubmitForm raportează erori în două moduri:

  • Fiecare dintre aceste funcții va returna o valoare de eroare ca rezultat al operației. Erorile pot fi detectate cu IsError și înlocuite sau suprimate cu IfError și App.OnError ca de obicei. Pentru mai multe informații, consultați Manipulare erori.
  • După operație, funcția Erori va returna și erorile pentru operațiunile anterioare. Poate fi util pentru afișarea ununi mesaj de eroarei pe un ecran de formular fără a fi nevoie să capturați eroarea într-o variabilă de stare.

Puteți evita unele erori înainte ca acestea să se producă folosind funcțiile Validate și DataSourceInfo. Consultați lucrul cu surse de date pentru mai multe sugestii despre cum să lucrați cu erorile și să le evitați.

Descriere

Funcția Errors returnează un tabel de erori care conține următoarele coloane:

  • Înregistrare. Înregistrarea din sursa de date care a întâmpinat eroarea. Dacă eroarea a apărut în timpul creării unei înregistrări, această coloană va fi necompletată.
  • Coloană. Coloana care a cauzat eroarea, dacă eroarea poate fi atribuită unei singure coloane. În caz contrar va fi necompletată.
  • Mesaj. O descriere a erorii. Acest șir de eroare poate fi afișat pentru utilizatorul final. Rețineți că acest mesaj poate fi generat de sursa de date și poate fi lung și poate să conțină nume de coloane brute care ar putea să nu aibă niciun sens pentru utilizator.
  • Eroare. Un cod de eroare care poate fi utilizat în formule pentru a ajuta la rezolvarea erorii:
ErrorKind Descriere
ErrorKind.Conflict Altă modificare a fost făcută la aceeași înregistrare, rezultând un conflict de modificare. Utilizați funcția Refresh pentru a reîncărca înregistrarea și încercați din nou să modificați.
ErrorKind.ConstraintViolation Au fost încălcate una sau mai multe constrângeri.
ErrorKind.CreatePermission S-a încercat crearea unei înregistrări, iar utilizatorul curent nu are permisiunea de a crea înregistrări.
ErrorKind.DeletePermission S-a încercat ștergerea unei înregistrări, iar utilizatorul curent nu are permisiunea de a șterge înregistrări.
ErrorKind.EditPermission S-a încercat editarea unei înregistrări, iar utilizatorul curent nu are permisiunea de a edita înregistrări.
ErrorKind.GeneratedValue S-a încercat modificarea unei coloane pe care sursa de date o generează automat.
ErrorKind.MissingRequired Valoarea unei coloane necesare lipsește din înregistrare.
ErrorKind.None Nu există nicio eroare.
ErrorKind.NotFound S-a încercat modificarea sau ștergerea unei înregistrări, dar înregistrarea nu a putut fi găsită. Este posibil ca alt utilizator să fi schimbat înregistrarea.
ErrorKind.ReadOnlyValue S-a încercat modificarea unei coloane care este doar în citire.
ErrorKind.Sync Sursă de date a raportat o eroare. Pentru mai multe informații verificați coloana Mesaje.
ErrorKind.Necunoscut A existat o eroare, dar de un tip necunoscut.
ErrorKind.Validare A fost detectată o problemă generală de validare, care nu se potrivește cu celelalte tipuri.

Erorile pot fi returnate pentru întreaga sursă de date sau pentru doar un singur rând selectat prin furnizarea argumentului Înregistrare pentru funcție.

Patch sau o altă funcție de date poate returna o valoare blank dacă, de exemplu, nu a putut fi creată o înregistrare. Puteți trece necompletat la Erorrs și va returna informațiile de eroare adecvate în aceste cazuri. Utilizarea ulterioară a funcțiilor de date în aceeași sursă de date va șterge aceste informații despre eroare.

Dacă nu există erori, tabelul pe care îl returnează Erorrs va fi ncompletat și poate fi testat cu ajutorul funcției IsEmpty.

Sintaxă

Errors( DataSource [, Record ] )

  • DataSource – Obligatoriu. Sursa de date pentru care doriți să returnați erori.
  • Record - Opțional. O anumită înregistrare pentru care doriți să returnați erori. Dacă nu specificați acest argument, funcția returnează erori pentru întreaga sursă de date.

Exemple

Pas cu pas

Pentru acest exemplu, vom lucra cu sursa de date Înghețată:

Înghețată.

Prin intermediul aplicației, un utilizator încarcă înregistrarea Ciocolată într-un formular de introducere a datelor și modifică apoi valoarea Cantitate la 90. Înregistrarea cu care trebuie lucrat este plasată în variabila de contextEditRecord:

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

Pentru a face această modificare în sursă de date, este utilizată funcția Patch:

  • Patch( IceCream, EditRecord, Gallery.Updates )

unde Gallery.Updates evaluează la { Cantitate: 90 }, deoarece numai proprietatea Cantitate a fost modificată.

Din păcate, chiar înainte să fi fost invocată funcția Patch altcineva efectuează modificarea aferentă Cantității pentru Ciocolată la 80. Power Apps va detecta acest lucru și nu va permite apariția schimbării conflictuale. Puteți verifica această situație cu formula:

  • IsEmpty( Errors( IceCream, EditRecord ) )

care returnează fals, pentru că funcția Errors a returnat următorul tabel:

Record Coloană Mesaj Eroare
{ Aromă: "Ciocolată", Cantitate: 100 } blank "Un alt utilizator a modificat înregistrarea pe care încercați să o modificați. Reîncărcați înregistrarea și încercați din nou." ErrorKind.Conflict

Puteți plasa o etichetă pe formular pentru a afișa această eroare utilizatorului.

  • Pentru a afișa eroare, setați proprietatea etichetei Text la această formulă:
    Label.Text = First(Errors( IceCream, EditRecord )).Message

Puteți adăuga, de asemenea, un buton Reîncărcare de pe formular, astfel încât utilizatorul să poată rezolva eficient conflictul.

  • Pentru a afișa butonul doar atunci când a avut loc un conflict, setați butonul Vizibil pentru această formulă:
    !IsEmpty( Lookup( Errors( IceCream, EditRecord ), Error = ErrorKind.Conflict ) )
  • Pentru a reveni la modificarea pe care utilizatorul selectează butonul, setați proprietatea OnSelect pentru această formulă:
    ReloadButton.OnSelect = Revert( IceCream, EditRecord )