Função Errors

Aplica-se a: Aplicativos de tela Aplicativos baseados em modelo

Fornece informações de erro para alterações anteriores em uma fonte de dados.

Visão Geral

Erros podem ocorrer quando um registro de uma fonte de dados é alterado. Muitas causas são possíveis, incluindo interrupções de rede, permissões inadequadas e conflitos de edição.

As funções que modificam dados em fontes de dados, como Patch, Collect, Remove, RemoveIf, Update, UpdateIf e SubmitForm relatam erros de duas maneiras:

  • Cada uma dessas funções retornará um valor de erro como resultado da operação. Erros podem ser detectados com IsError e substituídos ou suprimidos com IfError e App.OnError como de costume. Consulte Tratamento de Erros para obter mais informações.
  • Após a operação, a função Errors também retornará os erros das operações anteriores. Isso pode ser útil para exibir a mensagem de erro em uma tela de formulário sem precisar capturar o erro em uma variável de estado.

Você pode evitar alguns erros antes que eles ocorram usando as funções Validate e DataSourceInfo. Consulte trabalhando com fontes de dados para obter mais sugestões sobre como trabalhar com erros e evitá-los.

Descrição

A função Errors retorna uma tabela de erros que contém as seguintes colunas:

  • Registro. O registro da fonte de dados que tinha o erro. Se o erro tiver ocorrido durante a criação de um registro, essa coluna ficará em branco.
  • Coluna. A coluna que causou o erro se o erro puder ser atribuído a uma única coluna. Caso contrário, ela ficará em branco.
  • Mensagem. Uma descrição do erro. Essa cadeia de caracteres de erro pode ser exibida para o usuário final. Lembre-se de que essa mensagem pode ser gerada pela fonte de dados, pode ser longa e conter nomes brutos de coluna sem significado para o usuário.
  • Erro. Um código de erro que pode ser usado em fórmulas para ajudar a resolver o erro:
ErrorKind Descrição
ErrorKind.Conflict Outra alteração foi feita no mesmo registro, resultando em um conflito de alteração. Use a função Refresh para recarregar o registro e tente a alteração novamente.
ErrorKind.ConstraintViolation Uma ou mais restrições foram violadas.
ErrorKind.CreatePermission Houve uma tentativa de criar um registro e o usuário atual não tem permissão para criar registros.
ErrorKind.DeletePermission Houve uma tentativa de excluir um registro e o usuário atual não tem permissão para excluir registros.
ErrorKind.EditPermission Houve uma tentativa de editar um registro e o usuário atual não tem permissão para editar registros.
ErrorKind.GeneratedValue Houve uma tentativa de alterar uma coluna que a fonte de dados gera automaticamente.
ErrorKind.MissingRequired O valor de uma coluna obrigatória está ausente no registro.
ErrorKind.None Não há erro.
ErrorKind.NotFound Houve uma tentativa de editar ou excluir um registro, mas o registro não foi encontrado. Outro usuário pode ter alterado o registro.
ErrorKind.ReadOnlyValue Houve uma tentativa de alterar uma coluna que é somente leitura.
ErrorKind.Sync Um erro foi relatado pela fonte de dados. Verifique a coluna Mensagem para obter mais informações.
ErrorKind.Unknown Ocorreu um erro, mas de um tipo desconhecido.
ErrorKind.Validation Foi detectado um problema de validação geral, que não se encaixa em um dos outros tipos.

Erros podem ser retornados para a fonte de dados inteira ou apenas uma linha selecionada, fornecendo o argumento Registro para a função.

Patch ou outra função de dados poderá retornar um valor em branco se, por exemplo, não for possível criar um registro. Você pode passar em branco para Erros e ele retornará informações de erro apropriadas nesses casos. O uso subsequente de funções de dados na mesma fonte de dados removerá as informações desse erro.

Se não houver erros, a tabela retornada por Errors ficará vazia e poderá ser testada com a função IsEmpty.

Sintaxe

Errors( DataSource [, Record ] )

  • DataSource - obrigatório. A fonte de dados para a qual você deseja retornar erros.
  • Record - opcional. Um registro específico para o qual você deseja retornar erros. Se você não especificar esse argumento, a função retornará erros para a fonte de dados inteira.

Exemplos

Passo a passo

Para este exemplo, trabalharemos com a fonte de dados IceCream:

Sorvete.

Por meio do aplicativo, um usuário carrega o registro Chocolate em um formulário de entrada de dados e altera o valor de Quantity para 90. O registro em que você trabalhará é colocado na variável de contextoEditRecord:

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

Para fazer essa alteração na fonte de dados, a função Patch é usada:

  • Patch( IceCream, EditRecord, Gallery.Updates )

em que Gallery.Updates é avaliada como { Quantity: 90 }, já que apenas a propriedade Quantity foi modificada.

Infelizmente, antes de a função Patch ser invocada, alguém modificou a Quantity de Chocolate para 80. O Power Apps detectará isso e não permitirá que a alteração conflitante ocorra. Você pode verificar essa situação com a fórmula:

  • IsEmpty( Errors( IceCream, EditRecord ) )

que retorna false porque a função Errors retornou a seguinte tabela:

Registro Coluna Mensagem Erro
{ Flavor: "Chocolate", Quantity: 100 } blank "Outro usuário modificou o registro que você está tentando modificar. Recarregue o registro e tente novamente." ErrorKind.Conflict

Você pode colocar um rótulo no formulário para mostrar esse erro ao usuário.

  • Para mostrar o erro, defina a propriedade Text do rótulo como esta fórmula:
    Label.Text = First(Errors( IceCream, EditRecord )).Message

Você também pode adicionar um botão Recarregar no formulário para que o usuário possa resolver com eficiência o conflito.

  • Para exibir o botão somente quando houver um conflito, defina a propriedade Visible do botão como esta fórmula:
    !IsEmpty( Lookup( Errors( IceCream, EditRecord ), Error = ErrorKind.Conflict ) )
  • Para reverter a alteração em que o usuário seleciona o botão, defina a propriedade OnSelect como esta fórmula:
    ReloadButton.OnSelect = Revert( IceCream, EditRecord )