Поделиться через


Практическое руководство. Проверка данных в приложении LightSwitch

За счет применения правил проверки к сущности или таблице можно обеспечить правильную запись отформатированных данных в источник данных для приложения Visual Studio LightSwitch. Правило проверки — это условие или ограничение, которому должны соответствовать данные в приложении. Если существует возможность добавления одного или нескольких правил проверки для сущности или таблицы, ошибка возникает, когда пользователь добавляет или изменяет данные несоответствующим образом. Ошибка проверки должна быть исправлена до того, как пользователь подтвердит данные.

На следующем рисунке показано сообщение об ошибке проверки.

Сообщение об ошибке проверки

LightSwitch содержит несколько встроенных правил проверки. Можно настроить эти правила и применять их к сущности или таблице без написания кода. Кроме того, можно задать пользовательские правила проверки с помощью кода.

В этом разделе содержатся следующие подразделы.

  • Применение предопределенных правил проверки к полю

  • Применение пользовательских правил проверки к полю

  • Применение пользовательских правил проверки к данным на экране

  • Применение правил проверки, которые выполняются при сохранении данных

ссылка на видео Связанные демонстрационные видеоролики см. в статье How Do I: Write business rules for validation and calculated fields in a LightSwitch Application? (Инструкции. Написание бизнес-правил для проверки и вычисляемых полей в приложении LightSwitch).

Применение предопределенных правил проверки к полю

LightSwitch содержит несколько встроенных правил проверки, которые можно использовать без написания собственного кода. Эти правила можно применять к отдельным полям данных или любым обновлениям, выполняемым пользователями в отношении данных на экране.

Применение предопределенного правила проверки к полю

  1. В области Обозреватель решений откройте контекстное меню сущности или таблицы, к которой необходимо применять правила проверки, а затем выберите Открыть.

    Сущность или таблица откроется в конструкторе данных.

  2. В конструкторе данных выберите поле, которое необходимо проверить.

    Примечание

    Для приложений, которые были обновлены до Visual Studio 2012 Обновление 2, можно также выбрать уровень, на котором будет выполняться проверка при нажатии кнопок на панели Перспектива.

  3. В окне Свойства в разделе Проверка задайте значение для одного из свойств.

    Дополнительные сведения о свойствах проверки см. в разделе Справочные материалы. Свойства конструктора данных.

Применение пользовательских правил проверки к полю

Можно задать пользовательские правила проверки за счет написания кода, а также можно указать условия их применения в LightSwitch. Например, можно указать, чтобы правило проверки применялось сразу после того, как пользователь вводит значение в поле. В качестве альтернативного варианта можно настроить, чтобы для сущности или таблицы проверка выполнялась только в том случае, когда все поля содержат значения. Эта модель имеет смысл, если допустимость значения в одном поле зависит от допустимого значения в другом поле в той же сущности или таблице.

Применение пользовательского правила проверки к полю

  1. В области Обозреватель решений откройте контекстное меню сущности или таблицы, к которой необходимо применять правила проверки, а затем выберите Открыть.

    Сущность или таблица откроется в конструкторе данных.

  2. В конструкторе данных выберите поле, которое необходимо проверить.

  3. В окне Свойства выберите ссылку Настраиваемая проверка.

    Откроется редактор кода с созданным методом с именем FieldName_Validate.

  4. Добавьте код проверки в метод FieldName_Validate.

    Чтобы применить правило проверки сразу после того, как пользователь вносит значение в поле, вызовите метод AddPropertyError параметра results.

    В следующем примере показано сообщение проверки правильности после того, как пользователь задал значение поля ShippedDate сущности Order равным дате, которая позже сегодняшнего дня.

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

    Обратите внимание, что проверку можно применить к другим свойствам. Например, можно написать код проверки, который выполняется при изменении пользователем почтового индекса клиента. Если свойство City передается в качестве параметра в метод AddPropertyError, LightSwitch выделит поле City. В тексте ошибки может быть предложено ввести название города, которое соответствует новому почтовому индексу.

    Примечание

    По умолчанию обновления невозможно сохранить в источнике данных, пока они не удовлетворяют правилам проверки.Чтобы разрешить пользователям сохранять необработанные обновления, воспользуйтесь методом AddPropertyResult вместо метода AddPropertyError.Для второго параметра метода AddPropertyResult передайте ValidationSeverity.Informational или ValidationSeverity.Warning.

    Чтобы применить правило проверки к сущности или таблице, например, когда пользователь изменяет значение в поле, которое зависит от допустимого значения в другом поле, вызовите метод AddEntityError параметра results. В следующем примере сравниваются значения полей RequiredDate и OrderDate. Если значение даты заказа позже требуемой даты, этот код выводит сообщение об ошибке проверки.

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

