Funkcie Error, IfError, IsError, IsBlankOrError
Vzťahuje sa na: Stĺpce Dataverse vzorcov aplikácií plátna Postupy v počítačovom prostredí Modelom riadené aplikácie Power Platform CLI
Zistí chyby a poskytne alternatívnu hodnotu alebo vykoná akciu. Vytvorte vlastnú chybu alebo prejdite cez chybu.
Poznámka
- Správanie, ktoré tento článok popisuje, je dostupné iba v prípade, že funkcia verzie Preview Správa chýb na úrovni vzorcov v ponuke Nastavenia > Pripravované funkcie > verzia Preview je zapnutá.
IfError
Funkcia IfError testuje hodnoty, až kým nenájde chybu. Ak funkcia zistí chybu, funkcia vyhodnotí a vráti zodpovedajúcu hodnotu výmeny a zastaví ďalšie vyhodnocovanie. Predvolenú hodnotu je možné zadať aj vtedy, keď sa nenájdu žiadne chyby. Štruktúra IfError pripomína funkciu If: IfError testuje výskyt chyby, zatiaľ čo If testuje, či je výraz pravdivý.
Použitie IfError na náhradu chyby platnou hodnotou, aby sa mohlo pokračovať vo výpočtoch. Túto funkciu použite napríklad v prípade, že by mohol mať používateľský vstup za následok delenie nulou:
IfError( 1/x, 0 )
Tento vzorec sa vracia 0
, ak je hodnota x
nula, pretože 1/x
spôsobí chybu. Ak x
nie je nula, vráti 1/x
.
Zastavenie ďalšieho spracovania
Pri reťazení vzorcov vo vzorcoch správania, ako napríklad:
Patch( DS1, ... );
Patch( DS2, ... )
Druhá funkcia Patch na DS2
sa pokúsi, aj keď Patch na DS1
zlyhá. Rozsah chyby je obmedzený na každý vzorec, ktorý je reťazený.
Použite IfError na vykonanie akcie a pokračovať v spracovaní len vtedy, ak bola akcia úspešná. Použitie funkcie IfError na tento príklad:
IfError(
Patch( DS1, ... ), Notify( "problem in the first action" ),
Patch( DS2, ... ), Notify( "problem in the second action" )
)
Ak má funkcia Patch z DS1
problém, vykoná sa prvé Oznámenie. Nenastane žiadne ďalšie spracovanie vrátane druhej funkcie Patch pre DS2
. Ak je prvá funkcia Patch úspešná, druhá funkcia Patch sa vykoná.
Ak je zadaný, voliteľný argument DefaultResult argument sa vráti, ak sa nezistia žiadne chyby. Bez tohto argumentu sa vráti posledný argument Value.
V nadväznosti na posledný príklad, návratovú hodnotu z IfError možnosť skontrolovať a určiť, či sa vyskytli nejaké problémy:
IfError(
Patch( DS1, ... ), Notify( "problem in the first action" ); false,
Patch( DS2, ... ), Notify( "problem in the second action" ); false,
true
)
Kompatibilita typov
IfError vráti hodnotu jedného z jeho argumentov. Typy všetkých hodnôt, ktoré môže vrátiť IfError, musia byť kompatibilné.
V poslednom príklade vráti Patch záznam, ktorý nie je kompatibilný s logickými hodnotami použitými pre vzorce Výmena alebo DefaultResult. Čo je v poriadku, pretože neexistuje žiadna situácia, v ktorej by sa návratová hodnota z týchto volaní Patch mala vracať funkciou IfError.
Poznámka
Zatiaľ čo proces sa mení, typy všetkých argumentov pre funkciu IfError musia byť v súčasnosti kompatibilné.
V jednoduchom príklade opísanom vyššie:
IfError( 1/x, 0 )
Druhy1/x
a0
boli kompatibilné, pretože obidve boli čísla. Ak nie, druhý argument bude vynútený tak, aby zodpovedal typu prvého argumentu.
Excel zobrazí #DIV/0!, keď dôjde k deleniu nulou.
Namiesto toho zvážte IfError s nasledujúcim:
IfError( 1/x, "#DIV/0!" )
Vyššie uvedený vzorec nebude fungovať. Textový reťazec "#DIV/0!"
bude prevedený na typ prvého argumentu pre IfError, čo je číslo. Výsledok IfError bude ďalšou chybou, pretože textový reťazec sa nedá vynútiť. Ako opravu skonvertujte prvý argument na textový reťazec, aby funkcia IfError vždy vrátila textový reťazec:
IfError( Text( 1/x ), "#DIV/0!" )
Ako je uvedené vyššie, IfError môže vrátiť chybu, ak pri použití funkcie Replacement alebo DefaultResult dôjde k chybe.
FirstError/AllErrors
V rámci náhradných vzorcov sú informácie o chybách dostupné prostredníctvom záznamu FirstError a tabuľky AllErrors. AllErrors je tabuľka záznamov s informáciami o chybách, pričom FirstError je skratkou k prvému záznamu tejto tabuľky. FirstError vždy vráti rovnakú hodnotu ako First( AllErrors ).
Záznamy o chybe zahŕňajú:
Pole | Type | Description |
---|---|---|
Druh | Enumerácia ErrorKind (číslo) | Kategória chyby. |
Hlásenie | Textový reťazec | Správa o chybe, vhodná na zobrazenie koncovému užívateľovi. |
Zdroj | Textový reťazec | Miesto, kde chyba vznikla, používané na vykazovanie. Napríklad vzorec viazaný na vlastnosť ovládacieho prvku bude mať tvar ControlName.PropertyName. |
Pozorované | Textový reťazec | Miesto, kde sa chyba zobrazí používateľovi, používa sa na vykazovanie. Napríklad vzorec viazaný na vlastnosť ovládacieho prvku bude mať tvar ControlName.PropertyName. |
Podrobné informácie | Record | Podrobnosti o chybe. V súčasnosti sú podrobnosti poskytované iba pre chyby siete. Tento záznam obsahuje HttpStatusCode, ktorý obsahuje stavový kód HTTP a HttpResponse, ktorý obsahuje telo odpovede z konektora alebo služby. |
Napríklad zvážte nasledujúci formulár ako vlastnosť OnSelect ovládacieho prvku Tlačidlo:
Set( a, 1/0 )
A tento vzorec na vlastnosti OnSelect druhého ovládacieho prvku Tlačidlo:
IfError( a, Notify( "Internal error: originated on " & FirstError.Source & ", surfaced on " & FirstError.Observed ) )
Vyššie uvedený ukážkový vzorec by zobrazil nasledujúci banner, ak sú postupne aktivované dve tlačidlá:
Zvyčajne sa vyskytne iba jedna chyba, s ktorou dokáže FirstError dostatočne pracovať. Existujú však scenáre, v ktorých sa môže vrátiť viacero chýb. Napríklad pri použití operátora reťazenia vzorcov alebo súbežnej funkcie. Aj v týchto situáciách môže nahlásenie FirstError stačiť na odhalenie problému namiesto preťaženia používateľa viacerými chybami. Ak stále máte požiadavku pracovať s každou chybou samostatne, môžete použiť tabuľku AllErrors.
IsError
Funkcia IsError testuje na hodnotu chyby.
Vrátená hodnota je logická hodnota pravda alebo nepravda.
Použitie funkcie IsError zabráni ďalšiemu spracovaniu chyby.
IsBlankOrError
Funkcia IsBlankOrError otestuje prázdnu hodnotu alebo chybovú hodnotu a je ekvivalentom funkcie Or( IsBlank( X ), IsError( X ) )
.
Pri povolení spracovania chýb pre existujúce aplikácie zvážte výmenu IsBlank za IsBlankOrError na zachovanie existujúceho správania aplikácie. Pred pridaním spracovania chýb sa používala prázdna hodnota bola použitá na vyjadrenie nulových hodnôt z databáz aj chybových hodnôt. Spracovanie chýb oddeľuje tieto dva interpretácie prázdnej hodnoty, čo by mohlo zmeniť správanie existujúcich aplikácií, ktoré aj naďalej používajú IsBlank.
Vrátená hodnota je booleovská pravda alebo nepravda.
Použitie IsBlankOrError zabráni ďalšiemu spracovaniu chyby.
Na vytvorenie a nahlásenie vlastnej chyby použite funkciu Error. Môžete mať napríklad logiku na určenie, či je daná hodnota platná pre váš kontext alebo nie – niečo, čo sa automaticky nekontroluje v prípade problému. Môžete vytvoriť a vrátiť svoju vlastnú chybu spolu s poľami Kind a Message pomocou rovnakého záznamu, ktorý je opísaný vyššie pre funkciu IfError.
V kontexte IfError použite funkciu Error na opätovné vyvolanie alebo prechod cez chybu. Napríklad vaša logika v IfError môže rozhodnúť, že v niektorých prípadoch možno chybu bezpečne ignorovať, no v iných prípadoch je dôležité chybu odoslať. V rámci IfError alebo App.OnError použite Error( FirstError ) na prechod cez chybu.
Funkciou Error je možné odovzdať aj tabuľku chýb, rovnako ako v tabuľke AllErrors. Použite Error( AllErrors ) na opätovné vyvolanie všetkých chýb, nielen prvej.
Ak je do funkcie Error odovzdaný prázdny záznam alebo prázdna tabuľka, výsledkom bude žiadna chyba.
Syntax
Error( ErrorRecord )
Error( ErrorTable )
- ErrorRecord – povinné. Záznam s informáciami o chybe vrátane polí Kind, Message a ďalších polí. Kind je povinné pole. FirstError je možné odovzdať priamo.
- ErrorTable – povinné. Tabuľka záznamov s informáciami o chybách. AllErrors je možné odovzdať priamo.
IfError( Value1, Replacement1 [, Value2, Replacement2, ... [, DefaultResult ] ] )
- Value1, Value2 – povinné. Vzorec alebo vzorce, v ktorých sa má otestovať, či neobsahujú chybu.
- Replacement1, Replacement1 – povinné. Vzorce na vyhodnotenie a hodnoty na vrátenie, ak zodpovedajúce argumenty Value vrátili chybu.
- DefaultResult – voliteľné. Vzorce na vyhodnotenie, či vzorec nenájde žiadne chyby.
IsError( Value )
IsBlankOrError( Hodnota )
- Hodnota – povinné. Vzorec na testovanie.
Príklady
Jednoduchý IfError
Vzorec | Popis | Výsledok |
---|---|---|
IfError( 1, 2 ) | Prvý argument nie je chyba. Funkcia nemá žiadne ďalšie chyby na kontrolu a žiadnu predvolenú návratovú hodnotu. Funkcia vráti posledný vyhodnotený argument Value. | 1 |
IfError( 1/0, 2 ) | Prvý argument vráti chybovú hodnotu (z dôvodu delenia nulou). Funkcia vyhodnotí druhý argument a vráti ho ako výsledok. | 2 |
IfError( 10, 20, 30 ) | Prvý argument nie je chyba. Funkcia nemá žiadne ďalšie chyby na kontrolu, má však predvolenú návratovú hodnotu. Funkcia vráti argument DefaultResult. | 30 |
IfError( 10, 11, 20, 21, 300 ) | Prvý argument 10 nie je chybou, takže funkcia nehodnotí zodpovedajúcu náhradu tohto argumentu 11. Tretí argument 20 nie je tiež chybou, takže funkcia nehodnotí zodpovedajúcu náhradu tohto argumentu 21. Piaty argument 300 nemá žiadnu zodpovedajúcu náhradu a je predvoleným výsledkom. Funkcia vráti tento výsledok, pretože vzorec neobsahuje žiadne chyby. | 300 |
IfError( 1/0, Notify( "Vyskytol sa interný problém" ) ) | Prvý argument vráti chybovú hodnotu (z dôvodu delenia nulou). Funkcia vyhodnotí druhý argument a zobrazí používateľovi hlásenie. Vrátená hodnota funkcie IfError je vrátenou hodnotou funkcie Notify, ktorá sa prevedie na rovnaký typ ako prvý argument funkcie IfError (číslo). | 1 |
Jednoduchý IsError
Vzorec | Popis | Výsledok |
---|---|---|
IsError( 1 ) | Argument nie je chyba. | false |
IsError( Blank() ) | Argument je prázdny, ale nejde o chybu. | false |
IsError( 1/0 ) | Argument je chyba. | true |
If( IsError( 1/0 ), Notify( "Vyskytol sa interný problém" ) ) | Argument IsError vráti chybovú hodnotu (z dôvodu delenia nulou). Táto funkcia sa vráti pravda, čo spôsobí, že Ak zobrazí správu používateľovi s funkciou Notify. Vrátená hodnota funkcie If je vrátenou hodnotou funkcie Notify, ktorá sa prevedie na rovnaký typ ako prvý argument funkcie If (logická hodnota). | true |
Jednoduché IsBlankOrError
Vzorec | Popis | Výsledok |
---|---|---|
IsBlankOrError( 1 ) | Argument nie je chyba ani prázdny. | false |
IsBlankOrError( Blank() ) | Argument je prázdny. | true |
IsBlankOrError( 1/0 ) | Argument je chyba. | true |
Jednoduchá chyba
V tomto príklade sú dátumy overené vo vzťahu k sebe navzájom, čo vedie k chybe, ak sa vyskytne problém.
If( StartDate > EndDate,
Error( { Kind: ErrorKind.Validation, Message: "Start Date must be before End Date" } ) )
V tomto príklade môžu niektoré chyby prejsť, zatiaľ čo iné sú potlačené a nahradené hodnotou. V prvom prípade bude b v chybovom stave, pretože funkcia Value má neplatný argument. Pretože to zapisovateľ vzorcov neočakáva, prejde to, aby to používateľ videl. V druhom prípade (s rovnakým vzorcom) bude mať b hodnotu 0, výsledkom čoho bude delenie nulou. V tomto prípade môže zapisovateľ vzorcov vedieť, že je to prijateľné pre túto logiku, potlačí chybu (nezobrazí sa žiadny banner) a namiesto toho vráti -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
Tabuľku AllErrors možno filtrovať ako akúkoľvek inú tabuľku. Pri použití s funkciou Error je možné očakávané chyby odstrániť a zostávajúce chyby zachovať a nahlásiť. Ak by sme napríklad vedeli, že delenie nulou nebude v konkrétnom kontexte problémom, tieto chyby by sa dali odfiltrovať a všetky ostatné chyby zostali nedotknuté podľa nasledujúceho vzorca:
Error( Filter( AllErrors, Kind <> ErrorKind.Div0 ) )
Podrobne
Pridajte ovládací prvok Vstup textu a nazvite ho TextInput1, ak sa už tak predvolene nenazýva.
Pridajte ovládací prvok Označenie a nazvite ho Label1, ak sa už tak predvolene nenazýva.
Nastavte vzorec pre vlastnosť Text prvku Label1 na:
IfError( Value( TextInput1.Text ), -1 )
V TextInput1 zadajte 1234.
Label1 zobrazí hodnotu 1234, pretože je to platný vstup pre funkciu Value.
V TextInput1 zadajte ToInfinity.
Label1 zobrazí hodnotu –1, pretože to nie je platný vstup pre funkciu Value. Ak by ste nezabalili funkciu Value do funkcie IfError, označenie by nezobrazilo žiadnu hodnotu, pretože chybná hodnota sa považuje za prázdnu.