Função Erros no PowerAppsErrors function in PowerApps

Fornece informações de erro relativas a alterações numa origem de dados.Provides error information for previous changes to a data source.

Descrição geralOverview

Podem ocorrer erros quando o registo de uma origem de dados é alterada.Errors can happen when a record of a data source is changed. Isso pode dever-se a muitas causas, incluindo falhas de rede, permissões inadequadas e conflitos de edição.Many causes are possible, including network outages, inadequate permissions, and edit conflicts.

A função Patch e outras funções de dados não devolvem erros diretamente.The Patch function and other data functions don't directly return errors. Em vez disso, devolvem o resultado da respetiva operação.Instead they return the result of their operation. Após a execução de uma função de dados, pode utilizar a função Erros função para obter os detalhes de quaisquer erros.After a data function executes, you can use the Errors function to obtain the details of any errors. Pode verificar a existência de erros com a função [IsEmpty] na fórmula de IsEmpty (Erros (…)) .You can check for the existence of errors with the [IsEmpty] function in the formula IsEmpty( Errors ( ... ) ).

Pode evitar alguns erros antes de ocorrerem se utilizar as funções Validar e DataSourceInfo.You can avoid some errors before they happen by using the Validate and DataSourceInfo functions. Consulte Trabalhar com as origens de dados para obter mais sugestões sobre como trabalhar e evitar erros.See working with data sources for more suggestions on how to work with and avoid errors.

DescriçãoDescription

A função Erros mostra uma tabela de erros que contém as seguintes colunas:The Errors function returns a table of errors that contains the following columns:

  • Registo.Record. O registo na origem de dados que tinha o erro.The record in the data source that had the error. Se o erro ocorreu durante a criação de um registo, esta coluna volta a aparecer a em branco.If the error occurred during the creation of a record, this column will be blank.
  • Coluna.Column. A coluna que causou o erro, se o erro pode ser atribuído a uma única coluna.The column that caused the error, if the error can be attributed to a single column. Se não for o caso, esta aparece em branco.If not, this will be blank.
  • Mensagem.Message. Descrição do erro.A description of the error. Esta cadeia de erro pode ser apresentada para o utilizador final.This error string can be displayed for the end user. 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.Be aware that this message may be generated by the data source and could be long and contain raw column names that may not have any meaning to the user.
  • Erro.Error. Um código de erro que pode ser utilizado em fórmulas para ajudar a resolver o erro:An error code that can be used in formulas to help resolve the error:
ErrorKindErrorKind DescriçãoDescription
ErrorKind.ConflictErrorKind.Conflict Foi efetuada outra alteração no mesmo registo, resultando num conflito de alteração.Another change was made to the same record, resulting in a change conflict. Utilize a função Atualizar para recarregar o registo e tente efetuar de novo a alteração.Use the Refresh function to reload the record and try the change again.
ErrorKind.ConstraintViolationErrorKind.ConstraintViolation Uma ou mais restrições foram violadas.One or more constraints have been violated.
ErrorKind.CreatePermissionErrorKind.CreatePermission Foi efetuada uma tentativa de criar um registo e o utilizador atual não tem permissão para criar registos.An attempt was made to create a record, and the current user doesn't have permission to create records.
ErrorKind.DeletePermissionErrorKind.DeletePermission Foi efetuada uma tentativa de eliminar um registo e o utilizador atual não tem permissão para eliminar registos.An attempt was made to delete a record, and the current user doesn't have permission to delete records.
ErrorKind.EditPermissionErrorKind.EditPermission Foi efetuada uma tentativa de editar um registo e o utilizador atual não tem permissão para editar registos.An attempt was made to edit a record, and the current user doesn't have permission to edit records.
ErrorKind.GeneratedValueErrorKind.GeneratedValue Foi efetuada uma tentativa de alterar uma coluna que a origem de dados gera automaticamente.An attempt was made to change a column that the data source generates automatically.
ErrorKind.MissingRequiredErrorKind.MissingRequired O valor de uma coluna necessária está em falta no registo.The value for a required column is missing from the record.
ErrorKind.NoneErrorKind.None Não há nenhum erro.There is no error.
ErrorKind.NotFoundErrorKind.NotFound Foi efetuada uma tentativa para editar ou eliminar um registo, mas não foi possível localizar o registo.An attempt was made to edit or delete a record, but the record couldn't be found. Outro utilizador pode ter alterado o registo.Another user may have changed the record.
ErrorKind.ReadOnlyValueErrorKind.ReadOnlyValue Foi efetuada uma tentativa para alterar uma coluna apenas de leitura.An attempt was made to change a column that's read only.
ErrorKind.SyncErrorKind.Sync Foi comunicado um erro pela origem de dados.An error was reported by the data source. Verifique a coluna Mensagem para obter mais informações.Check the Message column for more information.
ErrorKind.UnknownErrorKind.Unknown Ocorreu um erro, mas de um tipo desconhecido.There was an error, but of an unknown kind.
ErrorKind.ValidationErrorKind.Validation Foi detetado um problema de validação geral, que não foi possível ajustar um dos outros tipos.There was a general validation issue detected, that did not fit one of the other kinds.