Применение пользовательских правил проверки к данным на экране

Можно задавать пользовательские правила проверки, применяемые ко всему экрану, путем добавления пользовательского кода в метод EntityOrTableName_Validate в файле кода экрана. Пользовательский код выполняется, когда пользователь изменяет какие-либо данные на экране (например, добавляет или удаляет данные). Эти правила выполняются перед сохранением данных.

Применение пользовательского правила проверки к данным на экране

  1. В области Обозреватель решений откройте контекстное меню для экрана, для которого требуется задать правило проверки, а затем выберите Открыть.

  2. В верхней части области Конструктор приложений нажмите кнопку Запись кода.

    Откроется редактор кода.

  3. В списке Объявления выберите EntityOrTableNameProperty _Validate.

    В файле кода появляется блок кода с именем EntityOrTableNameProperty_Validate.

  4. Добавьте пользовательский код проверки в метод EntityOrTableNameProperty_Validate.

    Чтобы применить правило проверки после добавления, удаления или обновления пользователем строки данных, вызовите метод AddScreenError параметра results.

    В следующем примере показано запрещение удаления клиентов, которые находятся в США.

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

    Примечание

    По умолчанию обновления невозможно сохранить в источнике данных, пока они не удовлетворяют правилам проверки.Чтобы разрешить пользователям сохранять необработанные обновления, воспользуйтесь методом AddScreenResult вместо метода AddScreenError.Для второго параметра метода AddScreenResult передайте ValidationSeverity.Informational или ValidationSeverity.Warning.

Применение правил проверки, которые выполняются при сохранении данных

Можно применить пользовательские правила проверки, когда пользователь сохраняет данные или код вызывает метод SaveChanges из источника данных. Проверки такого рода выполняются исключительно на уровне сервера.

Применение правил проверки, которые выполняются при сохранении данных

  1. В области Обозреватель решений откройте контекстное меню сущности или таблицы, к которой необходимо применять правила проверки, а затем выберите Открыть.

    Примечание

    Для приложений, которые были обновлены до версии Visual Studio 2012 Обновление 2, на панели Перспектива перейдите на вкладку Сервер.

  2. На панели команд конструктора данных в списке Запись кода выберите EntityOrTableName_Validate.

    Откроется редактор кода с созданным методом с именем EntityOrTableName_Validate.

  3. Добавьте пользовательский код проверки в метод EntityOrTableName_Validate.

    Вызовите метод AddEntityError параметра results.

    В следующем примере проверяется кредитный статус клиента, когда пользователь сохраняет заказ на продажу. Если кредит клиента еще не одобрен финансовым отделом, будет вызвано исключение 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;
            }
    

    Примечание

    По умолчанию при возникновении исключения выводится сообщение об ошибке, а данные остаются в текущем состоянии.Чтобы изменить такое поведение, можно обработать исключение ValidationException в своем коде.

См. также

Задачи

Практическое руководство. Обработка событий данных

Практическое руководство. Определение полей данных в базе данных LightSwitch

Основные понятия

Выполнения задач, связанных с данными, с помощью кода

Работа с объектами, связанными с данными, в коде

Другие ресурсы

Overview of Data Validation in LightSwitch Applications (Обзор проверки данных в приложении LightSwitch)

Данные: источники сведений для приложения