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

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á:

Ovládací prvok tlačidla je aktivovaný a zobrazuje upozornenie prostredníctvom funkcie Upozorniť.

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.

IfErrorValue1, 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.

IsErrorValue )
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

  1. Pridajte ovládací prvok Vstup textu a nazvite ho TextInput1, ak sa už tak predvolene nenazýva.

  2. Pridajte ovládací prvok Označenie a nazvite ho Label1, ak sa už tak predvolene nenazýva.

  3. Nastavte vzorec pre vlastnosť Text prvku Label1 na:

    IfError( Value( TextInput1.Text ), -1 )
    
  4. V TextInput1 zadajte 1234.

    Label1 zobrazí hodnotu 1234, pretože je to platný vstup pre funkciu Value.

  5. 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.

Pozrite si tiež

Referenčné informácie pre Power Apps