Compartilhar via


Errors Função

Aplica-se a: Aplicativos de tela controlados por modelos

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

Visão Geral

Errors pode acontecer 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 retorna um valor de erro como resultado da operação. Errors pode ser detectado com IsError e substituído ou suprimido por IfError e App.OnError como de costume. Consulte Tratamento de Erros para obter mais informações.
  • Após a operação, a Errors função também retornará os erros de operações anteriores. Pode ser útil para exibir a mensagem de erro em uma tela de formulário sem a necessidade de 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 Errors função 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 ocorreu durante a criação de um registro, essa coluna estará em branco.
  • Coluna. A coluna que causou o erro se o erro puder ser atribuído a uma única coluna. Caso contrário, está em branco.
  • Mensagem. Uma descrição do erro. Essa cadeia de caracteres de erro pode ser exibida para o usuário final. Essa mensagem pode ser gerada pela fonte de dados e pode ser longa e conter nomes de coluna brutos que podem não ter nenhum 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 encaixava em um dos outros tipos.

Errors pode ser retornado para toda a fonte de dados ou apenas para uma linha selecionada fornecendo o argumento Registro para a função.

Correção ou outra função de dados pode retornar um em branco valor se, por exemplo, um registro não puder ser criado. Você pode passar em branco para Errors, e ele retorna informações de erro apropriadas nesses casos. O uso subsequente de funções de dados na mesma fonte de dados limpa essas informações de erro.

Se não houver erros, a tabela retornada Errors estará 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.
  • Registro – 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 , uma fonte de dados para a qual o Power Apps tentará detectar conflitos:

Sorvete.

Observação

O Power Apps não tenta detectar conflitos para alterações nas tabelas do Dataverse.

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:

  • AtualizarContexto( { EditarRegistro: LookUp(Sorvete, Sabor = "Chocolate") } )

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

  • Patch(Sorvete, EditarRegistro, Galeria.Atualizações)

Onde Gallery.Updates é avaliada como { Quantidade: 90 }, uma vez que somente a propriedade Quantity foi modificada.

Infelizmente, antes de a função Patch ser invocada, alguém modificou a Quantity de Chocolate para 80. Como essa é uma fonte de dados com suporte para detecção de conflitos, 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 ) )

O que retorna false, porque a Errors função retornou a tabela a seguir:

Registro Coluna Mensagem Erro
{ Sabor: "Chocolate", Quantidade: 100 } em branco "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 )). Mensagem

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, que o usuário seleciona o botão, defina sua propriedade OnSelect como esta fórmula:
    ReloadButton.OnSelect = reverter(Sorvete, EditarRegistro)