Megosztás a következőn keresztül:


Hiba, IfError, IsError, IsBlankOrError függvények

A következőkre vonatkozik: Vászonalapú alkalmazások Dataverse képletoszlopai Asztali folyamatok Modellvezérelt alkalmazások Power Pages Power Platform CLI

Érzékeli a hibákat, és más értéket kínál fel, vagy műveletet hajt végre. Egyéni hibát hoz létre vagy átad egy hibát.

Feljegyzés

Ha egy alkalmazás letiltotta a képletszintű hibakezelési funkciót a Gépház frissítései kivezetve>>, akkor ezek afunkciók nem fognak megfelelően működni.

IfError

Az IfError függvény addig teszteli az értékeket, amíg hibát talál. Ha a függvény hibát talál, kiértékeli, és visszaadja a megfelelő helyettesítő értéket, és leáll a további kiértékelés. Alapértelmezett érték is megadható arra az esetre, ha nem találhatók hibák. Az IfError szerkezete hasonlít az If függvényére, de az IfError hibákat keres, az If pedig a true értéket.

Az IfError használatával érvényes értékkel helyettesíthet egy hibát, hogy a számítások folytatódni tudjanak. Ezt a függvényt például akkor érdemes használni, ha a felhasználó által megadott adatok nullával való osztást eredményeznének:

IfError( 1/x, 0 )

Ez a képlet akkor ad vissza értéket 0 , ha értéke nulla x , és 1/x hibát eredményez. Ha az x nem nulla, akkor az eredmény 1/x.

A további feldolgozás leállítása

Ha összeláncol képleteket műveleti képletekben, például:

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

A második Patch függvény DS2 értékét akkor is megkísérli megadni a rendszer, ha a Patch függvénynél nem sikerül DS1 értéket használni. A hiba hatóköre az összeláncolt képletekre korlátozódik.

Az IfError függvénnyel végrehajtható egy művelet, és a feldolgozás csak akkor folytatódik tovább, ha a művelet sikeres volt. Az IfError használata ebben a példában:

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

Ha a DS1 Patch függvénye problémába ütközik, a rendszer az első Notify utasítást hajtja végre. További feldolgozás nem történik; ez a DS2 második Patch függvényét is érinti. Ha az első Patch sikeres, a második Patch végrehajtására is sor kerül.

Ha meg van adva az opcionális AlapértelmezettEredmény argumentum, a rendszer azt adja vissza, ha nem talál hibát. Az argumentum nélkül az utolsó Érték argumentum lesz visszaadva.

Az utolsó példa alapján az IfError visszaadott értékének ellenőrzésével megállapítható, hogy van-e valamilyen probléma:

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

Típus-kompatibilitás

Az IfError függvény az egyik argumentumának értékét adja eredményül. Az IfError által esetlegesen visszaadott összes érték típusának kompatibilisnek kell lennie.

Az utolsó példában a Patch egy olyan rekordot ad vissza, amely nem kompatibilis a csereképletekhez vagy a DefaultResult képlethez használt logikai értékekkel. Ez így rendben van, mivel nincs olyan helyzet, amelyben ezeknek a Patch-hívásoknak a visszaadási értékeit az IfError adná vissza.

Feljegyzés

Bár a feldolgozási viselkedés változik, az IfError összes argumentumtípusának jelenleg kompatibilisnek kell lennie.

A korábban ismertetett egyszerű példában:

IfError( 1/x, 0 )

Az 1/x és 0 típusok és kompatibilisek voltak, mivel számok. Ha nem, akkor a második argumentum kénytelen megegyezni az első argumentum típusával.

Az Excel megjeleníti #DIV/0! ha nullával oszlik meg.

Az IfError hasznos lehet a következő esetben:

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

A fenti képlet nem fog működni. A szöveges karakterlánc "#DIV/0!" az IfError első argumentumánaktípusára van kényszerítve, amely egy szám. Az IfError eredménye egy újabb hiba, mivel a szöveges karakterláncot nem lehet kényszeríteni. Javításként alakítsa át az első argumentumot szöveges sztringgé, hogy az IfError mindig szöveges sztringet adjon vissza:

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

Ahogy fent látható, az IfError hibát adhat vissza, ha a Csere vagy az AlapértelmezettEredmény hiba.

FirstError / AllErrors

A csere képletekben a FirstError rekord és az AllErrors tábla nyújt tájékoztatást a talált hibákról. Az AllErrors hibainformációs rekordok táblázata, amelyben a FirstError a tábla első rekordjára mutató parancsikon. A FirstError mindig ugyanazt az értéket adja vissza, mint a First( AllErrors ).

A hibarekordok a következők:

