Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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:
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 )