Udostępnij za pośrednictwem


Jak: Sprawdzanie poprawności danych

Można zastosować reguły poprawności do encji lub tabeli w celu zapewnienia, że poprawnie sformatowane dane są zapisywane do źródła danych.Reguła poprawności jest warunkiem lub ograniczeniem, które muszą spełniać dane w aplikacji.Można dodać jedną lub więcej reguł poprawności do encji lub tabeli w LightSwitch.Jeśli użytkownik doda lub zmieni dane i te dane nie spełniają reguł poprawności, LightSwitch wyświetla błąd.Aby użytkownik mógł przekazać dane, należy naprawić błąd walidacji.

Na poniższej ilustracji przedstawiono komunikat o błędzie walidacji.

Komunikat o błędzie sprawdzania poprawności

LightSwitch zawiera kilka wbudowanych reguł poprawności.Można skonfigurować te reguły i zastosować je do encji lub tabeli bez pisania kodu.Można także napisać kod, aby zdefiniować niestandardowe reguły poprawności.

Ten temat zawiera następujące sekcje:

  • Stosowanie wstępnie zdefiniowanych reguł poprawności do pola

  • Stosowanie niestandardowych reguł poprawności do pola

  • Stosowanie niestandardowych reguł poprawności do danych na ekranie

  • Stosowanie reguł poprawności, które są uruchamiane po zapisaniu danych

łącze do wideo Aby wyświetlić pokrewne wideo demonstracyjne, zobacz Jak: Pisać reguły biznesowe dla walidacji i pól obliczanych w aplikacji LightSwitch?.

Stosowanie wstępnie zdefiniowanych reguł poprawności do pola

LightSwitch zawiera kilka wbudowanych reguł poprawności, których można używać bez pisania żadnego niestandardowego kodu.Reguły te można stosować do poszczególnych pól danych lub dowolnego rodzaju aktualizacji, jakiej dokonują użytkownicy na danych na ekranie.

Aby zastosować wstępnie zdefiniowaną regułę poprawności do pola

  1. W Eksploratorze rozwiązań kliknij dwukrotnie encję lub tabelę, do której chcesz zastosować reguły poprawności.

    Encja lub tabela otwiera się w Projektancie danych.

  2. W Projektancie danych zaznacz pole, którego poprawność chcesz sprawdzić.

  3. W oknie Właściwości, w sekcji Walidacja, ustaw wartości dowolnych właściwości.

    Aby uzyskać więcej informacji dotyczących właściwości walidacji, zobacz Odniesienia: Właściwości projektanta danych.

Stosowanie niestandardowych reguł poprawności do pola

Można zdefiniować niestandardowe reguły poprawności, pisząc kod.Można określić, kiedy te reguły poprawności są wymuszane przez LightSwitch.Na przykład, można określić, że reguła poprawności pola jest wymuszona natychmiast po wpisaniu wartości przez użytkownika.Można też określić, że encja lub tabela jest wykonywana tylko wtedy, gdy wszystkie jej pola zawierają wartości.Ten model ma sens, kiedy poprawność danej wartości w jednym polu opiera się na prawidłowej wartości w innym polu tej samej encji lub tabeli.

Aby zastosować niestandardową regułę poprawności do pola

  1. W Eksploratorze rozwiązań kliknij dwukrotnie encję lub tabelę, do której chcesz zastosować reguły poprawności.

    Encja lub tabela otwiera się w Projektancie danych.

  2. W Projektancie danych zaznacz pole, którego poprawność chcesz sprawdzić.

  3. W oknie Właściwości kliknij Niestandardowe sprawdzanie poprawności.

    Edytor kodu otwiera się i generuje metodę o nazwie FieldName[_Validate].

  4. Dodaj kod walidacji do metody FieldName[_Validate].

    Aby wymusić regułę poprawności natychmiast po podaniu wartości pola przez użytkownika, wywołaj metodę AddPropertyError parametru results.

    Poniższy przykład wyświetla komunikat sprawdzania poprawności po ustawieniu przez użytkownika pola ShippedDate encji Order na datę, która jest nowsza niż bieżąca.

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

    Należy zauważyć, że można wyróżnić inne właściwości walidacji.Na przykład, możesz napisać kod sprawdzania poprawności, który będzie uruchamiany, gdy użytkownik zmienia kod pocztowy klienta.W przypadku przekazania właściwości City jako parametru do metody AddPropertyError, LightSwitch, zostanie wyróżnione pole City.Tekst komunikatu błędu sprawdzania poprawności może monitować użytkownika o wpisanie nazwy miasta, która odpowiada nowemu kodowi pocztowemu.

    [!UWAGA]

    Domyślnie, dopóki aktualizacje nie będą zgodne z regułami poprawności, nie można ich zatwierdzić do źródła danych.Aby umożliwić użytkownikom przekazywanie nieprzetestowanych aktualizacji, należy użyć metody AddPropertyResult zamiast metody AddPropertyError.Dla drugiego parametru metody AddPropertyResult podaj ValidationSeverity.Informational lub ValidationSeverity.Warning.

    Aby wymusić regułę poprawności na obiekcie lub tabeli, na przykład, gdy użytkownik zmodyfikuje wartość w polu, które opiera się na prawidłowej wartości innego pola, wywołaj metodę AddEntityError parametru results.W poniższym przykładzie porównano wartość właściwości pola RequiredDate z wartością pola OrderDate.Jeśli data zamówienia jest późniejsza niż data wymagana, ten kod wyświetla komunikat o błędzie sprawdzania poprawności.

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

