Partajați prin


Funcțiile Error, IfError, IsError, IsBlankOrError

Se aplică pentru: planșă de lucru aplicații Dataverse coloane de formule Fluxuri desktop Aplicații bazate pe model Power Pages Power Platform CLI

Detectează erori și oferă o valoare alternativă sau ia măsuri. Creați o eroare personalizată sau treceți printr-o eroare.

Notă

Dacă o aplicație a dezactivat funcția de gestionare a erorilor la nivel de formulă sub Setări>Actualizări> Retras, acele funcții nu vor funcționa corect.

IfError

Funcția IfError testează valorile până când găsește o eroare. Dacă funcția descoperă o eroare, funcția evaluează și returnează o valoare de înlocuire corespunzătoare și oprește evaluarea ulterioară. O valoare implicită poate fi de asemenea furnizată atunci când nu sunt găsite erori. Structura IfError seamănă cu cea a funcției If: IfError testează pentru erori, în timp ce If testează pentru true.

Utilizați IfError pentru a înlocui o eroare cu o valoare valabilă, astfel încât calculele din aval să poată continua. De exemplu, utilizați această funcție dacă intrarea utilizatorului poate duce la o împărțire la zero:

IfError( 1/x, 0 )

Această formulă returnează 0 dacă valoarea lui x este zero, deoarece 1/x produce o eroare. Dacă x nu este zero, 1/x este returnat.

Oprirea procesării ulterioare

Când formulele sunt înlănțuite împreună în formule comportamentale, precum:

Patch( DS1, ... );
Patch( DS2, ... )

A doua funcție Patch pentru DS2 va fi încercată chiar dacă Patch pentru DS1 nu reușește. Domeniul de aplicare al unei erori este limitat la fiecare formulă care este înlănțuită.

Utilizați IfError pentru a realiza o acțiune și a continua procesarea numai dacă acțiunea a avut succes. Aplicarea IfError la acest exemplu:

IfError(
    Patch( DS1, ... ), Notify( "problem in the first action" ),
    Patch( DS2, ... ), Notify( "problem in the second action" )
)

Dacă Patch pentru DS1 are o problemă, prima Notify este executată. Nu are loc nicio procesare suplimentară, inclusiv cel de-al doilea Patch pentru DS2. Dacă primul Patch reușește, al doilea Patch va executa.

Dacă este furnizat, argumentul opțional DefaultResult este returnat dacă nu sunt descoperite erori. Fără acest argument, ultimul argument Valoare este returnat.

Pe baza ultimului exemplu, valoarea returnată de la IfError poate fi verificată pentru a stabili dacă au existat probleme:

IfError(
    Patch( DS1, ... ), Notify( "problem in the first action" );  false,
    Patch( DS2, ... ), Notify( "problem in the second action" ); false,
    true
)

Compatibilitate tip

IfError returnează valoarea unuia dintre argumentele sale. Tipurile tuturor valorilor care ar putea fi returnate de IfError trebuie să fie compatibile.

În ultimul exemplu, Patch returnează o înregistrare care nu este compatibilă cu booleenii utilizați pentru formulele Înlocuire sau DefaultResult. Ceea ce este în regulă, întrucât nu există nicio situație în care valoarea returnată de la aceste apeluri Patch să fie returnată de IfError.

Notă

În timp ce comportamentul este în proces de schimbare, tipurile de argumente la IfError trebuie să fie compatibile în prezent.

În exemplul simplu descris anterior:

IfError( 1/x, 0 )

Tipurile de 1/x și 0 erau compatibile, deoarece ambele erau numere. Dacă nu sunt, al doilea argument este forțat să se potrivească cu tipul primului argument.

Excel afișează #DIV/0! când apare o împărțire la zero.

Luați în considerare IfError cu următoarele în schimb:

IfError( 1/x, "#DIV/0!" )

Formula de mai sus nu va funcționa. Șirul de text "#DIV/0!" este forțat la tipul primului argument la IfError, care este un număr. Rezultatul IfError este încă o eroare, deoarece șirul de text nu poate fi forțat. Ca soluție, convertiți primul argument într-un șir text, astfel încât IfError returnează întotdeauna un șir text:

IfError( Text( 1/x ), "#DIV/0!" )

Așa cum ați văzut mai sus, IfError poate returna o eroare dacă Înlocuire sau DefaultResult este o eroare.

FirstError / AllErrors

În cadrul formulelor de înlocuire, înregistrarea FirstError și tabelul AllErrors furnizează informații despre orice erori care au fost găsite. AllErrors este un tabel cu înregistrări cu informații despre erori, cu FirstError fiind o comandă rapidă la prima înregistrare a acestui tabel. FirstError returnează întotdeauna aceeași valoare ca First( AllErrors ).

Înregistrările erorii includ:

Câmp Tipul Descriere
Fel Enumerarea ErrorKind (număr) Categoria erorii.
Mesaj Șir de text Mesaj despre eroare, potrivit pentru a fi afișat utilizatorului final.
Sursă Șir de text Locația de unde a provenit eroarea, folosită pentru raportare. De exemplu, pentru o formulă legată de o proprietate de control, această valoare este sub forma ControlName.PropertyName.
Observat Șir de text Locație unde eroarea a apărut pentru utilizator, utilizată pentru raportare. De exemplu, pentru o formulă legată de o proprietate de control, această valoare este sub forma ControlName.PropertyName.
Detalii Înregistrare Detalii despre eroare. În prezent, detaliile sunt furnizate numai pentru erorile de rețea. Această înregistrare include HttpStatusCode care conține codul de stare HTTP și HttpResponse care conține corpul răspuns din conector sau service.

De exemplu, luați în considerare următoarea formulă drept control Buton pentru proprietatea OnSelect:

Set( a, 1/0 )

Și această formulă pe proprietatea OnSelect a unui al doilea control Buton:

IfError( a, Notify( "Internal error: originated on " & FirstError.Source & ", surfaced on " & FirstError.Observed ) )

Exemplul de formulă de mai sus ar afișa următorul banner atunci când cele două butoane sunt activate în ordine:

Controlul butonului a fost activat, afișând o notificare din funcția Notify.

De obicei, va exista o singură eroare cu care FirstError poate funcționa suficient. Cu toate acestea, există scenarii în care pot fi returnate mai multe erori. De exemplu, când utilizați un operator de înlănțuire a formulelor sau funcția Concurent funcția. Chiar și în aceste situații, raportarea FirstError ar putea fi suficientă pentru a dezvălui o problemă, în loc să supraîncărcați un utilizator cu mai multe erori. Dacă mai aveți o cerință de a lucra cu fiecare eroare individual, puteți utiliza tabelul AllErrors.

IsError

Funcția IsError testează pentru o valoare eroare.

Valoarea de returnare este o valoare booleană true sau false.

Utilizarea IsError previne orice procesare ulterioară a erorii.

IsBlankOrError

Funcția IsBlankOrError testează fie pentru o valoare necompletată, fie o valoare de eroare și este echivalentul a Or( IsBlank( X ), IsError( X ) ).

Când activați gestionarea erorilor pentru aplicațiile existente, luați în considerare înlocuirea IsBlank cu IsBlankOrError pentru a păstra comportamentul aplicației existente. Înainte de adăugarea tratării erorilor, o valoare blank a fost folosită pentru a reprezenta atât valorile nule din bazele de date, cât și valorile de eroare. Tratarea erorilor separă aceste două interpretări ale necompletat care ar putea schimba comportamentul aplicațiilor existente care continuă să utilizeze IsBlank.

Valoarea de returnare este o valoare booleană true sau false.

Utilizarea IsBlankOrError previne orice procesare ulterioară a erorii.

Utilizați funcția Eroare pentru a crea și raporta o eroare personalizată. De exemplu, este posibil să aveți o logică pentru a determina dacă orice valoare dată este validă pentru contextul dvs. sau nu - ceva care nu este verificat automat pentru o problemă. Puteți să creați și să returnați propria dvs. eroare, completată cu Amabil și Mesaj, folosind aceeași înregistrare descrisă mai sus pentru funcția IfError .

În contextul IfError, utilizați funcția Error pentru a reintroduce sau trece printr-o eroare. De exemplu, logica dvs. din IfError poate decide că, în unele cazuri, o eroare poate fi ignorată în siguranță, dar în alte cazuri este important să o trimiteți. În IfError sau App.OnError, utilizați Error( FirstError ) pentru a trece printr-o eroare.

Funcției Eroare i se poate transmite și un tabel de erori, așa cum ar fi găsit în tabelul AllErrors. Utilizați Error( AllErrors ) pentru a reintroduce toate erorile și nu doar prima.

O înregistrare blank sau un tabel gol transmis către Eroare nu duce la nicio eroare.

Sintaxă

Eroare( ErrorRecord )
Eroare( ErrorTable )

  • ErrorRecord – Obligatoriu. Înregistrarea informațiilor despre eroare, inclusiv Kind, Message și alte câmpuri. Este necesar . FirstError poate fi transmis direct.
  • ErrorTable – Obligatoriu. Tabelul înregistrărilor informațiilor despre erori. AllErrors pot fi transmise direct.

DacăEroare( Valoare1, Înlocuire1 [, Valoare2 , Înlocuire2, ... [, DefaultResult ] ] )

  • Valori – Obligatoriu. Formulele pentru testarea unei valori de eroare.
  • Înlocuiri – Necesar. Formulele de evaluat și valorile de returnat dacă argumentele Valoare corespunzătoare au returnat o eroare.
  • DefaultResult – Opțional. Formulele pentru a evalua dacă formula nu găsește erori.

