Sdílet prostřednictvím


Funkce Error, IfError, IsError, IsBlankOrError

Platí pro: aplikace plátna sloupce vzorců Dataverse desktopové toky modelem řízené aplikace Power Platform CLI

Zjistí chyby a poskytne alternativní hodnotu nebo provede akci. Vytvořte vlastní chybu nebo předejte chybu.

Poznámka:

IfError

Funkce IfError testuje hodnoty, dokud nenajde chybu. Pokud funkce zjistí chybu, vyhodnotí a vrátí odpovídající náhradní hodnotu a zastaví další vyhodnocení. Výchozí hodnotu lze zadat také v případě, že nebyly nalezeny žádné chyby. Struktura funkce IfError připomíná funkci If: IfError testuje chyby, zatímco If testuje hodnotu true (pravda).

Použijte funkci IfError, chcete-li nahradit chybu platnou hodnotou, aby mohly další výpočty pokračovat. Tuto funkci použijte například v případě, že by zadání uživatele mohlo mít za následek dělení nulou:

IfError( 1/x, 0 )

Tento vzorec vrací 0, pokud je hodnota x nula, takže 1/x způsobí chybu. Pokud x není nula, je vráceno 1/x.

Zastavení dalšího zpracování

Při řetězení vzorců dohromady ve vzorcích chování, jako:

Patch( DS1, ... );
Patch( DS2, ... )

Druhá funkce Patch do DS2 se pokusí, i když selže funkce Patch do DS1. Rozsah chyby je omezen na každý vzorec, který je zřetězený.

Použijte funkci IfError k provedení akce a pokračování ve zpracování, pouze pokud byla akce úspěšná. Použití funkce IfError v tomto příkladu:

IfError(
    Patch( DS1, ... ), Notify( "problem in the first action" ),
    Patch( DS2, ... ), Notify( "problem in the second action" )
)

Pokud funkce Patch pro DS1 má problém, jako první se provede funkce Notify. Žádné další zpracování neproběhne, včetně druhého použití funkce Patch pro DS2. Pokud první funkce Patch uspěje, provede se druhá funkce Patch.

Při zadání je vrácen volitelný argument VýchozíVýsledek, pokud nejsou zjištěny žádné chyby. Bez tohoto argumentu je vrácen poslední argument Hodnota.

V návaznosti na poslední příklad, návratovou hodnotu funkce IfError lze zkontrolovat a určit, zda se vyskytly nějaké problémy:

IfError(
    Patch( DS1, ... ), Notify( "problem in the first action" );  false,
    Patch( DS2, ... ), Notify( "problem in the second action" ); false,
    true
)

Kompatibilita typů

IfError vrátí hodnotu jednoho z jeho argumentů. Typy všech hodnot, které mohou být vráceny funkcí IfError, musí být kompatibilní.

V posledním příkladu funkce Patch vrátí záznam, který není kompatibilní s logickými hodnotami používanými pro vzorce Nahrazení nebo VýchozíVýsledek. Což je v pořádku, protože neexistuje žádná situace, ve které by návratná hodnota z těchto volání funkce Patch byla vrácena funkcí IfError.

Poznámka:

Zatímco je chování v procesu změny, typy všech argumentů funkce IfError musí být v současné době kompatibilní.

V jednoduchém příkladu popsaném výše:

IfError( 1/x, 0 )

Typy 1/x a 0 byly kompatibilní, protože jsou oba čísla. Pokud tomu tak není, bude druhý argument vynucen, aby odpovídal typu prvního argumentu.

Excel zobrazí #DIV/0!, když dojde k dělení nulou.

Místo toho zvažte následující funkci IfError:

IfError( 1/x, "#DIV/0!" )

Výše uvedený vzorec nebude fungovat. Textový řetězec "#DIV/0!" bude donucen ke změně na typ prvního argumentu IfError, což je číslo. Výsledek IfError bude další chyba, protože textový řetězec nemůže být vynucen. Jako opravu převeďte první argument na textový řetězec, takže IfError vždy vrací textový řetězec:

IfError( Text( 1/x ), "#DIV/0!" )

Jak je vidět výše, IfError může vrátit chybu, pokud je vzorec Nahrazení nebo VýchozíVýsledek také chyba.

FirstError / AllErrors

V rámci náhradních vzorců jsou informace o nalezených chybách dostupné prostřednictvím záznamu FirstError a tabulky AllErrors. AllErrors je tabulka záznamů s informacemi o chybách, FirstError je zástupce odkazující na první záznam této tabulky. FirstError vždy vrátí stejnou hodnotu jako First( AllErrors ).

Mezi chybové záznamy patří:

