Funkce Errors

Platí pro: aplikace plátna modelem řízené aplikace

Poskytuje informace o chybách u předchozích změn zdroje dat.

Přehled

Když se záznam zdroje dat změní, může docházet k chybám. Příčin může být řada, například výpadky sítě, nedostatečná oprávnění a konflikty úprav.

Funkce, které mění zdroje dat, jako Patch, Collect, Remove, RemoveIf, Update, UpdateIf a SubmitForm hlásí chyby dvěma způsoby:

  • Každá z těchto funkcí vrátí chybovou hodnotu jako výsledek operace. Chyby lze detekovat pomocí IsError a nahradit nebo potlačit pomocí IfError a App.OnError jako obvykle. Další informace naleznete v článku Zpracování chyb.
  • Po operaci vrátí funkce Errors také chyby pro předchozí operace. To může být užitečné pro zobrazení chybové zprávy na obrazovce formuláře, aniž by bylo nutné zachytit chybu ve stavové proměnné.

Některým chybám se dá vyhnout ještě před jejich vznikem pomocí funkcí Validate a DataSourceInfo. Další návrhy k tomu, jak pracovat s chybami a jak se jim vyhýbat, najdete v tématu o práci se zdroji dat.

Popis

Funkce Errors vrací tabulku chyb, která obsahuje následující sloupce:

  • Record. Záznam ve zdroji dat, který obsahuje chybu. Pokud k chybě došlo při vytváření záznamu, bude tento sloupec prázdný.
  • Sloupec. Sloupec, který způsobil chybu, pokud lze danou chybu přiřadit jednomu sloupci. Pokud ne, bude tento sloupec prázdný.
  • Message. Popis chyby. Tento text chyby se může zobrazovat koncovému uživateli. Mějte na paměti, že tato zpráva může být generovaná zdrojem dat, může být dlouhá a může obsahovat nezpracované názvy sloupců, které nemusejí být pro uživatele srozumitelné.
  • Error. Kód chyby, který je možné použít ve vzorcích, aby se usnadnilo vyřešení chyby:
ErrorKind Popis
ErrorKind.Conflict Ve stejném záznamu se provedla jiná změna a výsledkem je konflikt změn. Pomocí funkce Refresh znovu načtěte záznam a zkuste provést danou změnu znovu.
ErrorKind.ConstraintViolation Porušilo se jedno nebo více omezení.
ErrorKind.CreatePermission Došlo k pokusu o vytvoření záznamu a aktuální uživatel nemá oprávnění k vytváření záznamů.
ErrorKind.DeletePermission Došlo k pokusu o odstranění záznamu a aktuální uživatel nemá oprávnění k odstraňování záznamů.
ErrorKind.EditPermission Došlo k pokusu o úpravy záznamu a aktuální uživatel nemá oprávnění k úpravám záznamů.
ErrorKind.GeneratedValue Došlo k pokusu o změnu sloupce, který zdroj dat generuje automaticky.
ErrorKind.MissingRequired Hodnota pro požadovaný sloupec v záznamu chybí.
ErrorKind.None Žádná chyba neexistuje.
ErrorKind.NotFound Došlo k pokusu o úpravy nebo odstranění záznamu, ale záznam se nenašel. Záznam mohl změnit jiný uživatel.
ErrorKind.ReadOnlyValue Došlo k pokusu o změnu sloupce, který je jen pro čtení.
ErrorKind.Sync Zdroj dat oznámil chybu. Další informace najdete ve sloupci Zpráva.
ErrorKind.Unknown Došlo k chybě neznámého typu.
ErrorKind.Validation Vyskytl se obecný problém s ověřováním, který neodpovídá žádnému z dalších typů.

Chyby se můžou vracet pro celý zdroj dat, nebo jenom pro vybraný řádek, pokud do této funkce zadáte argument Záznam.

Funkce Patch nebo jiná datová funkce může vracet prázdnou hodnotu, pokud například záznam nejde vytvořit. Prázdnou hodnotu můžete předat do funkce Errors a tato funkce vrátí v těchto případech informace o příslušné chybě. Při dalším použití datových funkcí u stejného datového zdroje se informace o této chybě vymažou.

Pokud žádné chyby neexistují, bude tabulka vrácená funkcí Errorsprázdná a bude ji možné testovat pomocí funkce IsEmpty.

Syntaxe

Errors( Zdroj dat [; Záznam ] )

  • ZdrojDat – povinné. Zdroj dat, pro který chcete vrátit chyby.
  • Záznam – volitelné. Konkrétní záznam, pro který chcete vrátit chyby. Pokud nezadáte tento argument, funkce vrátí chyby pro celý zdroj dat.

Příklady

Podrobný postup

V tomto příkladu budeme pracovat se zdrojem dat IceCream:

Zmrzlina.

Uživatel načte prostřednictvím aplikace do formuláře pro vkládání dat záznam Chocolate a pak změní hodnotu Quantity na 90. Záznam, se kterým se má pracovat, se nachází v kontextové proměnnéEditRecord:

  • UpdateContext( { EditRecord: LookUp( IceCream, Flavor = "Chocolate" ) } )

K provedení této změny ve zdroji dat se používá funkce Patch:

  • Patch( IceCream; EditRecord; Gallery.Updates )

kde Gallery.Updates se vyhodnotí jako { Quantity: 90 }, protože se změnila jenom vlastnost Quantity.

Bohužel zrovna před voláním funkce Patch někdo jiný změnil vlastnost Quantity pro záznam Chocolate na 80. Aplikace Power Apps to rozpozná a nepovolí, aby se konfliktní změna provedla. Tuto situaci můžete vyhledat pomocí vzorce:

  • IsEmpty( Errors( IceCream; EditRecord ) )

který vrátí hodnotu false, protože funkce Errors vrátila následující tabulku:

Záznam Sloupec Zpráva Chybové
{ Flavor: "Chocolate"; Quantity: 100 } prázdný Another user has modified the record that you're trying to modify. Please reload the record and try again. (Jiný uživatel změnil záznam, který se pokoušíte změnit. Načtěte znovu záznam a zkuste to znovu.) ErrorKind.Conflict

Můžete do formuláře umístit popisek, který zobrazí tuto chybu uživateli.

  • Pokud chcete tuto chybu zobrazit, nastavte do vlastnosti Text tohoto popisku tento vzorec:
    Label.Text = First(Errors( IceCream, EditRecord )).Message

Můžete také do formuláře přidat tlačítko Načíst znovu, aby mohl uživatel tento konflikt účinně vyřešit.

  • Pokud chcete toto tlačítko zobrazit jenom v případě, že došlo ke konfliktu, nastavte do vlastnosti Visible tohoto tlačítka tento vzorec:
    !IsEmpty( Lookup( Errors( IceCream; EditRecord ); Error = ErrorKind.Conflict ) )
  • Pokud chcete vrátit změnu zpátky, když uživatel vybere toto tlačítko, nastavte do jeho vlastnosti OnSelect tento vzorec:
    ReloadButton.OnSelect = Revert( IceCream; EditRecord )