Gewusst wie: Überprüfen von Daten
Sie können Validierungsregeln auf eine Entität oder Tabelle anwenden, um sicherzustellen, dass ordnungsgemäß formatierte Daten in die Datenquelle geschrieben werden.Eine Validierungsregel ist eine Bedingung oder Einschränkung, die die Daten in der Anwendung erfüllen müssen.Sie können einer Entität oder Tabelle in LightSwitch eine oder mehrere Validierungsregeln hinzufügen.Wenn ein Benutzer Daten hinzufügt oder ändert und die Daten die Validierungsregeln nicht erfüllen, wird in LightSwitch ein Fehler angezeigt.Bevor der Benutzer einen Commit der Daten ausführen kann, muss der Validierungsfehler behoben werden.
Die folgende Abbildung zeigt eine Fehlermeldung für einen Validierungsfehler.
LightSwitch enthält mehrere integrierte Validierungsregeln.Sie können diese Regeln konfigurieren und auf eine Entität oder Tabelle anwenden, ohne dafür Code schreiben zu müssen.Sie können auch Code verwenden, um benutzerdefinierte Validierungsregeln zu definieren.
Dieses Thema enthält folgende Abschnitte:
Anwenden von vordefinierten Validierungsregeln auf ein Feld
Anwenden von benutzerdefinierten Validierungsregeln auf ein Feld
Anwenden von benutzerdefinierten Validierungsregeln auf Daten in einem Bildschirm
Anwenden von Validierungsregeln, die ausgeführt werden, wenn Daten gespeichert werden
Ein entsprechendes Demovideo finden Sie unter Gewusst wie: Schreiben von Geschäftsregeln für die Validierung und berechnete Felder in einer LightSwitch-Anwendung(möglicherweise in englischer Sprache).
Anwenden von vordefinierten Validierungsregeln auf ein Feld
LightSwitch enthält mehrere integrierte Validierungsregeln, die Sie verwenden können, ohne benutzerdefinierten Code zu schreiben.Sie können diese Regeln auf einzelne Datenfelder oder eine beliebige Art einer Aktualisierung anwenden, die Benutzer an Daten in einem Bildschirm vornehmen.
So wenden Sie eine vordefinierte Validierungsregel auf ein Feld an
Doppelklicken Sie im Projektmappen-Explorer auf die Entität oder Tabelle, auf die Sie Validierungsregeln anwenden möchten.
Die Entität bzw. die Tabelle wird im Daten-Designer geöffnet.
Wählen Sie im Daten-Designer das Feld aus, das Sie überprüfen möchten.
Legen Sie im Eigenschaftenfenster im Abschnitt Validierung den Wert beliebiger Eigenschaften fest.
Informationen zu Validierungseigenschaften finden Sie unter Erläuterung: Daten-Designer-Eigenschaften.
Anwenden von benutzerdefinierten Validierungsregeln auf ein Feld
Sie können benutzerdefinierte Validierungsregeln definieren, indem Sie Code schreiben.Sie können angeben, wann diese Validierungsregeln von LightSwitch erzwungen werden sollen.Sie können z. B. angeben, dass eine Validierungsregel in einem Feld sofort erzwungen wird, nachdem ein Benutzer einen Wert eingegeben hat.Alternativ können Sie angeben, dass eine Entität oder eine Tabelle nur ausgewertet wird, nachdem alle ihre Felder einen Wert enthalten.Dieses Modell ist sinnvoll, wenn die Gültigkeit eines Werts in einem Feld von einem gültigen Wert in einem anderen Feld in der gleichen Entität oder Tabelle abhängt.
So wenden Sie eine benutzerdefinierte Validierungsregel auf ein Feld an
Doppelklicken Sie im Projektmappen-Explorer auf die Entität oder Tabelle, auf die Sie Validierungsregeln anwenden möchten.
Die Entität bzw. die Tabelle wird im Daten-Designer geöffnet.
Wählen Sie im Daten-Designer das Feld aus, das Sie überprüfen möchten.
Klicken Sie im Eigenschaftenfenster auf Benutzerdefinierte Validierung.
Der Code-Editor wird geöffnet und generiert die Feldname[_Validate]-Methode.
Fügen Sie der Feldname[_Validate]-Methode Validierungscode hinzu.
Um eine Validierungsregel sofort zu erzwingen, nachdem ein Benutzer einen Feldwert angibt, rufen Sie die AddPropertyError-Methode des Parameters results auf.
Im folgenden Beispiel wird eine Validierungsmeldung angezeigt, nachdem ein Benutzer das Feld ShippedDate der Order-Entität auf ein Datum festgelegt hat, das nach dem Datum von "Heute" liegt.
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"); } }
Beachten Sie, dass Sie andere Eigenschaften zur Validierung hervorheben können.Sie können z. B. Validierungscode schreiben, der ausgeführt wird, wenn ein Benutzer die Postleitzahl eines Kunden ändert.Wenn Sie die City-Eigenschaft als Parameter an die AddPropertyError-Methode übergeben, hebt LightSwitch das Feld City hervor.Im Text der Validierungsfehlermeldung kann der Benutzer z. B. aufgefordert werden, den Namen eines Orts einzugeben, der der neuen Postleitzahl entspricht.
Hinweis Updates können standardmäßig erst an eine Datenquelle übergeben werden, wenn sie den Validierungsregeln entsprechen.Wenn Sie es Benutzern ermöglichen möchten, einen Commit für nicht ausgewertete Updates auszuführen, verwenden Sie anstelle der AddPropertyError-Methode die AddPropertyResult-Methode.Für den zweiten Parameter der AddPropertyResult-Methode übergeben Sie entweder ValidationSeverity.Informational oder ValidationSeverity.Warning.
Um eine Validierungsregel für eine Entität oder Tabelle zu erzwingen, z. B. wenn ein Benutzer einen Wert in einem Feld ändert, das von einem gültigen Wert in einem anderen Feld abhängt, rufen Sie die AddEntityError-Methode des Parameters results auf.Im folgenden Beispiel wird der Wert des Felds RequiredDate mit dem Wert des Felds OrderDate verglichen.Wenn das Bestelldatum nach dem erforderlichen Datum liegt, wird mit diesem Code eine Validierungsfehlermeldung angezeigt.
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"); } }
Anwenden von benutzerdefinierten Validierungsregeln auf Daten in einem Bildschirm
Sie können benutzerdefinierte Validierungsregeln angeben, die für einen ganzen Bildschirm gelten, indem Sie der <Entitäts- oder Tabellenname>[_Validate]-Methode in der Bildschirmcodedatei benutzerdefinierten Code hinzufügen.Der benutzerdefinierte Code wird ausgeführt, wenn ein Benutzer im Bildschirm beliebige Daten ändert (z. B. Daten hinzufügt oder löscht).Diese Regeln werden ausgeführt, bevor die Daten gespeichert werden können.
So wenden Sie eine benutzerdefinierte Validierungsregel auf Daten in einem Bildschirm an
Doppelklicken Sie im Projektmappen-Explorer auf den Bildschirm, für den Sie eine Validierungsregel angeben möchten.
Klicken Sie oben im Bildschirm-Designer auf Code schreiben.
Der Code-Editor wird geöffnet.
Wählen Sie im Menü Deklarationen die Option <Entitäts- oder Tabellenname>[_Validate] aus.
Ein Codeblock mit dem Namen <Entitäts- oder Tabellenname>[_Validate] wird in der Codedatei angezeigt.
Fügen Sie der <Entitäts- oder Tabellenname>[_Validate]-Methode den benutzerdefinierten Validierungscode hinzu.
Um eine Validierungsregel zu erzwingen, nachdem ein Benutzer eine Datenzeile hinzugefügt, gelöscht oder aktualisiert hat, rufen Sie die AddScreenError-Methode des Parameters results auf.
Im folgenden Beispiel wird das Löschen von Kunden verhindert, die sich in den USA befinden.
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); } } } }
Hinweis Updates können standardmäßig erst an eine Datenquelle übergeben werden, wenn sie den Validierungsregeln entsprechen.Wenn Sie es Benutzern ermöglichen möchten, einen Commit für nicht ausgewertete Updates auszuführen, verwenden Sie anstelle der AddScreenError-Methode die AddScreenResult-Methode.Für den zweiten Parameter der AddScreenResult-Methode übergeben Sie entweder ValidationSeverity.Informational oder ValidationSeverity.Warning.
Anwenden von Validierungsregeln, die ausgeführt werden, wenn Daten gespeichert werden
Sie können benutzerdefinierte Validierungsregeln anwenden, wenn ein Benutzer Daten speichert oder wenn im Code die SaveChanges-Methode einer Datenquelle aufgerufen wird.Diese Art von Validierung wird ausschließlich auf der Serverebene ausgeführt.
So wenden Sie Validierungsregeln an, die ausgeführt werden, wenn Daten gespeichert werden
Doppelklicken Sie im Projektmappen-Explorer auf die Entität oder Tabelle, auf die Sie Validierungsregeln anwenden möchten.
Klicken Sie im Daten-Designer in der Befehlsleiste auf den Pfeil neben der Schaltfläche Code schreiben und dann auf Entitäts- oder Tabellenname[_Validate].
Der Code-Editor wird geöffnet und generiert die Entitäts- oder Tabellenname[_Validate]-Methode.
Fügen Sie der Entitäts- oder Tabellenname[_Validate]-Methode den benutzerdefinierten Validierungscode hinzu.
Rufen Sie die AddEntityError-Methode des Parameters results auf.
Im folgenden Beispiel wird der Kreditstatus eines Kunden überprüft, wenn ein Benutzer einen Auftrag speichert.Wenn der Kredit des Kunden noch nicht von der Finanzierungsabteilung genehmigt wurde, wird eine ValidationException ausgelöst.
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; }
Hinweis Wenn die Ausnahme ausgelöst wird, wird standardmäßig eine Fehlermeldung angezeigt, und die Daten verbleiben im aktuellen Changeset.Wenn Sie dieses Verhalten ändern möchten, können Sie ValidationException im Code behandeln.
Siehe auch
Aufgaben
Gewusst wie: Behandlung von Datenereignissen
Gewusst wie: Definieren von Datenfeldern
Konzepte
Ausführen datenbezogener Aufgaben mithilfe von Code
Arbeiten mit datenbezogenen Objekten im Code
Schreiben von Code in LightSwitch
Weitere Ressourcen
Übersicht über die Datenvalidierung in LightSwitch-Anwendungen