Pole Typ Popis
Kind Výčet ErrorKind (číslo) Kategorie chyby.
Message Textový řetězec Zpráva o chybě, vhodná pro zobrazení koncovému uživateli.
Source Textový řetězec Místo, kde chyba vznikla, používané ve hlášení. Například pro vzorec vázaný na vlastnost ovládacího prvku to bude ve formuláři ControlName.PropertyName.
Observed Textový řetězec Místo, kde se chyba uživateli zobrazí a které se používá pro hlášení. Například pro vzorec vázaný na vlastnost ovládacího prvku to bude ve formuláři ControlName.PropertyName.
Details Záznam Podrobnosti o chybě. V současnosti jsou podrobnosti poskytovány pouze u chyb sítě. Tento záznam zahrnuje údaj HttpStatusCode, který obsahuje stavový kód HTTP, a údaj HttpResponse, který obsahuje tělo odpovědi z konektoru nebo služby.

Například zvažte použití následujícího vzorce jako vlastnosti OnSelect ovládacího prvku Button:

Set( a, 1/0 )

A tento vzorec vlastnosti OnSelect druhého ovládacího prvku Tlačítko:

IfError( a, Notify( "Internal error: originated on " & FirstError.Source & ", surfaced on " & FirstError.Observed ) )

Příklad vzorce výše by zobrazil následující banner, když jsou postupně aktivována dvě tlačítka:

Ovládací prvek Button aktivován, zobrazuje oznámení funkce Notify.

Obvykle se vyskytne pouze jedna chyba, se kterou FirstError nemá problém pracovat. Existují však scénáře, kdy může být vráceno více chyb. Například při použití operátoru řetězení vzorce nebo funkce Concurrent. I v těchto situacích hlášení chyby FirstError může stačit k odhalení problému místo zatěžování uživatele více chybami najednou. Pokud stále chcete pracovat s každou chybou samostatně, můžete použít tabulku AllErrors.

IsError

Funkce IsError testuje chybovou hodnotu.

Vrácenou hodnotou je logická hodnota pravda nebo nepravda.

Použitím funkce IsError zabráníte dalšímu zpracování chyby.

IsBlankOrError

Funkce IsBlankOrError testuje přítomnost prázdné nebo chybové hodnoty a je ekvivalentem zápisu Or( IsBlank( X ), IsError( X ) ).

Při povolení zpracování chyb u stávajících aplikací zvažte nahrazení funkce IsBlank za funkci IsBlankOrError, aby zůstalo zachováno stávající chování aplikace. Před přidáním zpracování chyb byla k vyjádření jak hodnot null, tak chybových hodnot v databázi používána prázdná hodnota. Zpracování chyb odděluje tyto dvě interpretace prázdné hodnoty, což by mohlo změnit chování stávajících aplikací, které nadále používají funkci IsBlank.

Vrácenou hodnotou je logická hodnota pravda nebo nepravda.

Použitím funkce IsBlankOrError zabráníte dalšímu zpracování chyby.

Funkci Error použijte k vytvoření a nahlášení vlastní chyby. Například můžete mít logiku k určení, zda je daná hodnota platná pro váš kontext, či nikoli – něco, u čeho se automaticky neprovádí test přítomnosti problému. Můžete vytvořit a vrátit vlastní chybu, v úplném tvaru včetně polí Kind a Message, a to pomocí stejného záznamu popsaného výše u funkce IfError.

V kontextu IfError použijte funkci Chyba k opětovnému vyvolání nebo průchodu chyby. Například vaše logika při použití IfError může rozhodnout, že v některých případech lze chybu bezpečně ignorovat, ale v jiných případech je důležité chybu odeslat. V rámci IfError nebo App.OnError použijte k průchodu chybou Error( FirstError ).

Funkci Error lze také předat tabulku chyb, které jsou v tabulce AllErrors. Volání Error( AllErrors ) použijte k opětovnému vyvolání všech chyby, nejen první.

Prázdný záznam nebo prázdná tabulka předaná do funkce Error nemá za následek žádnou chybu.

Syntaxe

Error( ChybovýZáznam )
Error( TabulkaChyb )

  • ChybovýZáznam – povinné. Záznam informací o chybě, včetně polí Kind, Message a dalších. Kind je povinné pole. FirstError lze předat přímo.
  • TabulkaChyb – povinné. Tabulka se záznamy chybových informací. AllErrors lze předat přímo.

IfError( Hodnota1, Nahrazení1 [, Hodnota2, Nahrazení2, ... [, VýchozíVýsledek ] ] )

  • Hodnoty – povinné. Vzorec nebo vzorce, ve kterých se má otestovat, jestli neobsahují chybu.
  • Nahrazení – povinné. Vzorce k vyhodnocení a hodnoty k vrácení, pokud odpovídající argumenty Hodnota vrátily chybu.
  • VýchozíVýsledek – volitelné. Vzorce pro vyhodnocení, pokud vzorec nenajde žádné chyby.

IsError( Hodnota )
IsBlankOrError( Hodnota )

  • Hodnota – povinné. Vzorec k testování.

