Função Errors

Aplica-se a: Aplicações de tela Aplicações condicionadas por modelo

Fornece informações de erro relativas a alterações numa origem de dados.

Descrição Geral

Podem ocorrer erros quando o registo de uma origem de dados é alterada. Isso pode dever-se a muitas causas, incluindo falhas de rede, permissões inadequadas e conflitos de edição.

As funções que modificam dados em origens de dados, como Patch, Collect, Remove, RemoveIf, Update, UpdateIf, e SubmitForm reportam erros de duas formas:

  • Cada uma destas funções obterá um valor de erro como resultado da operação. Os erros podem ser detetados com IsError e substituídos ou suprimidos com IfError e App.OnError, como habitualmente. Consulte Processamento de Erros para obter mais informações.
  • Após a operação, a função Errors também obterá os erros de operações anteriores. Isto pode ser útil para apresentar a mensagem de erro num ecrã de formulário sem precisar de capturar o erro numa variável de estado.

Pode evitar alguns erros antes de ocorrerem se utilizar as funções Validate e DataSourceInfo. Consulte Trabalhar com as origens de dados para obter mais sugestões sobre como trabalhar e evitar erros.

Descrição

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

  • Registo. O registo na origem de dados que tinha o erro. Se o erro ocorreu durante a criação de um registo, esta coluna volta a aparecer a blank.
  • Coluna. A coluna que causou o erro, se o erro pode ser atribuído a uma única coluna. Se não for o caso, esta aparece blank.
  • Mensagem. Uma descrição do erro. Esta cadeia de erro pode ser apresentada para o utilizador final. Tenha em atenção que esta mensagem pode ser gerada pela origem de dados, pode ser comprida e conter nomes de coluna não processados que poderão não ter qualquer significado para o utilizador.
  • Error. Um código de erro que pode ser utilizado em fórmulas para ajudar a resolver o erro:
ErrorKind Descrição
ErrorKind.Conflict Foi efetuada outra alteração no mesmo registo, resultando num conflito de alteração. Utilize a função Refresh para recarregar o registo e tente efetuar de novo a alteração.
ErrorKind.ConstraintViolation Uma ou mais restrições foram violadas.
ErrorKind.CreatePermission Foi efetuada uma tentativa de criar um registo e o utilizador atual não tem permissão para criar registos.
ErrorKind.DeletePermission Foi efetuada uma tentativa de eliminar um registo e o utilizador atual não tem permissão para eliminar registos.
ErrorKind.EditPermission Foi efetuada uma tentativa de editar um registo e o utilizador atual não tem permissão para editar registos.
ErrorKind.GeneratedValue Foi efetuada uma tentativa de alterar uma coluna que a origem de dados gera automaticamente.
ErrorKind.MissingRequired O valor de uma coluna necessária está em falta no registo.
ErrorKind.None Não há nenhum erro.
ErrorKind.NotFound Foi efetuada uma tentativa para editar ou eliminar um registo, mas não foi possível localizar o registo. Outro utilizador pode ter alterado o registo.
ErrorKind.ReadOnlyValue Foi efetuada uma tentativa para alterar uma coluna apenas de leitura.
ErrorKind.Sync Foi comunicado um erro pela origem de dados. Verifique a coluna Mensagem para obter mais informações.
ErrorKind.Unknown Ocorreu um erro, mas de um tipo desconhecido.
ErrorKind.Validation Foi detetado um problema de validação geral, que não foi possível ajustar um dos outros tipos.

Se fornecer o argumento Record para a função, podem ser apresentados erros para toda a origem de dados ou para apenas uma linha selecionada.

Patch ou outra função de dados pode devolver um valor em branco se, por exemplo, não foi possível criar um registo. Pode colocar blank em Errors, sendo apresentadas as informações de erro adequadas nestes casos. A utilização subsequente das funções do dados na mesma origem de dados irá eliminar estas informações de erro.

Se houver erros, a tabela apresentada por Errors irá ficar em branco e pode ser testada com a função IsEmpty.

Sintaxe

Errors( DataSource [, Record ] )

  • DataSource – Obrigatório. A origem de dados para a qual pretende devolver erros.
  • Record – Opcional. O registo específico para o qual pretende devolver erros. Se não especificar este argumento, a função devolve erros para toda a origem de dados.

Exemplos

Passo a Passo

Neste exemplo, vamos trabalhar com a origem de dados IceCream:

Gelado.

Através da aplicação, um utilizador carrega o registo Chocolate num formulário de introdução de dados e, em seguida, altera o valor de Quantidade para 90. O registo a trabalhar é colocado na variável de contextoEditRecord:

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

Para fazer esta alteração da origem de dados, é utilizada a função Patch:

  • Patch( IceCream, EditRecord, Gallery.Updates )

em que Gallery.Updates é avaliado para { Quantity: 90 }, porque só a propriedade Quantity foi modificada.

Infelizmente, imediatamente antes da função Patch ter sido invocada, outra pessoa modificou a Quantity de Chocolate para 80. O Power Apps vai detetar isto e não permite a alteração do conflito. Pode verificar esta situação com a fórmula:

  • IsEmpty( Errors( IceCream, EditRecord ) )

que devolve false, porque a função Errors devolveu a tabela seguinte:

Registo Coluna Mensagem Erro
{ Flavor: "Chocolate", Quantity: 100 } em branco "Outro utilizador modificou o registo que está a tentar modificar. Carregue de novo o registo e tente novamente." ErrorKind.Conflict

É possível colocar uma etiqueta no formulário para mostrar este erro ao utilizador.

  • Para mostrar o erro, defina a propriedade Text da etiqueta para esta fórmula:
    Label.Text = First(Errors( IceCream, EditRecord )).Message

Também pode adicionar um botão Recarregar no formulário, para que o utilizador possa resolver o conflito de maneira eficiente.

  • Para mostrar o botão apenas quando o conflito tiver ocorrido, defina a propriedade Visible do botão para esta fórmula:
    !IsEmpty( Lookup( Errors( IceCream, EditRecord ), Error = ErrorKind.Conflict ) )
  • Para reverter a alteração que o utilizador seleciona o botão, defina a respetiva propriedade OnSelect para esta fórmula:
    ReloadButton.OnSelect = Revert( IceCream, EditRecord )