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ă

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 de x este zero, așa cum 1/x va 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 va returna valoarea unuia dintre argumentele sale. Tipurile tuturor valorilor care ar putea fi returnate de IfError trebuie să fie compatibile.

În ultimul exemplu, Patch va returna o înregistrare care nu este compatibilă cu valorile booleane folosite 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. În caz contrar, al doilea argument va fi forțate pentru a se potrivi cu tipul primului argument.

Excel va afișa #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!" va fi impus la tipul primului argument pentru IfError, care este un număr. Rezultatul IfError va fi încă o eroare, deoarece șirul de text nu poate fi impus. 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 de înregistrări cu informații despre erori, cu FirstError fiind o comandă rapidă la prima înregistrare a acestui tabel. FirstError va returna întotdeauna aceeași valoare ca First( AllErrors ).

Înregistrările erorii includ:

Câmp Tipul Descriere
Gen 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, aceasta va avea forma ControlName.PropertyName.
Remarcat Ș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, aceasta va avea forma ControlName.PropertyName.
Detalii Record 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 serviciu.

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 va preveni 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 gestionării erorilor, o valoare necompletată a fost utilizată pentru a reprezenta atât valori nule din baze de date, cât și valori 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.

Folosind IsBlankOrError va împiedica 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. Kind este obligatoriu. FirstError poate fi transmis direct.
  • ErrorTable – Obligatoriu. Tabelul înregistrărilor informațiilor despre erori. AllErrors poate fi transmis direct.

IfError( Value1, Replacement1 [, Value2, Replacement2, ... [, DefaultResult ] ] )

  • Valoare(i) – Obligatoriu. Formulele pentru testarea unei valori de eroare.
  • Înlocuire(i) – Obligatoriu. 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 )

  • Value - Obligatoriu. Formula de testat.

Exemple

IfError simplu

Formula Descriere Rezultat
IfError( 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
IfError( 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
IfError( 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
IfError( 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( "S-a înregistrat 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. false
IsError( Blank() ) Argumentul este necompletat, dar nu o eroare. false
IsError( 1/0 ) Argumentul este o eroare. true
If( IsError( 1/0 ), Notify( "S-a înregistrat 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ă). true

Simplu IsBlankOrError

Formula Descriere Rezultat
IsBlankOrError( 1 ) Argumentul nu este o eroare sau o valoare blank. false
IsBlankOrError( Blank() ) Argumentul este o valoare blank. true
IsBlankOrError( 1/0 ) Argumentul este o eroare. true

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 va fi î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 va avea 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.

    Etichetă1 va afișa valoarea 1234 deoarece aceasta este o intrare valabilă pentru funcția Value.

  5. În TextInput1, introduceți ToInfinity.

    Etichetă1 va afișa valoarea -1 deoarece aceasta nu este o intrare valabilă 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

Referință despre formule Power Apps