Zdieľať cez


Funkcie Error, IfError, IsError, IsBlankOrError

Vzťahuje sa na: aplikácie plátna Dataverse stĺpce vzorcov toky na počítači aplikácie riadené modelom Power Pages Power Platform CLI

Zistí chyby a poskytne alternatívnu hodnotu alebo vykoná akciu. Vytvorte vlastnú chybu alebo prejdite cez chybu.

Poznámka

Ak aplikácia zakázala funkciu Správa chýb na úrovni vzorca v časti Nastavenia>Aktualizácie> Po ukončení tieto funkcie nebudú fungovať správne.

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 vráti 0 ak hodnota x je nula, pretože 1/x vyvolá 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 zo svojich argumentov. Typy všetkých hodnôt, ktoré môže vrátiť IfError, musia byť kompatibilné.

V poslednom príklade Oprava vracia záznam, ktorý nie je kompatibilný s logickými údajmi používanými pre vzorce Nahradenie alebo Predvolený výsledok. Č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 sú, druhý argument sa vynúti, aby sa zhodoval s typom 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!" je vynútený na typ prvého argumentu IfError, čo je číslo. Výsledkom IfError je ďalšia chyba, pretože textový reťazec nie je možné 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
Milý Enumerácia ErrorKind (číslo) Kategória chyby.
Správa 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 pre vzorec viazaný na vlastnosť ovládacieho prvku je táto hodnota v tvare Názov ovládacieho prvku.Názov vlastnosti.
Pozorované Textový reťazec Miesto, kde sa chyba zobrazí používateľovi, používa sa na vykazovanie. Napríklad pre vzorec viazaný na vlastnosť ovládacieho prvku je táto hodnota v tvare Názov ovládacieho prvku.Názov vlastnosti.
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 odpoveď z konektor alebo servis.

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 FirstError dokáže 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 IsError zabráni akémukoľvek ď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 bola prázdna hodnota použitá na reprezentáciu 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 akémukoľvek ď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

Chyba( Záznam chyby )
Chyba( Tabuľka chýb )

  • ErrorRecord – povinné. Záznam s informáciami o chybe vrátane polí Kind, Message a ďalších polí. Vyžaduje sa druh . 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( Hodnota1, Náhrada1 [, Hodnota2 , Náhrada2, ... [, Predvolený výsledok ] ] )

  • Hodnoty – povinné. Vzorec alebo vzorce, v ktorých sa má otestovať, či neobsahujú chybu.
  • Náhrady – 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( Hodnota )
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. falošné
IsError( Blank() ) Argument je prázdny, ale nejde o chybu. falošné
IsError( 1/0) Argument je chyba. pravda
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). pravda

Jednoduché IsBlankOrError

Vzorec Popis Výsledok
IsBlankOrError( 1 ) Argument nie je chyba ani prázdny. falošné
IsBlankOrError( Blank() ) Argument je prázdny. pravda
IsBlankOrError( 1/0) Argument je chyba. pravda

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 je b v chybovom stave, pretože funkcia Hodnota má neplatný argument. Pretože je to neočakávané zapisovateľom vzorcov, prechádza to, aby to používateľ videl. V druhom prípade s rovnakým vzorcom má b hodnotu 0, výsledkom čoho je 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 zobrazuje hodnotu 1234 , pretože ide o platný vstup do funkcie Value.

  5. V TextInput1 zadajte ToInfinity.

    Label1 zobrazuje hodnotu -1 , pretože to nie je platný vstup do funkcie 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ž

Odkaz na vzorec pre Power Apps