Mező Type Description
Fajta ErrorKind felsorolás (szám) A hiba kategóriája.
Üzenet Szöveges sztring A hibára vonatkozó üzenet, amely megjeleníthető a végfelhasználónak.
Forrás Szöveges sztring A hiba származási helye, jelentéskészítéskor használatos. Egy vezérlőelem-tulajdonsághoz kötött képlet esetében például ez az érték Vezérlőelemnév.Tulajdonságnév formátumú.
Megfigyelt Szöveges sztring Az a hely, ahol a hiba jelentkezett a felhasználónak, jelentéskészítéshez használt. Egy vezérlőelem-tulajdonsághoz kötött képlet esetében például ez az érték Vezérlőelemnév.Tulajdonságnév formátumú.
Részletek Rögzítés Részletek a hibáról. Jelenleg a részletek csak a hálózati hibákra vonatkoznak. Ez a rekord tartalmazza a HttpStatusCode kódot, amely tartalmazza a HTTP-állapotkódot, valamint a HttpResponse-t , amely az összekötő vagy szolgáltatás válasz törzsét tartalmazza.

A következő képlet például használható egy Gomb vezérlőelem OnSelect tulajdonságaként:

Set( a, 1/0 )

Adja hozzá ezt a képletet az OnSelect tulajdonsághoz a második Gomb vezérlőnél:

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

A fenti példaképlet a következő szalagcímet jeleníti meg, amikor a két gomb aktiválása egymás után történik:

A gomb vezérlőelem aktiválva, a Notify függvény értesítést jelenít meg.

Általában csak egy hiba lesz, amellyel a FirstError megfelelően működik. Vannak azonban olyan helyzetek, amikor több hiba is visszaadható. Például képletösszefűző operátor vagy a Concurrent függvény használatakor. Még ezekben a helyzetekben is elegendő lehet a FirstError jelentéskészítése a probléma feltárásához, így nem kell túlterhelni a felhasználót számos hibával. Ha továbbra is külön-külön kell dolgoznia az egyes hibákkal, használhatja az AllErrors táblát.

IsError

Az IsError függvény hibaértékre tesztel.

A visszatérési érték true vagy false logikai érték.

Az IsError használata megakadályozza a hiba további feldolgozását.

IsBlankOrError

Az IsBlankOrError függvény vagy üres értéket, vagy hibaértéket vizsgál, és a következővel egyenlő: Or( IsBlank( X ), IsError( X ) ).

Ha meglévő alkalmazások hibakezelését engedélyezi, fontolja meg az IsBlank helyett az IsBlankOrErRror használatát, hogy megőrizze az alkalmazás meglévő viselkedését. A hibakezelés hozzáadása előtt egy üres értéket használtak az adatbázisokból származó null értékek és a hibaértékek jelölésére. A hibakezelés szétválasztja az üres érték e két értelmezését, ami megváltoztathatja az IsBlank függvényt továbbra is használó alkalmazások meglévő viselkedését.

A visszatérési érték egy logikai igaz vagy hamis érték.

Az IsBlankOrError használata megakadályozza a hiba további feldolgozását.

Egyéni hibák létrehozásához és bejelentéséhez használja az Error függvényt. Előfordulhat például, hogy van olyan logikája, amely meghatározza, hogy egy adott érték érvényes-e a környezete számára vagy sem – olyan dolog, amelyet nem ellenőriz a rendszer automatikusan problémát keresve. Létrehozhatja és visszaadhatja saját hibáját is a Kind és a Message funkciókkal kiegészítve, ugyanazt a rekordot használva az IfError függvényhez, mint amelyet fentebb is ismertettünk.

Az IfError környezetében az Error funkcióval ismételten kiválthatja vagy átadhatja a hibát. Előfordulhat például, hogy az IfError logikája úgy dönt, hogy bizonyos esetekben a hibát nyugodtan figyelmen kívül hagyhatja, de más esetekben fontos lehet átadni a hibát. Az IfError és az App.OnError között az Error( FirstError ) segítségével továbbíthatja a hibát.

Az Error függvénynek hibatábla is átadható, ahogyan az AllErrors táblában található. Használja az Error( AllErrors ) függvényt, hogy az összes hibát ismételten kiváltsa, ne csak az elsőt.

Ha üres rekordot vagy üres táblát ad át az Error függvénynek, akkor az nem eredményez hibát.

Szintaxis

Hiba( ErrorRecord )
Hiba( ErrorTable )

  • ErrorRecord – Kötelező. Hibával kapcsolatos információk (például az Altípus, az Üzenet és más mezők). Kind szükséges. A FirstError közvetlenül átadható.
  • ErrorTable – Kötelező. Hibainformációkat tartalmazó rekordok táblája. Az AllErrors közvetlenül átadható.

IfError( Érték1; Csere1 [, Érték2; Csere2; ... [DefaultResult ] ] )

  • Értékek – Kötelező. A képlet(ek), amelyben hibaértéket kell ellenőrizni.
  • Cserék – Kötelező. A kiértékelendő képletek és visszaadandó értékek abban az esetben, ha az Érték argumentumok egyeztetése hibát ad vissza.
  • DefaultResult – Nem kötelező. A kiértékelendő képletek, ha a képlet nem talál hibát.

IsError( érték )
IsBlankOrError( érték )

  • Érték – Kötelező. A tesztelendő képlet.

Példák

Egyszerű IfError

