Partajați prin


Error, , IfErrorIsError, IsBlankOrError funcții

Funcţii Se aplică la
Error
IfError
IsError
Aplicațiile Pânză Copilot Studio Desktop fluxurilor de dateVerse coloane de formule Model aplicații bazate pe platforma Power Platform CLI Dataverse funcții Power Pages
IsBlankOrError Aplicații pânză Copilot Studio Desktop fluxuri model aplicații bazate pe modele Power Platform ClI Dataverse funcții Power Pages

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 seamănă cu cea a IfError funcției If : IfError testează erorile, în timp ce Dacă testează adevărat.

Se utilizează IfError pentru a înlocui o eroare cu o valoare validă, 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ă.

Se utilizează IfError pentru a efectua o acțiune și a continua procesarea doar dacă acțiunea a reușit. Se aplică 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.

Pornind de la ultimul exemplu, valoarea returnată de la IfError poate fi verificată pentru a determina dacă există 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 pot 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ă, deoarece nu există nicio situație în care valoarea returnată din aceste apeluri corecție ar fi returnată de IfError.

Notă

În timp ce comportamentul în curs pentru o modificare, tipurile tuturor argumentelor trebuie să IfError 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 următoarele:

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

Formula de mai sus nu va funcționa. Șirul "#DIV/0!" text este coerced la tipul primului argument la IfError, care este un număr. Rezultatul IfError este încă o eroare, deoarece șirul text nu poate fi impunet. Ca remediere, efectuați conversia primului argument într-un șir text, astfel încât IfError să returneze întotdeauna un șir text:

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

După cum se vede mai sus, IfError puteți 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 de 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 ).

Error printre înregistrări se numără:

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ă o valoare de eroare.

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

Utilizarea IsError împiedică procesarea ulterioară a erorii.

IsBlankOrError

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

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

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

Utilizarea IsBlankOrError împiedică procesarea ulterioară a erorii.

Utilizați funcția pentru a crea și a raporta Error o eroare particularizată. 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 eroare, să finalizați cu Kind și Message, utilizând aceeași înregistrare descrisă mai sus pentru IfError funcție.

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

Funcția Error poate fi transmisă, de asemenea, un tabel de erori, așa cum s-ar găsi în tabelul AllErrors . Utilizați Error( AllErrors ) pentru a regăsi toate erorile și nu doar prima.

O înregistrare necompletată sau un tabel necompletat a trecut la Error rezultate, fără erori.

Sintaxă

Error( EroareÎnregistrare )
Error( ErrorTable )

  • ErrorRecord – Obligatoriu. Error înregistrare de informații, inclusiv Fel, Mesaj și alte câmpuri. Este necesar . FirstError poate fi transmis direct.
  • ErrorTable – Obligatoriu. Tabelul înregistrărilor informațiilor despre erori. Toate erorile pot fi transmise direct.

IfError( 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

Simplu IfError

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, Notificare( "A apărut 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 IfError returnată este valoarea returnată de Notificare, coercată la același tip ca primul argument la IfError (un număr). 1

Simplu IsError

Formula Descriere Rezultat
IsError( 1 ) Argumentul nu este o eroare. fals
IsError( Necompletat() ) Argumentul este necompletat, dar nu o eroare. fals
IsError( 1/0 ) Argumentul este o eroare. adevărat
If( IsError( 1/0 ), Notificare( "A existat o problemă internă" ) Argumentul de a IsError returna 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( Necompletat() ) Argumentul este o valoare blank. adevărat
IsBlankOrError( 1/0 ) Argumentul este o eroare. adevărat

Simplu Error

Î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 este într-o stare de eroare deoarece Valoare funcția 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. Utilizat cu funcția Error , erorile așteptate pot fi eliminate și restul erorilor reținute ș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ă încadrarea funcției Value cu IfError, eticheta nu ar afișa nicio valoare ca valoare de eroare este tratată ca necompletată.

Consultați și

Formula de referință pentru Power Apps