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 aDefaultResult 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:
Á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
Adjon hozzá egy Szövegbevitel vezérlőt, és adja neki a TextInput1 nevet, ha alapértelmezés szerint nem ez a neve.
Adjon hozzá egy Címke vezérlőt, és adja neki a Label1 nevet, ha alapértelmezés szerint nem ez a neve.
A Label1Szöveg tulajdonságaként adja meg a következő képletet:
IfError( Value( TextInput1.Text ), -1 )
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.
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.