Képlet Ismertetés Eredmény
IfError( 1, 2 ) Az első argumentum nem hiba. A függvénynek nincs más ellenőrizendő hibája, és nincs alapértelmezett visszatérési érték. A függvény az utolsó kiértékelt érték argumentumot adja vissza. 1
IfError( 1/0, 2 ) Az első argumentum hibát ad vissza (a nullával való osztás miatt). A függvény kiértékeli a második argumentumot, és azt adja vissza eredményként. 2
IfError( 10, 20, 30 ) Az első argumentum nem hiba. A függvénynek nincs más ellenőrizendő hibája, de rendelkezik alapértelmezett visszatérési értékkel. A függvény az AlapértelmezettEredmény argumentumot adja vissza. 30
IfError( 10, 11, 20, 21, 300 ) Az első argumentum, 10, nem hiba, így a függvény nem értékeli ki, hogy az argumentum megfelelő csereértéke 11. A harmadik argumentum, 20, sem hiba, így a függvény nem értékeli ki, hogy az argumentum megfelelő csereértéke 21. Az ötödik argumentumnak (300) nincs megfelelő csereértéke; ez az alapértelmezett eredmény. A függvény ezt az eredményt adja vissza, mivel a képlet nem tartalmaz hibákat. 300
IfError( 1/0, Notify( "Belső probléma merült fel" ) ) Az első argumentum hibát ad vissza (a nullával való osztás miatt). A függvény kiértékeli a második argumentumot, és üzenetet jelenít meg a felhasználónak. Az IfError visszatérési értéke a Notify visszatéréséi értéke lesz, arra a típusra konvertálva, amilyen az IfError első argumentumáé (szám). 1

Egyszerű IsError

Képlet Ismertetés Eredmény
IsError( 1 ) Az argumentum nem hiba. téves
IsError( Blank() ) ) Az argumentum üres, de nem hiba. téves
IsError( 1/0 ) Az argumentum hiba. igaz
If( IsError( 1/0 ), Notify( "Belső probléma merült fel" ) ) Az IsError argumentuma hibaértéket ad vissza (a nullával való osztás miatt). Ez a függvény igaz értéket ad vissza, ami azt eredményezi, hogy az If függvény a Notify függvénnyel üzenetet jelenít meg a felhasználónak. Az If visszatérési értéke a Notify visszatéréséi értéke lesz, arra a típusra konvertálva, amilyen az If első argumentumáé (logikai érték). igaz

Egyszerű IsBlankOrErRError

Képlet Ismertetés Eredmény
IsBlankOrError( 1 ) Az argumentum nem hiba vagy üres. téves
IsBlankOrError( Blank() ) Az argumentum üres. igaz
IsBlankOrError( 1/0 ) Az argumentum hiba. igaz

Egyszerű Error

Ebben a példában a dátumok ellenőrzése egymáshoz képest történik, ami hibát eredményez, ha probléma merül fel.

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

Ebben a példában egyes hibák áthaladhatnak, míg mások el vannak rejtve, és egy értékkel vannak helyettesítve. Az első esetben a b hibaállapotban van, mert a Value függvény argumentuma érvénytelen. Mivel ezt a képletíró váratlanul éri el, a képletíró átadja, hogy a felhasználó láthassa. A második esetben ugyanazzal a képlettel,b értéke 0, ami nullával való osztást eredményez. Ebben az esetben a képlet írója tudja, hogy ez elfogadható ebben a logikában, így visszavonja a hibát (nem jelenít meg címsávot), és -1-et ad vissza.

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

Az AllErrors tábla szűrhető, mint bármelyik másik tábla. Az Error funkcióval együtt használva a várható hibák eltávolíthatók, a fennmaradó hibák pedig visszatarthatók és bejelenthetők. Például, ha tudjuk, hogy a nullával való osztás nem jelent problémát egy adott kontextusban, akkor ezeket a hibákat ki lehet szűrni, az összes többi hibát érintetlenül hagyva a következő képlettel:

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

Lépésről lépésre

  1. Adjon hozzá egy Szövegbevitel vezérlőt, és adja neki a TextInput1 nevet, ha alapértelmezés szerint nem ez a neve.

  2. Adjon hozzá egy Címke vezérlőt, és adja neki a Label1 nevet, ha alapértelmezés szerint nem ez a neve.

  3. A Label1 Szöveg tulajdonságaként adja meg a következő képletet:

    IfError( Value( TextInput1.Text ), -1 )
    
  4. A TextInput1 mezőbe írja be az 1234 értéket.

    A Label1 az 1234 értéket jeleníti meg, mivel ez érvényes bemenet a Value függvényhez.

  5. A TextInput1 mezőbe írja be a Végtelenig értéket.

    A Label1 a value-1 értéket jeleníti meg, mivel ez nem érvényes bemenet a Value függvényhez. Ha a Value függvény nem volna az IfError függvénybe ágyazva, akkor a címkén nem jelenne meg érték, mivel a rendszer a hibás értéket üresként kezeli.

Kapcsolódó információk

Képlethivatkozás a következőhöz: Power Apps