IsError( Valoare )
IsBlankOrError( Valoare )

  • Valoare – Obligatoriu. Formula de testat.

Exemple

IfError simplu

Formula Descriere Rezultat
DacăEroare( 1, 2 ) Primul argument nu este o eroare. Funcția nu are alte erori de verificat și nici valori returnate implicite. Funcția returnează ultimul argument valoare evaluat. 1
DacăEroare( 1/0, 2 ) Primul argument returnează o valoare de eroare (din cauza împărțirii la zero). Funcția evaluează al doilea argument și îl returnează ca rezultat. 2
DacăEroare (10, 20, 30) Primul argument nu este o eroare. Funcția nu are alte erori de verificat, dar are o valoare returnată implicită. Funcția returnează argumentul DefaultResult. 30
DacăEroare( 10, 11, 20, 21, 300) Primul argument 10 nu este o eroare, deci funcția nu evaluează înlocuirea corespunzătoare a acelui argument 11. Al treilea argument 20 nu este o eroare, deci funcția nu evaluează înlocuirea corespunzătoare a acelui argument 21. Al cincilea argument 300 nu are nicio înlocuire corespunzătoare și este rezultatul implicit. Funcția returnează rezultatul respectiv, deoarece formula nu conține erori. 300
IfError( 1/0, Notify( „A existat o problemă internă”)) Primul argument returnează o valoare de eroare (din cauza împărțirii la zero). Funcția evaluează al doilea argument și afișează un mesaj pentru utilizator. Valoarea de returnare a IfError este valoarea de returnare pentru Notify, constrâns la același tip cu primul argument IfError (un număr). 1

IsError simplu

Formulă Descriere Rezultat
IsError( 1 ) Argumentul nu este o eroare. fals
IsError( Gol () ) Argumentul este necompletat, dar nu o eroare. fals
IsError( 1/0 ) Argumentul este o eroare. adevărat
If( IsError( 1/0 ), Notify( „A existat o problemă internă”)) Argumentul pentru IsError returnează o valoare de eroare (din cauza împărțirii la zero). Această funcție returnează adevărat, care provoacă If să afișeze un mesaj utilizatorului cu funcția Notify. Valoarea de returnare a If este valoarea de returnare pentru Notify, constrâns la același tip cu primul argument If (o valoare booleană). adevărat

Simplu IsBlankOrError

Formula Descriere Rezultat
IsBlankOrError( 1 ) Argumentul nu este o eroare sau o valoare blank. fals
IsBlankOrError( Gol () ) Argumentul este o valoare blank. adevărat
IsBlankOrError( 1/0 ) Argumentul este o eroare. adevărat

Eroare simplă

În acest exemplu, datele sunt validate una față de alta, rezultând o eroare dacă există o problemă.

If( StartDate > EndDate,
    Error( { Kind: ErrorKind.Validation, Message: "Start Date must be before End Date" } ) )

În acest exemplu, unele erori sunt lăsate să treacă, în timp ce altele sunt suprimate și înlocuite cu o valoare. În primul caz, b se află într-o stare de eroare, deoarece funcția Valoare are un argument nevalid. Deoarece acest lucru este neașteptat de scriitorul formulei, acesta este transmis astfel încât utilizatorul să îl vadă. În al doilea caz, cu aceeași formulă, b are valoarea 0, rezultând o împărțire la zero. În acest caz, autorul formulei poate ști că acest lucru este acceptabil pentru această logică, poate suprima eroarea (nu este afișat niciun banner) și poate returna -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

Tabelul AllErrors poate fi filtrat ca orice alt tabel. Folosit cu funcția Eroare , erorile așteptate pot fi eliminate, iar erorile rămase pot fi păstrate și raportate. De exemplu, dacă am ști că împărțirea la zero nu va fi o problemă într-un anumit context, acele erori ar putea fi filtrate, lăsând toate celelalte erori intacte cu următoarea formulă:

Error( Filter( AllErrors, Kind <> ErrorKind.Div0 ) )

Pas cu pas

  1. Adăugați un control Intrare text și numiți-l TextInput1 dacă nu are acest nume în mod implicit.

  2. Adăugați un control Label și numiți-l Etichetă1 dacă nu are acest nume în mod implicit.

  3. Setați formula pentru proprietatea Text pentru Etichetă1 la:

    IfError( Value( TextInput1.Text ), -1 )
    
  4. În TextInput1, introduceți 1234.

    Label1 arată valoarea 1234 deoarece aceasta este o intrare validă pentru funcția Value.

  5. În TextInput1, introduceți ToInfinity.

    Label1 arată valoarea -1 , deoarece aceasta nu este o intrare validă pentru funcția Value. Fără a încadra funcția Value cu IfError, eticheta nu ar arăta nicio valoare, deoarece valoarea de eroare este tratată ca necompletat.

Consultați și

Formula de referință pentru Power Apps