Stosowanie niestandardowych reguł poprawności do danych na ekranie

Można określić niestandardowe reguły poprawności, które będą dotyczyły całego ekranu, dodając kod niestandardowy do metody <nazwa encji lub tabeli>[_Validate] w pliku kodu ekranu.Niestandardowy kod jest uruchamiany, gdy użytkownik zmienia dane na ekranie (na przykład dodaje lub usuwa dane).Te reguły są uruchamiane przed zapisaniem danych.

Aby zastosować niestandardową regułę poprawności do danych na ekranie

  1. W Eksploratorze rozwiązań kliknij dwukrotnie ekran, dla którego chcesz określić regułę poprawności.

  2. U góry Projektanta ekranu kliknij Pisanie kodu.

    Zostanie otwarty Edytor kodu.

  3. W menu Deklaracje wybierz <nazwa encji lub tabeli>[_Validate].

    Blok kodu o nazwie <nazwa encji lub tabeli>[_Validate] pojawia się w pliku kodu.

  4. Dodaj kod niestandardowego sprawdzania poprawności do metody <nazwa encji lub tabeli>[_Validate].

    Aby wymusić regułę poprawności po dodaniu, usunięciu lub zaktualizowaniu wiersza danych przez użytkownika, wywołaj metodę AddScreenError parametru results.

    Poniższy przykład uniemożliwia usunięcie klientów, którzy znajdują się w Stanach Zjednoczonych.

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

    [!UWAGA]

    Domyślnie, dopóki aktualizacje nie będą zgodne z regułami poprawności, nie można ich zatwierdzić do źródła danych.Aby umożliwić użytkownikom przekazywanie nieprzetestowanych aktualizacji, należy użyć metody AddScreenResult zamiast metody AddScreenError.Dla drugiego parametru metody AddScreenResult podaj ValidationSeverity.Informational lub ValidationSeverity.Warning.

Stosowanie reguł poprawności, które są uruchamiane po zapisaniu danych

Niestandardowe reguły poprawności można zastosować podczas zapisywania danych przez użytkownika lub gdy kod wywołuje metodę SaveChanges źródła danych.Tego rodzaju walidacja działa wyłącznie w warstwie serwera.

Aby zastosować regułę poprawności, która jest uruchamiana przy zapisywaniu danych

  1. W Eksploratorze rozwiązań kliknij dwukrotnie encję lub tabelę, do której chcesz zastosować reguły poprawności.

  2. Na pasku poleceń Projektanta danych kliknij strzałkę obok przycisku Pisanie kodu, a następnie kliknij nazwa encji lub tabeli[_Validate].

    Edytor kodu otwiera się i generuje metodę o nazwie nazwa encji lub tabeli[_Validate].

  3. Dodaj kod niestandardowego sprawdzania poprawności do metody nazwa encji lub tabeli[_Validate].

    Wywołanie metody AddEntityError parametru results.

    Poniższy przykład sprawdza status kredytowy odbiorcy, gdy użytkownik zapisze zamówienie sprzedaży.Jeśli kredyt klienta nie jest jeszcze zatwierdzony przez dział finansowy, wyrzucany jest wyjątek 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;
            }
    
    

    [!UWAGA]

    Domyślnie w przypadku wyjątku wyświetlany jest komunikat o błędzie i dane pozostają w bieżącym zestawie zmian.Jeśli chcesz zmienić to zachowanie, możesz obsłużyć wyjątek ValidationException w kodzie.

Zobacz też

Zadania

Jak: obsługi zdarzeń danych

Jak: Definiowanie pól danych

Koncepcje

Wykonywanie zadań związanych z danych przy użyciu kodu

Praca z obiektami związanymi z danymi w kodzie

Pisanie kodu w LightSwitch

Inne zasoby

Omówienie walidacji danych w aplikacjach LightSwitch

Danych: Informacje za aplikacji