Sdílet prostřednictvím


Funkce Error, IfError, IsError, IsBlankOrError

Platí pro: aplikace na plátně Dataverse sloupce vzorců toky na počítači aplikace řízené modelem Power Pages Power Platform CLI

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

Poznámka:

Pokud aplikace zakázala funkci Správa chyb na úrovni vzorce v části Nastavení>Aktualizace> Po vyřazení nebudou tyto funkce fungovat správně.

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 vrátí 0 pokud je hodnota x nulová, protože 1/x vyvolá 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 ze svých argumentů. Typy všech hodnot, které mohou být vráceny funkcí IfError, musí být kompatibilní.

V posledním příkladu Oprava vrací záznam, který není kompatibilní s logickými hodnotami použitý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í, je druhý argument nucen odpovídat 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!" je vynucen na typ prvního argumentu IfError, což je číslo. Výsledkem IfError je další chyba, protože textový řetězec nelze vynutit. 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ů chybových informací, přičemž FirstError je zkratkou k prvnímu záznamu této tabulky. FirstError vždy vrací stejnou hodnotu jako First( AllErrors ).

Mezi chybové záznamy patří:

Pole Typ Popis
Druh Výčet ErrorKind (číslo) Kategorie chyby.
Zpráva Textový řetězec Zpráva o chybě, vhodná pro zobrazení koncovému uživateli.
Zdroj 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 je tato hodnota ve tvaru Název ovládacího prvku.Název vlastnosti.
Pozorováno 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 je tato hodnota ve tvaru Název ovládacího prvku.Název vlastnosti.
Podrobnosti Zaznamenat Podrobnosti o chybě. V současné době jsou podrobnosti poskytovány pouze pro chyby 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 dokáže dostatečně 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í IsError zabrání jakémukoli 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 prázdná hodnota použita k reprezentaci hodnot null z databází i chybových hodnot. 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í IsBlankOrError zabrání jakémukoli 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

Chyba( Záznam chyby )
Chyba( Tabulka chyb )

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

IfError( Hodnota1, Náhrada1 [, Hodnota2 , Náhrada2, ... [, Výchozí výsledek ] ] )

  • Hodnoty – Povinné. Vzorec nebo vzorce, ve kterých se má otestovat, jestli neobsahují chybu.
  • Náhrady – Povinné. Vzorce k vyhodnocení a hodnoty k vrácení, pokud odpovídající argumenty Hodnota vrátily chybu.
  • DefaultResult – 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ímu problému" ) ) 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. falešný
IsError( Blank() ) Argument je prázdný, ale ne chyba. falešný
IsError( 1/0) Argument je chyba. věrný
If( IsError( 1/0 ), Notify( "Došlo k internímu problému" ) ) 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). věrný

Jednoduchá funkce IsBlankOrError

Vzorec Popis Výsledek
IsBlankOrError( 1 ) Argument není ani chyba, ani prázdná hodnota. falešný
IsBlankOrError( Blank() ) Argument je prázdný. věrný
IsBlankOrError( 1/0) Argument je chyba. věrný

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ě je b v chybovém stavu, protože funkce Hodnota má neplatný argument. Protože je to neočekávané zapisovatelem vzorců, je to předáno, takže to uživatel vidí. V druhém případě se stejným vzorcem má b hodnotu 0, což vede k 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émem, mohly by být tyto chyby odfiltrovány a všechny ostatní chyby zůstaly nedotčené 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 zobrazuje hodnotu 1234 , protože se jedná o platný vstup do funkce Value.

  5. V TextInput1 zadejte ToInfinity.

    Label1 zobrazuje hodnotu -1 , protože to není platný vstup do funkce Hodnota. 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