Condividi tramite


Procedura: convalidare dati in un'applicazione LightSwitch

Applicando le regole di convalida a un'entità o a una tabella, è possibile assicurarsi che nell'origine dati vengano scritti dati formattati correttamente per un'applicazione Visual Studio LightSwitch. Una regola di convalida è una condizione o un vincolo al quale devono conformarsi i dati dell'applicazione. Se è possibile aggiungere una o più regole di convalida a un'entità o una tabella, viene visualizzato un errore se un utente aggiunge o modifica i dati in modo non conforme. Prima che un utente possa eseguire il commit dei dati, è necessario correggere l'errore di convalida.

Nella figura seguente viene mostrato un messaggio di errore di convalida.

Messaggio di errore di convalida

In LightSwitch sono incluse diverse regole di convalida incorporate. È possibile configurare queste regole e applicarle a un'entità o a una tabella senza scrivere alcun codice. Inoltre, è possibile usare il codice per definire le regole di convalida personalizzate.

Di seguito sono elencate le diverse sezioni di questo argomento:

  • Applicazione delle regole di convalida predefinite a un campo

  • Applicazione delle regole di convalida personalizzate a un campo

  • Applicazione delle regole di convalida personalizzate ai dati in una schermata

  • Applicazione delle regole di convalida in esecuzione quando vengono salvati i dati

Collegamento a video Per una dimostrazione video correlata, vedere la procedura relativa alla scrittura di regole business per la convalida e i campi calcolati in un'applicazione LightSwitch.

Applicazione delle regole di convalida predefinite a un campo

In LightSwitch sono incluse diverse regole di convalida incorporate che è possibile usare senza scrivere codice personalizzato. È possibile applicare queste regole ai singoli campi di dati o a qualsiasi tipo di aggiornamento ai dati di una schermata eseguito dagli utenti.

Per applicare una regola di convalida predefinita a un campo

  1. In Esplora soluzioni aprire il menu di scelta rapida per l'entità o la tabella alla quale si vuole applicare le regole di convalida, quindi scegliere Apri.

    L'entità o la tabella verrà aperta in Data Designer.

  2. In Data Designer scegliere il campo da convalidare.

    Nota

    Per le applicazioni che sono state aggiornate a Visual Studio 2012 Update 2, è anche possibile scegliere il livello in cui si vuole eseguire la convalida dai pulsanti della barra Prospettiva.

  3. Nella sezione Convalida della finestra Proprietà impostare il valore di una delle proprietà.

    Per informazioni sulle proprietà di convalida, vedere Riferimento: proprietà della finestra di progettazione dei dati.

Applicazione delle regole di convalida personalizzate a un campo

È possibile definire regole di convalida personalizzate scrivendo codice, nonché specificare quando applicarle tramite LightSwitch. Ad esempio, è possibile specificare che una regola di convalida venga applicata immediatamente dopo l'immissione di un valore in un campo da parte di un utente. In alternativa, è possibile specificare che un'entità o una tabella venga valutata solo dopo l'inclusione di un valore in tutti i relativi campi. Questo modello ha senso quando la validità di un valore in un campo si basa su un valore valido in un altro campo nella stessa entità o tabella.

Per applicare una regola di convalida personalizzata a un campo

  1. In Esplora soluzioni aprire il menu di scelta rapida per l'entità o la tabella alla quale si vuole applicare le regole di convalida, quindi scegliere Apri.

    L'entità o la tabella verrà aperta in Data Designer.

  2. In Data Designer scegliere il campo da convalidare.

  3. Nella finestra Proprietà scegliere il collegamento Convalida personalizzata.

    Verrà aperto l'Editor di codice e verrà generato un metodo denominato FieldName_Validate.

  4. Aggiungere codice di convalida al metodo FieldName_Validate.

    Per applicare una regola di convalida subito dopo la specifica di un valore di campo da parte di un utente, chiamare il metodo AddPropertyError del parametro results.

    Nell'esempio seguente viene visualizzato un messaggio di convalida dopo che un utente ha impostato il campo ShippedDate dell'entità Order su una data che è successiva a oggi.

    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");
        }
    
    }
    

    Si noti che è possibile evidenziare altre proprietà per la convalida. Ad esempio, è possibile scrivere il codice di convalida in esecuzione quando un utente modifica il codice postale di un cliente. Se si passa la proprietà City come parametro al metodo AddPropertyError, il campo City verrà evidenziato tramite LightSwitch. Il testo del messaggio di errore potrebbe richiedere all'utente di digitare il nome di una città che corrisponda al nuovo codice postale.

    Nota

    Per impostazione predefinita, non è possibile eseguire il commit degli aggiornamenti in un'origine dati fino a quando non saranno conformi alle regole di convalida.Se si vuole abilitare gli utenti a eseguire il commit degli aggiornamenti non valutati, usare il metodo AddPropertyResult anziché il metodo AddPropertyError.Per il secondo parametro del metodo AddPropertyResult, passare ValidationSeverity.Informational o ValidationSeverity.Warning.

    Per applicare una regola di convalida su un'entità o una tabella, ad esempio, quando un utente modifica un valore in un campo che si basa su un valore valido in un altro campo, chiamare il metodo AddEntityError del parametro results. Nell'esempio seguente viene confrontato il valore del campo RequiredDate con il valore del campo OrderDate. Se la data dell'ordine è successiva alla data richiesta, tramite questo codice viene visualizzato un messaggio di errore di convalida.

    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"); 
        }
    
    }
    

