Função Errors
Aplica-se a: Aplicativos de tela Aplicativos controlados 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:
- Recorde. 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.
- 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 | 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.
O patch ou outra função de dados pode retornar um valor em branco se, por exemplo, um registro não puder ser criado. 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
Erros( DataSource [, 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, vamos trabalhar com a origem de dados IceCream:
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 )
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( Erros( 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 = Primeiro(Erros( 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( Erros( IceCream, EditRecord ), Erro = 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 = reverter( Sorvete, EditRecord )