Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
| Functions | A következőkre vonatkozik: |
|---|---|
| Error IfError IsError |
|
| IsBlankOrError |
|
É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
A IfError függvény addig teszteli az értékeket, amíg hibát nem 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. A szerkezet hasonlít IfError a Ha függvényre: IfError a hibák tesztelésére, míg a Haigazra.
A hiba egy érvényes értékre való lecserélésére használható IfError , hogy az alsóbb rétegbeli számítások folytatódjanak. 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.
IfError Műveletet hajthat végre, és csak akkor folytathatja a feldolgozást, ha a művelet sikeres volt. IfError Alkalmazás erre a példára:
IfError(
Patch( DS1, ... ), Notify( "problem in the first action" ),
Patch( DS2, ... ), Notify( "problem in the second action" )
)
Ha a DS1 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 második DS2 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éldára építve a visszatérési érték IfError ellenőrizhető annak megállapításához, hogy voltak-e problémák:
IfError(
Patch( DS1, ... ), Notify( "problem in the first action" ); false,
Patch( DS2, ... ), Notify( "problem in the second action" ); false,
true
)
Típus-kompatibilitás
IfError az egyik argumentum értékét adja vissza. Az esetlegesen visszaadott IfError értékek típusainak kompatibilisnek kell lenniük.
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. Ami rendben van, mivel nincs olyan helyzet, amelyben a javításhívások visszatérési értékét a rendszer visszaadná IfError.
Feljegyzés
Bár a változás folyamatban lévő viselkedése, az összes argumentum típusának kompatibilisnek IfError 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.
Fontolja meg IfError inkább a következőket:
IfError( 1/x, "#DIV/0!" )
A fenti képlet nem fog működni. A szöveges sztring "#DIV/0!" az első argumentum IfErrortípusára van kényszerítve, amely egy szám. Az eredmény IfError egy újabb hiba, mivel a szöveges sztring nem kényszeríthető. Javításként konvertálja az első argumentumot szöveges sztringgé, hogy IfError mindig szöveges sztringet adjon vissza:
IfError( Text( 1/x ), "#DIV/0!" )
A fentiekben látható módon hiba jelenhet meg, IfError ha a Csere vagy a DefaultResult hiba.
FirstError /AllError
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 ).
Error a rekordok közé tartoznak a következők:
| Mező | Típus | 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
A IsError függvény hibaértéket tesztel.
A visszatérési érték true vagy false logikai érték.
A használat IsError megakadályozza a hiba további feldolgozását.
IsBlankOrError
A IsBlankOrError függvény egy üres vagy egy hibaértéket tesztel, és ennek megfelelője Or( IsBlank( X ), IsError( X ) ).
A meglévő alkalmazások hibakezelésének engedélyezésekor fontolja meg az IsBlankIsBlankOrError lecserélését a meglévő alkalmazás viselkedésének megőrzése érdekében. 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. Error a kezelés elválasztja az üres két értelmezést, amelyek megváltoztathatják az IsBlankot továbbra is használó meglévő alkalmazások viselkedését.
A visszatérési érték egy logikai igaz vagy hamis érték.
A használat IsBlankOrError megakadályozza a hiba további feldolgozását.
Egyéni hiba létrehozása és jelentése a Error függvény használatával. 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 a saját, Kind és Message elemekkel kiegészített hibáját a függvény fent IfError ismertetett rekordjával.
A következő kontextusban IfErrorhasználja a Error függvényt egy hiba ismételt megismétlésére vagy átengedésére. Előfordulhat például, hogy a logika IfError úgy dönt, hogy bizonyos esetekben egy hiba biztonságosan figyelmen kívül hagyható, más esetekben azonban fontos a hiba elküldése. Az IfErrorApp.OnError vagy az App.OnError használatával Error(FirstError) átadhatja a hibát.
A Error függvény egy hibatáblát is átadhat, ahogyan az Az AllErrors táblában található. A (AllErrors) használatávalError minden hibát kijavíthat, és nem csak az elsőt.
Az üres rekord vagy üres tábla nem Error eredményez hibát.
Szintaxis
Error( ErrorRecord )
Error( ErrorTable )
- ErrorRecord – Kötelező. Error adatrekord, beleértve a Kind, az Message és más mezőket. 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 | Description | 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( "Volt egy belső probléma" ) ) | 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. A visszatérési érték a Notify visszatérési IfError értéke, amely az első argumentummal (számmal) megegyező típusra IfError van kényszerítve. | 1 |
Egyszerű IsError
| Képlet | Description | Eredmény |
|---|---|---|
| IsError( 1 ) | Az argumentum nem hiba. | téves |
| IsError( Üres() ) | Az argumentum üres, de nem hiba. | téves |
| IsError( 1/0 ) | Az argumentum hiba. | igaz |
| If( IsError( 1/0 ), Notify( "Volt egy belső probléma" ) ) | A hibaértéket visszaadó IsError argumentum (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ű IsBlankOrError
| Képlet | Description | Eredmény |
|---|---|---|
| IsBlankOrError( 1 ) | Az argumentum nem hiba vagy üres. | téves |
| IsBlankOrError( Üres() ) | 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. A függvényhez használva a Error várt hibák eltávolíthatók, és a fennmaradó hibák megmaradnak és jelenthető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. Az Érték függvény körbefuttatása IfErrornélkül a címke nem jelenít meg értéket, mivel a hibaérték üresként lesz kezelve.