Applicazione delle regole di convalida personalizzate ai dati in una schermata

È possibile specificare regole di convalida personalizzate che si applicano a una schermata intera aggiungendo codice personalizzato al metodo EntityOrTableName_Validate nel file di codice della schermata. Il codice personalizzato viene eseguito quando un utente modifica i dati nella schermata (ad esempio, aggiunge o elimina i dati). Queste regole vengono eseguite prima che possano essere salvati i dati.

Per applicare una regola di convalida personalizzata ai dati in una schermata

  1. In Esplora soluzioni aprire il menu di scelta rapida per la schermata per la quale si vuole specificare una regola di convalida, quindi scegliere Apri.

  2. Nella parte superiore di Progettazione schermata scegliere Scrivi codice.

    Verrà aperto l'Editor di codice.

  3. Nell'elenco Dichiarazioni scegliere EntityOrTableNameProperty _Validate.

    Verrà visualizzato un blocco di codice denominato EntityOrTableNameProperty_Validate nel file di codice.

  4. Aggiungere il codice di convalida personalizzato al metodo EntityOrTableNameProperty_Validate.

    Per applicare una regola di convalida dopo che un utente aggiunge, elimina o aggiorna una riga di dati, chiamare il metodo AddScreenError del parametro results.

    Nell'esempio seguente viene impedita l'eliminazione dei clienti che si trovano negli Stati Uniti.

    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

    Per impostazione predefinita, non è possibile eseguire il commit degli aggiornamenti in un'origine dati fino a quando non saranno conformi alle regole di convalida.Se si vuole abilitare gli utenti a eseguire il commit degli aggiornamenti non valutati, usare il metodo AddScreenResult anziché il metodo AddScreenError.Per il secondo parametro del metodo AddScreenResult, passare ValidationSeverity.Informational o ValidationSeverity.Warning.

Applicazione delle regole di convalida in esecuzione quando vengono salvati i dati

È possibile applicare le regole di convalida personalizzate quando un utente salva i dati o quando viene chiamato il metodo SaveChanges di un'origine dati tramite il codice. Questo tipo di convalida viene eseguita esclusivamente nel livello del server.

Per applicare le regole di convalida in esecuzione quando vengono salvati i dati

  1. In Esplora soluzioni aprire il menu di scelta rapida per l'entità o la tabella alla quale si vuole applicare le regole di convalida, quindi scegliere Apri.

    Nota

    Per le applicazioni che sono state aggiornate a Visual Studio 2012 Update 2, nella barra Prospettiva scegliere la scheda Server.

  2. Nell'elenco Scrivi codice nella barra dei comandi di Data Designer scegliere EntityOrTableName_Validate.

    Verrà aperto l'Editor di codice e verrà generato un metodo denominato EntityOrTableName_Validate.

  3. Aggiungere il codice di convalida personalizzato al metodo EntityOrTableName_Validate.

    Chiamare il metodo AddEntityError del parametro results.

    Nell'esempio seguente viene controllato lo stato del credito di un cliente quando un utente salva un ordine di vendita. Se il credito del cliente non è ancora stato approvato dal reparto finanziario, viene generata un'eccezione 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

    Per impostazione predefinita, quando viene generata l'eccezione, viene visualizzato un messaggio di errore e i dati rimangono nell'insieme di modifiche corrente.Se si vuole modificare questo comportamento, è possibile gestire l'oggetto ValidationException nel codice.

Vedere anche

Attività

Procedura: gestire gli eventi di dati

Procedura: definire campi di dati in un database LightSwitch

Concetti

Esecuzione delle attività relative ai dati tramite codice

Utilizzo degli oggetti correlati ai dati nel codice

Altre risorse

Panoramica della convalida dei dati nelle applicazioni LightSwitch

Dati: informazioni sottostanti l'applicazione