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

A következőkre vonatkozik: Vászonalapú alkalmazások képletoszlopai Dataverse Asztali folyamatok Modellvezérelt alkalmazások 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

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 )

A képlet a 0 értéket adja vissza, ha az x értéke nulla, és az 1/x hibát eredményezne. 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 DS1Patch 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 az egyik argumentumának az értékét adja vissza. 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 Csere képletekhez vagy az AlapértelmezettEredményhez 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 program a második argumentumot úgy módosítja, hogy megfeleljen az első argumentum típusának.

Nullával való osztáskor az Excel a #DIV/0! szöveget jeleníti meg.

Az IfError hasznos lehet a következő esetben:

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

A fenti képlet nem fog működni. A "#DIV/0!" szöveges sztringet a rendszer az IfError első argumentumának a típusára módosítja, ami szám. Az IfError eredménye még egy hiba lesz, mivel a szöveges text sztring nem módosítható. 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ókkal kapcsolatos rekordok táblája, a FirstError pedig 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
Altípus 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 ez például a ControlName.PropertyName űrlapon lesz.
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 ez például a ControlName.PropertyName űrlapon lesz.
Részletek Rögzítés Részletek a hibáról. Jelenleg a rendszer csak a hálózati hibákra vonatkozó adatokat biztosítja. Ez a rekord tartalmazza a HttpStatusCode elemet, amely a HTTP állapotkódját tartalmazza és a HttpResponse elemet, amely az összekötő vagy szolgáltatás válaszának 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.

A FirstError általában csak egyetlen hibával tud dolgozni. 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 bevezetése előtt az üres érték volt használatos az adatbázisokból származó null értékek és a hibaértékek megjeleníté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 IsBlankOrErRror 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

Error( ErrorRecord )
Error( ErrorTable )

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

IfError( Érték1, Csere1 [, Érték2, Csere2, ... [, AlapértelmezettEredmény ] ] )

  • Érték(ek) – Kötelező. A képlet(ek), amelyben hibaértéket kell ellenőrizni.
  • Csere/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 )
IsBlankOrErRError ( Value )

  • É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ő hiba történt" ) ) 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. false
IsError( üres() ) Az argumentum üres, de nem hiba. false
IsError( 1/0 ) Az argumentum hiba. true
If( IsError( 1/0 ), Notify( "Belső hiba történt" ) ) 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). true

Egyszerű IsBlankOrErRError

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

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 bizonyos hibák átadhatók, míg mások visszavonhatók, és egy értékkel helyettesíthetők. Az első esetben a b hibaállapotban lesz, mert az Érték függvény érvénytelen argumentumot tartalmaz. Mivel ez váratlan a képlet írójának, a rendszer továbbítja azt, hogy a felhasználó is láthassa. A második esetben, ugyanannál a képletnél, a b értéke 0 lesz, ami nullával való osztás hibát 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. Ha például tudjuk, hogy a nullával való osztás nem fog problémát okozni egy adott környezetben, kiszűrhetjük azokat a hibákat, érintetlenül hagyva a többi hibát, mindezt 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 Label1Szö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 címkében az 1234 érték jelenik 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 címkében a -1 érték jelenik 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épletekre vonatkozó referencia a Power Apps alkalmazáshoz