Partilhar via


Errors Função

Aplica-se a: Aplicativos de tela Aplicativos orientados por modelos

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

Descrição Geral

Errors pode acontecer quando um registro de uma fonte de dados é alterado. 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 dessas funções retorna um valor de erro como resultado da operação. Errors pode ser detetado com IsError e substituído ou suprimido com IfError e App.OnError como de costume. Consulte Processamento 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.

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 Errors função retorna uma tabela de erros que contém as seguintes colunas:

  • Recorde. O registo na origem de dados que tinha o erro. Se o erro ocorreu durante a criação de um registo, esta coluna está em branco.
  • Coluna. A coluna que causou o erro, se o erro pode ser atribuído a uma única coluna. Se não, está em branco.
  • Mensagem. Uma descrição do erro. Esta cadeia de erro pode ser apresentada para o utilizador final. Esta mensagem pode ser gerada pela fonte de dados e pode ser longa e conter nomes de colunas brutas que podem não ter qualquer significado para o usuário.
  • Erro. 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 Houve um problema geral de validação detetado, que não se encaixava em um dos outros tipos.

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

O patch ou outra função de dados pode retornar um valor em branco se, por exemplo, um registro não puder ser criado. Você pode passar em branco para Errorso , 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 que Errors retorna estará vazia e poderá ser testada com a função IsEmpty .

Sintaxe

Errors( Fonte de Dados [, Record ] )

  • DataSource – Obrigatório. A origem de dados para a qual pretende devolver erros.
  • Registro – 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, trabalharemos com a fonte de dados IceCream , uma fonte de dados para a qual o Power Apps tentará detetar conflitos:

Gelado.

Observação

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

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( Sorvete, Sabor = "Chocolate" ) } )

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

  • Patch( Sorvete, EditRecord, Gallery.Updates )

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

Infelizmente, imediatamente antes da função Patch ter sido invocada, outra pessoa modificou a Quantity de Chocolate para 80. Como essa é uma fonte de dados com suporte para deteção de conflitos, o Power Apps detetará isso e não permitirá que a alteração conflitante ocorra. Pode verificar esta situação com a fórmula:

  • IsEmpty( Errors( Sorvete, EditRecord )

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

Registo Coluna Mensagem Erro
{ Sabor: "Chocolate", Quantidade: 100 } em branco "Outro utilizador modificou o registo que está a tentar modificar. Recarregue o registro 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 = Primeiro(Errors( IceCream, EditRecord )). Mensagem

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 ), Erro = ErrorKind.Conflict )
  • Para reverter a alteração, que o usuário seleciona o botão, defina sua propriedade OnSelect para esta fórmula:
    ReloadButton.OnSelect = reverter( Sorvete, EditRecord )