Función Errors

Se aplica a: Aplicaciones de lienzo Aplicaciones basadas en modelos

Proporciona información de error para los cambios anteriores en un origen de datos.

Información general

Pueden producirse errores cuando se cambia un registro de un origen de datos. Esto puede deberse a numerosas causas, como interrupciones de red, permisos inadecuados y conflictos de edición.

Las funciones que modifican el contenido de los orígenes de datos, como Patch, Collect, Remove, RemoveIf, Update, UpdateIf y SubmitForm informan de los errores de dos maneras:

  • Cada una de estas funciones devolverá un valor de error como resultado de la operación. Los errores se pueden detectar con IsError y se pueden reemplazar o suprimir con IfError y App.OnError, como de costumbre. Para obtener más información, consulte Control de errores.
  • Después de la operación, la función Errors también devuelve los errores de las operaciones anteriores. Esto puede ser útil para mostrar el mensaje de error en una pantalla de formulario sin necesidad de capturarlo en una variable de estado.

Puede evitar que se produzcan algunos errores mediante las funciones Validate y DataSourceInfo. En el tema relativo al trabajo con orígenes de datos, encontrará más sugerencias sobre cómo trabajar con los errores y evitarlos.

Descripción

La función Errors devuelve una tabla de errores que contiene las columnas siguientes:

  • Registro. Registro del origen de datos que contenía el error. Si el error se produjo durante la creación de un registro, esta columna será blank.
  • Columna. Columna que produjo el error, en caso de que el error pueda atribuirse a una sola columna. De lo contrario, será blank.
  • Mensaje. Descripción del error. Esta cadena de error se puede mostrar para el usuario final. Tenga en cuenta que este mensaje puede generarlo el origen de datos, por lo que podría ser largo y contener nombres de columna sin formato carentes de significado para el usuario.
  • Error. Código de error que se puede usar en las fórmulas para ayudar a resolver el error:
ErrorKind Descripción
ErrorKind.Conflict Se ha realizado otro cambio en el mismo registro, lo que produce un conflicto de cambios. Use la función Refresh para volver a cargar el registro e intente de nuevo el cambio.
ErrorKind.ConstraintViolation Se han infringido una o más restricciones.
ErrorKind.CreatePermission Se ha intentado crear un registro, pero el usuario actual no tiene permiso para crear registros.
ErrorKind.DeletePermission Se ha intentado eliminar un registro, pero el usuario actual no tiene permiso para eliminar registros.
ErrorKind.EditPermission Se ha intentado editar un registro, pero el usuario actual no tiene permiso para editar registros.
ErrorKind.GeneratedValue Se ha intentado cambiar una columna que el origen de datos genera automáticamente.
ErrorKind.MissingRequired El valor de una columna necesaria no está en el registro.
ErrorKind.None No hay ningún error.
ErrorKind.NotFound Se ha intentado editar o eliminar un registro, pero no se pudo encontrar. Es posible que otro usuario haya cambiado el registro.
ErrorKind.ReadOnlyValue Se ha intentado cambiar una columna que es de solo lectura.
ErrorKind.Sync El origen de datos ha notificado un error. Consulte la columna Mensaje para obtener más información.
ErrorKind.Unknown Se ha producido un error, pero es de tipo desconocido.
ErrorKind.Validation Se ha detectado un problema de validación general que no se corresponde con ninguno de los demás tipos.

Los errores pueden devolverse para el origen de datos completo o para una sola fila seleccionada si se proporciona el argumento Record a la función.

La función Patch u otras funciones de datos pueden devolver un valor blank si, por ejemplo, no se pudo crear un registro. Si pasa un valor blank a Errors, le devolverá información de error adecuada en estos casos. El uso posterior de funciones de datos en el mismo origen de datos borrará esta información de error.

Si no hay ningún error, la tabla que Errors devuelve estará vacía y se podrá probar con la función IsEmpty.

Sintaxis

Errors( DataSource [, Record ] )

  • DataSource: requerido. Origen de datos para el que quiere devolver errores.
  • Record: opcional. Registro específico para el que quiere devolver errores. Si no especifica este argumento, la función devuelve errores para todo el origen de datos.

Ejemplos

Paso a paso

En este ejemplo, vamos a trabajar con el origen de datos IceCream:

Helado.

A través de la aplicación, un usuario carga el registro Chocolate en un formulario de entrada de datos y cambia el valor de Quantity a 90. El registro con el que se va a trabajar se coloca en la variable de contextoEditRecord:

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

Para realizar este cambio en el origen de datos, se usa la función Patch:

  • Patch( IceCream, EditRecord, Gallery.Updates )

donde Gallery.Updates se evalúa como { Quantity: 90 }, ya que solo se ha modificado la propiedad Quantity.

Por desgracia, justo antes de que se invoque la función Patch, otra persona modifica la propiedad Quantity de Chocolate y la establece en 80. Power Apps lo detecta y no permite que se produzca el cambio en conflicto. Puede comprobar esta situación mediante la fórmula:

  • IsEmpty( Errors( IceCream, EditRecord ) )

que devuelve false, ya que la función Errors ha devuelto la tabla siguiente:

Registro Columna Mensaje Error
{ Flavor: "Chocolate", Quantity: 100 } blank "Otro usuario ha modificado el registro que está intentando modificar. Vuelva a cargar el registro e inténtelo de nuevo." ErrorKind.Conflict

Puede colocar una etiqueta en el formulario para mostrar este error al usuario.

  • Para mostrar el error, establezca la propiedad Text de la etiqueta en esta fórmula:
    Label.Text = First(Errors( IceCream, EditRecord )).Message

También puede agregar un botón Recargar en el formulario para que el usuario pueda resolver eficazmente el conflicto.

  • Para mostrar el botón solo cuando se haya producido un conflicto, establezca la propiedad Visible del botón en esta fórmula:
    !IsEmpty( Lookup( Errors( IceCream, EditRecord ), Error = ErrorKind.Conflict ) )
  • Para revertir el cambio cuando el usuario selecciona el botón, establezca su propiedad OnSelect en esta fórmula:
    ReloadButton.OnSelect = Revert( IceCream, EditRecord )