Příklady

Jednoduchá funkce IfError

Vzorec Popis Výsledek
IfError( 1, 2 ) První argument není chyba. Funkce neobsahuje žádné další chyby ke kontrole a žádnou výchozí návratovou hodnotu. Funkce vrací poslední vyhodnocený argument Hodnota. 1
IfError( 1/0, 2 ) První argument vrací chybovou hodnotu (z důvodu dělení nulou). Funkce vyhodnotí druhý argument a vrátí jej jako výsledek. 2
IfError( 10, 20, 30 ) První argument není chyba. Funkce neobsahuje žádné další chyby ke kontrole, ale obsahuje výchozí návratovou hodnotu. Funkce vrátí argument VýchozíVýsledek. 30
IfError( 10, 11, 20, 21, 300 ) První argument 10 není chyba, takže funkce nevyhodnocuje odpovídající náhradu tohoto argumentu 11. Třetí argument 20 také není chyba, takže funkce nevyhodnocuje odpovídající náhradu tohoto argumentu 21. Pátý argument 300 nemá žádnou odpovídající náhradu a je výchozím výsledkem. Funkce vrací tento výsledek, protože vzorec neobsahuje žádné chyby. 300
IfError( 1/0, Notify( "Došlo k interní chybě" ) ) První argument vrací chybovou hodnotu (z důvodu dělení nulou). Funkce vyhodnotí druhý argument a uživateli zobrazí zprávu. Návratová hodnota funkce IfError je návratovou hodnotou funkce Notify, která je převedená na stejný typ jako první argument funkce IfError (číslo). 1

Jednoduchá funkce IsError

Vzorec Popis Výsledek
IsError( 1 ) Argument není chyba. nepravda
IsError( Blank() ) Argument je prázdný, ale ne chyba. nepravda
IsError( 1/0 ) Argument je chyba. true
If (IsError( 1/0 ), Notify( "Došlo k interní chybě" ) ) První argument pro IsError vrací chybovou hodnotu (z důvodu dělení nulou). Tato funkce vrátí pravda, což způsobí, že funkce If zobrazí zprávu uživateli pomocí funkce Notify. Návratová hodnota funkce If je návratovou hodnotou funkce Notify, která je převedená na stejný typ jako první argument funkce If (logická hodnota). true

Jednoduchá funkce IsBlankOrError

Vzorec Popis Výsledek
IsBlankOrError( 1 ) Argument není ani chyba, ani prázdná hodnota. nepravda
IsBlankOrError( Blank() ) Argument je prázdný. true
IsBlankOrError( 1/0 ) Argument je chyba. true

Jednoduchá chyba

V tomto příkladu jsou kalendářní data ověřována relativně vůči sobě, což vede k chybě, pokud dojde k problému.

If( StartDate > EndDate,
    Error( { Kind: ErrorKind.Validation, Message: "Start Date must be before End Date" } ) )

V tomto příkladu mohou některé chyby projít, zatímco jiné jsou potlačeny a nahrazeny hodnotou. V prvním případě b bude v chybovém stavu, protože funkce Value má neplatný argument. Protože toto chování tvůrce vzorce nečekal, je chyba předána dál, takže ji uživatel uvidí. Ve druhém případě se stejným vzorcem b bude mít hodnotu 0, výsledkem je dělení nulou. V tomto případě může autor vzorce vědět, že je to pro tuto logiku přijatelné, potlačí chybu (nezobrazí se žádný nápis) a vrátí místo chyby -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

Tabulku AllErrors lze filtrovat jako kteroukoli jinou tabulku. Používá se ve funkci Error, očekávané chyby lze odstranit a zbývající chyby zachovat a nahlásit. Pokud bychom například věděli, že dělení nulou nebude v konkrétním kontextu problém, tyto chyby by bylo možné odfiltrovat a všechny ostatní chyby ponechat beze změny podle následujícího vzorce:

Error( Filter( AllErrors, Kind <> ErrorKind.Div0 ) )

Podrobný postup

  1. Přidejte ovládací prvek Text input a pojmenujte ho TextInput1, pokud už se tak ve výchozím nastavení nejmenuje.

  2. Přidejte ovládací prvek Popisek a pojmenujte ho Label1, pokud už se tak ve výchozím nastavení nejmenuje.

  3. Nastavte vzorec pro vlastnost Text prvku Label1 na:

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

    Label1 zobrazí hodnotu 1234, protože je to platné zadání do funkce Value.

  5. V TextInput1 zadejte ToInfinity.

    Label1 zobrazí hodnotu -1, protože to není platné zadání do funkce Value. Pokud byste nezabalili funkci Value do funkce IfError, popisek by nezobrazil žádnou hodnotu, protože chybová hodnota se považuje za prázdnou.

Viz také

Odkaz na vzorec pro Power Apps