Como validar dados em um aplicativo LightSwitch
Ao aplicar regras de validação a uma entidade ou tabela, você pode garantir que os dados formatados corretamente sejam gravados na fonte de dados de um aplicativo do Visual Studio LightSwitch. Uma regra de validação é uma condição ou uma restrição que os dados em seu aplicativo devem respeitar. Se você puder adicionar uma ou mais regras de validação a uma entidade ou tabela, aparecerá um erro se um usuário adicionar ou alterar dados de maneira não compatível. Para que um usuário possa confirmar os dados, o erro de validação deve ser corrigido.
A ilustração a seguir mostra uma mensagem de erro de validação.
O LightSwitch inclui várias regras de validação internas. Você pode configurar essas regras e aplicá-las a uma entidade ou a uma tabela sem gravar nenhum código. Você também pode usar o código para definir regras de validação personalizadas.
Este tópico contém as seções a seguir:
Aplicando regras de validação predefinidas a um campo
Aplicando regras de validação personalizadas a um campo
Aplicando regras de validação personalizadas a dados em uma tela
Aplicando regras de validação executadas quando os dados são salvos
Para obter uma demonstração em vídeo relacionada, consulte How Do I: Write business rules for validation and calculated fields in a LightSwitch Application? (Como gravar regras de negócios para validação e campos calculados em um aplicativo LightSwitch?).
Aplicando regras de validação predefinidas a um campo
O LightSwitch inclui várias regras de validação internas que você pode usar sem gravar nenhum código personalizado. Você pode aplicar essas regras a campos de dados individuais ou a qualquer tipo de atualização que os usuários façam nos dados em uma tela.
Para aplicar uma regra de validação predefinida a um campo
No Gerenciador de Soluções, abra o menu de atalho da entidade ou da tabela a que você deseja aplicar regras de validação e escolha Abrir.
A entidade ou a tabela é aberta no Designer de Dados.
No Designer de Dados, escolha o campo que você deseja validar.
Dica
Para aplicativos que tenham sido atualizados para o Atualização 2 do Visual Studio 2012, você também pode escolher a camada onde deseja que a validação ocorra nos botões da barra Perspectiva.
Na janela Propriedades, na seção Validação, defina o valor de qualquer uma das propriedades.
Para obter informações sobre as propriedades de validação, consulte Referência: propriedades do Designer de Dados.
Aplicando regras de validação personalizadas a um campo
É possível definir regras de validação personalizadas gravando o código e especificar quando o LightSwitch as impõe. Por exemplo, você pode especificar que uma regra é imposta logo depois do usuário inserir um valor em um campo. Como alternativa, você pode especificar que uma entidade ou uma tabela só será avaliada depois que todos os seus campos contiverem um valor. Esse modelo faz sentido quando a validade de um valor em um campo se baseia em um valor válido em outro campo na mesma entidade ou tabela.
Para aplicar uma regra de validação personalizada a um campo
No Gerenciador de Soluções, abra o menu de atalho da entidade ou da tabela a que você deseja aplicar regras de validação e escolha Abrir.
A entidade ou a tabela é aberta no Designer de Dados.
No Designer de Dados, escolha o campo que você deseja validar.
Na janela Propriedades, escolha o link Validação Personalizada.
O Editor de Códigos é aberto e gera um método chamado FieldName_Validate.
Adicione o código de validação ao método FieldName_Validate.
Para aplicar uma regra de validação logo depois de um usuário fornecer um valor de campo, chame o método AddPropertyError do parâmetro results.
O exemplo a seguir exibe uma mensagem de validação depois que um usuário define o campo ShippedDate da entidade Order como uma data posterior a hoje.
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 você pode realçar outras propriedades para validação. Por exemplo, você pode gravar o código de validação executado quando um usuário altera o CEP de um cliente. Se você passar a propriedade City como um parâmetro para o método AddPropertyError, o LightSwitch realçará o campo City. O texto do erro pode solicitar que o usuário digite o nome de uma cidade que corresponda ao novo CEP.
Dica
Por padrão, atualizações não podem ser confirmadas para uma fonte de dados enquanto não estiverem de acordo com as regras de validação.Se você quiser permitir que os usuários utilizem atualizações não avaliadas, use o método AddPropertyResult em vez do método AddPropertyError.Para o segundo parâmetro do método AddPropertyResult, passe ValidationSeverity.Informational ou ValidationSeverity.Warning.
Para impor uma regra de validação em uma entidade ou tabela, por exemplo, quando um usuário modifica um valor em um campo que depende de um valor válido em outro campo, chame o método AddEntityError do parâmetro results. O exemplo a seguir compara o valor do campo RequiredDate ao valor do campo OrderDate. Se a data do pedido for posterior à data exigida, esse código exibirá uma mensagem de erro de validação.
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"); } }
Aplicando regras de validação personalizadas a dados em uma tela
Você pode especificar regras de validação personalizadas que se aplicam a uma tela inteira adicionando o código personalizado ao método EntityOrTableName_Validate no arquivo de código da tela. Seu código personalizado é executado quando um usuário modifica (por exemplo, adiciona ou exclui) qualquer dado na tela. Essas regras são executadas antes dos dados serem salvos.
Para aplicar uma regra de validação personalizada a dados em uma tela
No Gerenciador de Soluções, abra o menu de atalho da tela para a qual você deseja especificar uma regra de validação e escolha Abrir.
Na parte superior do Designer de Tela, escolha o botão Gravar Código.
O Editor de Códigos é aberto.
Na lista Declarações, escolha EntityOrTableNameProperty _Validate.
Um bloco de código chamado EntityOrTableNameProperty_Validate aparece no arquivo de código.
Adicione código de validação personalizado ao método EntityOrTableNameProperty_Validate.
Para aplicar uma regra de validação após um usuário adicionar, excluir ou atualizar uma linha de dados, chame o método AddScreenError do parâmetro results.
O exemplo a seguir evita a exclusão de clientes localizados nos 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); } } } }
Dica
Por padrão, atualizações não podem ser confirmadas para uma fonte de dados enquanto não estiverem de acordo com as regras de validação.Se você quiser permitir que os usuários utilizem atualizações não avaliadas, use o método AddScreenResult em vez do método AddScreenError.Para o segundo parâmetro do método AddScreenResult, passe ValidationSeverity.Informational ou ValidationSeverity.Warning.
Aplicando regras de validação executadas quando os dados são salvos
Você pode aplicar regras de validação personalizada quando um usuário salva dados ou quando seu código chama o método SaveChanges de uma fonte de dados. Esse tipo de validação é executado exclusivamente na camada do servidor.
Para aplicar regras de validação executadas quando os dados são salvos
No Gerenciador de Soluções, abra o menu de atalho da entidade ou da tabela a que você deseja aplicar regras de validação e escolha Abrir.
Dica
Para aplicativos que foram atualizados para o Atualização 2 do Visual Studio 2012, na barra Perspectiva, escolha a guia Servidor.
Na barra de comandos do Designer de Dados, na lista Gravar Código, escolha EntityOrTableName_Validate.
O Editor de Códigos é aberto e gera um método chamado EntityOrTableName_Validate.
Adicione código de validação personalizado ao método EntityOrTableName_Validate.
Chame o método AddEntityError do parâmetro results.
O exemplo a seguir verifica o status de crédito de um cliente quando um usuário salva uma ordem de venda. Se o crédito do cliente não tiver sido aprovado pelo departamento de financiamento, um ValidationException será acionado.
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; }
Dica
Por padrão, quando a exceção é acionada, uma mensagem de erro é exibida e os dados permanecem no conjunto atual de alterações.Se quiser alterar esse comportamento, você poderá identificar o ValidationException no seu código.
Consulte também
Tarefas
Como definir campos de dados em um banco de dados LightSwitch
Conceitos
Executando tarefas relacionadas a dados usando código
Trabalhando objetos relacionados a dados em código