Cómo: Validar datos
Puede aplicar reglas de validación a una entidad o tabla para asegurarse de que se escriben datos con formato correcto en el origen de datos.Una regla de validación es una condición o una restricción que deben cumplir los datos de la aplicación.Puede agregar una o más reglas de validación a una entidad o tabla en LightSwitch.Si un usuario agrega o cambia datos y esos datos no cumplen las reglas de validación, LightSwitch muestra un error.Antes de que un usuario pueda confirmar los datos, debe solucionarse el error de validación.
La siguiente ilustración muestra un mensaje de error de validación.
LightSwitch incluye varias reglas de validación integradas.Puede configurar estas reglas y aplicarlas a una entidad o una tabla sin escribir ningún código.También puede usar código para definir reglas de validación personalizadas.
Este tema contiene las siguientes secciones:
Aplicar reglas predefinidas de validación a un campo
Aplicar reglas de validación personalizada a un campo
Aplicar reglas de validación personalizada a datos en una pantalla
Aplicar reglas de validación que se ejecutan cuando se guardan los datos
Dispone de una demostración en vídeo relacionada en How Do I: Write business rules for validation and calculated fields in a LightSwitch Application?.
Aplicar reglas predefinidas de validación a un campo
LightSwitch incluye varias reglas de validación integradas que puede utilizar sin necesidad de escribir ningún código personalizado.Puede aplicar estas reglas a los campos de datos individuales o a cualquier tipo de actualización que los usuarios realizan en los datos de una pantalla.
Para aplicar una regla de validación predefinida a un campo
En Explorador de soluciones, haga doble clic en la entidad o tabla para la que desee aplicar las reglas de validación.
Se abre la tabla o entidad en el Diseñador de Dataset.
En el Diseñador de Datos, seleccione el campo que desea validar.
En la ventana Propiedades, en la sección Validación, establezca el valor de cualquiera de las propiedades.
Para obtener más información acerca de las propiedades de validación, vea Referencia: Propiedades del Diseñador de datos.
Aplicar reglas de validación personalizada a un campo
Puede definir reglas de validación personalizadas escribiendo código.Puede especificar cuando LightSwitch exige estas reglas de validación.Por ejemplo, puede especificar que una regla de validación en un campo se aplique inmediatamente después de que un usuario escribe un valor.O bien puede especificar que una entidad o tabla únicamente se evalúe cuando todos sus campos contengan un valor.Este modelo tiene sentido cuando la validez de un valor en un campo se basa en un valor válido en otro campo en la misma entidad o tabla.
Para aplicar una regla de validación personalizada a un campo
En Explorador de soluciones, haga doble clic en la entidad o tabla para la que desee aplicar reglas de validación.
Se abre la tabla o entidad en el Diseñador de Dataset.
En el Diseñador de Datos, seleccione el campo que desea validar.
En la ventana Propiedades, haga clic en Validación personalizada.
El Editor de código se abre y genera un método denominado FieldName[_Validate].
Agregue el código de validación al método FieldName[_Validate].
Para aplicar una regla de validación inmediatamente después de que un usuario proporcione un valor del campo, llame al método AddPropertyError del parámetro results.
El siguiente ejemplo muestra un mensaje de la validación después de que un usuario establece el campo ShippedDate de la entidad Order en una fecha que es posterior a la de hoy.
Private Sub ShippedDate_Validate(results As EntityValidationResultsBuilder) If Me.ShippedDate > DateTime.Today Then results.AddPropertyError _ ("Shipped date cannot be later than today") End If End Sub
partial void ShippedDate_Validate(EntityValidationResultsBuilder results) { if (this.ShippedDate > DateTime.Today) { results.AddPropertyError("Shipped date cannot be later than today"); } }
Observe que puede resaltar otras propiedades para validación.Por ejemplo, puede escribir código de validación que se ejecute cuando un usuario cambia el código postal de un cliente.Si pasa la propiedad City como un parámetro al método AddPropertyError, LightSwitch resaltarán el campo City.El texto del mensaje del error de validación podría preguntar al usuario que escriba el nombre de una ciudad que coincida con el nuevo código postal.
[!NOTA]
De forma predeterminada, las actualizaciones no se puede confirmar con un origen de datos hasta que se ajusten a las reglas de validación.Si desea permitir que los usuarios confirmen las actualizaciones no evaluadas, utilice el método AddPropertyResult en lugar del método AddPropertyError.Para el segundo parámetro del método AddPropertyResult, pase ValidationSeverity.Informational o ValidationSeverity.Warning.
Para aplicar una regla de validación en una entidad o una tabla, por ejemplo, cuando un usuario modifica un valor en un campo que se basa en un valor válido en otro campo, llame al método AddEntityError del parámetro results.En el siguiente ejemplo se compara el valor del campo RequiredDate con el valor del campo OrderDate.Si la fecha del pedido es posterior a la fecha requerida, este código muestra un mensaje de error de validación.
Private Sub RequiredDate_Validate(results As EntityValidationResultsBuilder) If Me.RequiredDate < Me.OrderDate Then results.AddEntityError _ ("Required data cannot be earlier than the order date") End If End Sub
partial void RequiredDate_Validate(EntityValidationResultsBuilder results) { if (this.RequiredDate < this.OrderDate) { results.AddEntityError ("Required data cannot be earlier than the order date"); } }
Aplicar reglas de validación personalizada a datos en una pantalla
Puede especificar reglas de validación personalizadas que se aplican a una pantalla completa agregando el código personalizado al método <nombre de entidad o tabla>[_Validate] en el archivo de código de pantalla.El código personalizado se ejecuta cuando un usuario modifica cualquier dato en la pantalla (por ejemplo, agrega o elimina datos).Estas reglas se ejecutan antes de guardar los datos.
Para aplicar una regla de validación personalizada a datos en una pantalla
En Explorador de soluciones, haga doble clic en la pantalla para la que desee especificar una regla de validación.
En la parte superior del Diseñador de pantallas, haga clic en Escribir código.
Se abrirá el Editor de código.
En el menú Declaraciones, seleccione <nombre de entidad o tabla>[_Validate].
Un bloque de código con nombre <nombre de entidad o tabla>[_Validate] aparece en el archivo de código.
Agregue el código de validación personalizado al método < nombre de entidad o tabla >[_Validate].
Para aplicar una regla de validación después de que un usuario agregue, elimine o actualice una fila de datos, llame al método AddScreenError del parámetro results.
En el ejemplo siguiente, se evita la eliminación de los clientes que se encuentran en Estados Unidos.
Private Sub Customers_Validate _ (results As Microsoft.LightSwitch.Framework.Client.ScreenValidationResultsBuilder) If Me.DataWorkspace.NorthwindData.Details.HasChanges Then Dim changeSet As EntityChangeSet = _ Me.DataWorkspace.NorthwindData.Details.GetChanges() Dim entity As IEntityObject For Each entity In changeSet.DeletedEntities.OfType(Of Customer)() Dim cust As Customer = CType(entity, Customer) If cust.Country = "USA" Then entity.Details.DiscardChanges() results.AddScreenResult("Unable to remove this customer." & _ "Cannot delete customers that are located in the USA.", _ ValidationSeverity.Informational) End If Next End If End Sub
partial void Customers_Validate(ScreenValidationResultsBuilder results) { if (this.DataWorkspace.NorthwindData.Details.HasChanges) { EntityChangeSet changeSet = this.DataWorkspace.NorthwindData.Details.GetChanges(); foreach (IEntityObject entity in changeSet.DeletedEntities.OfType<Customer>()) { Customer cust = (Customer)entity; if (cust.Country == "USA") { entity.Details.DiscardChanges(); results.AddScreenResult("Unable to remove this customer. " + "Cannot delete customers that are located in the USA.", ValidationSeverity.Informational); } } } }
[!NOTA]
De forma predeterminada, las actualizaciones no se puede confirmar con un origen de datos hasta que se ajusten a las reglas de validación.Si desea permitir que los usuarios confirmen las actualizaciones no evaluadas, utilice el método AddScreenResult en lugar del método AddScreenError.Para el segundo parámetro del método AddScreenResult, pase ValidationSeverity.Informational o ValidationSeverity.Warning.
Aplicar reglas de validación que se ejecutan cuando se guardan los datos
Puede aplicar reglas de validación personalizadas cuando un usuario guarda datos o cuando su código llama al método SaveChanges de un origen de datos.Este tipo de validación se ejecuta exclusivamente a nivel de servidor.
Para aplicar reglas de validación que se ejecutan cuando se guardan los datos
En Explorador de soluciones, haga doble clic en la entidad o tabla para la que desee aplicar reglas de validación.
En la barra de comandos del Diseñador de datos, haga clic en la flecha que aparece junto al botón Escribir código y, a continuación, haga clic en el nombre de entidad o tabla[_Validate].
El Editor de código se abre y genera un método con nombre nombre de entidad o tabla[_Validate].
Agregue el código de validación personalizado al método nombre de entidad o tabla[_Validate].
Llame al método AddEntityError del parámetro results.
El siguiente ejemplo comprueba el estado del crédito de un cliente cuando un usuario guarda un pedido de ventas.Si el departamento de financiación no ha aprobado todavía el crédito del cliente, se produce ValidationException.
Private Sub Orders_Validate _ (entity As Order, results As _ Microsoft.LightSwitch.EntitySetValidationResultsBuilder) If Not CustomerCreditApproval(entity.Customer) Then results.AddEntityError("Customer Credit has not yet been approved") End If End Sub Private Function CustomerCreditApproval(ByVal entity As Customer) As Boolean 'Some custom code to check the customer’s credit status. Return True End Function
partial void Orders_Validate (Order entity, EntitySetValidationResultsBuilder results) { if (!CustomerCreditApproval(entity.Customer)) { results.AddEntityError ("Customer Credit has not yet been approved"); } } private bool CustomerCreditApproval(Customer entity) { //Some custom code to check the customer's credit status. return true; }
[!NOTA]
De forma predeterminada, cuando se produce la excepción, se muestra un mensaje de error y los datos permanecen en el conjunto de cambios actual.Si desea cambiar este comportamiento, se puede controlar ValidationException en el código.
Vea también
Tareas
Cómo: Controlar eventos de datos
Conceptos
Realizar tareas relacionadas con datos usando código
Trabajar con objetos relacionados con datos en el código
Escribir código en LightSwitch