Se fornecer o argumento Registo para a função, podem ser apresentados erros para toda a origem de dados ou para apenas uma linha selecionada.Errors can be returned for the entire data source, or for only a selected row by providing the Record argument to the function.

Patch ou outra função de dados pode devolver um valor em branco se, por exemplo, não foi possível criar um registo.Patch or another data function may return a blank value if, for example, a record couldn't be created. Pode colocar em branco em Erros, sendo apresentadas as informações de erro adequadas nestes casos.You can pass blank to Errors, and it will return appropriate error information in these cases. A utilização subsequente das funções do dados na mesma origem de dados irá eliminar estas informações de erro.Subsequent use of data functions on the same data source will clear this error information.

Se houver erros, a tabela apresentada por Errors irá ficar em branco e pode ser testada com a função IsEmpty.If there are no errors, the table that Errors returns will be empty and can be tested with the IsEmpty function.

SintaxeSyntax

Erros( DataSource [, Record ] )Errors( DataSource [, Record ] )

  • DataSource – Necessário.DataSource – Required. A origem de dados para a qual pretende devolver erros.The data source for which you want to return errors.
  • Registo – Opcional.Record – Optional. O registo específico para o qual pretende devolver erros.A specific record for which you want to return errors. Se não especificar este argumento, a função devolve erros para toda a origem de dados.If you don't specify this argument, the function returns errors for the entire data source.

ExemplosExamples

Passo a passoStep by Step

Neste exemplo, vamos trabalhar com a origem de dados IceCream:For this example, we'll be working with the IceCream data source:

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.Through the app, a user loads the Chocolate record into a data-entry form and then changes the value of Quantity to 90. O registo a trabalhar é colocado na variável de contexto EditRecord:The record to be worked with is placed in the context variable EditRecord:

  • UpdateContext( { EditRecord: First( Filter( IceCream, Sabor = "Chocolate" ) ) } )UpdateContext( { EditRecord: First( Filter( IceCream, Flavor = "Chocolate" ) ) } )

Para fazer esta alteração da origem de dados, é utilizada a função Patch:To make this change in the data source, the Patch function is used:

  • Patch( IceCream, EditRecord, Gallery.Updates )Patch( IceCream, EditRecord, Gallery.Updates )

em que Gallery.Updates avalia como { Quantity: 90 }, uma vez que apenas a propriedade Quantidade foi modificada.where Gallery.Updates evaluates to { Quantity: 90 }, since only the Quantity property has been modified.

Infelizmente, imediatamente antes da função Patch ter sido invocada, outra pessoa modificou a quantidade de Chocolate para 80.Unfortunately, just before the Patch function was invoked, somebody else modifies the Quantity for Chocolate to 80. O PowerApps vai detetar isto e não permite a alteração do conflito.PowerApps will detect this and not allow the conflicting change to occur. Pode verificar esta situação com a fórmula:You can check for this situation with the formula:

  • IsEmpty( Errors( IceCream, EditRecord ) )IsEmpty( Errors( IceCream, EditRecord ) )

que devolve falso, porque a função Erros devolveu a tabela seguinte:which returns false, because the Errors function returned the following table:

RegistoRecord ColunaColumn MensagemMessage ErroError
{Versão: "Chocolate", quantidade: 100}{ Flavor: "Chocolate", Quantity: 100 } em brancoblank "Outro utilizador modificou o registo que está a tentar modificar."Another user has modified the record that you're trying to modify. Carregue de novo o registo e tente novamente."Please reload the record and try again." ErrorKind.ConflictErrorKind.Conflict

É possível colocar uma etiqueta no formulário para mostrar este erro ao utilizador.You can place a label on the form to show this error to the user.

  • Para mostrar o erro, defina a propriedade Texto da etiqueta para esta fórmula:To show the error, set the label's Text property to this formula:
    Label.Text = First(Errors( IceCream, EditRecord )).MessageLabel.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.You can also add a Reload button on the form, so that the user can efficiently resolve the conflict.

  • Para mostrar o botão apenas quando o conflito tiver ocorrido, defina a propriedade Visível do botão para esta fórmula:To show the button only when a conflict has occurred, set the button's Visible property to this formula:
    !IsEmpty( Lookup( Errors( IceCream, EditRecord ), Error = ErrorKind.Conflict ) )!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:To revert the change which the user selects the button, set its OnSelect property to this formula:
    ReloadButton.OnSelect = Revert( IceCream, EditRecord )ReloadButton.OnSelect = Revert( IceCream, EditRecord )