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

Дата последнего изменения: 13 марта 2010 г.

Применимо к: SharePoint Foundation 2010

Класс настраиваемого поля может содержать проверку данных. Каждый тип настраиваемого поля может наследовать проверку от родительского класса поля; переопределять проверку родительского класса или даже вызывать проверку родительского класса как часть собственной логики проверки. При переопределении метода GetValidatedString можно задать настраиваемую проверку данных и предварительно обновить логику обработки для класса настраиваемого поля. (Реализация по умолчанию просто вызывает метод ToString класса значения; поэтому, если класс поля наследует напрямую от класса SPField или от производного класса, само по себе это не переопределяет методGetValidatedString, необходимо самостоятельно переопределить GetValidatedString, чтобы при необходимости предоставить логику проверки).

Выполнение проверки данных

Можно выполнять проверку данных в нескольких фрагментах кода, включая элементы управления форм. Тем не менее, рекомендуется добавить серверную логику проверки данных, которая необходима для метода GetValidatedString класса настраиваемого поля. Это помогает обеспечить надлежащую проверку данных как для данных в поле, так и для данных в базе данных контента.

В случаях, когда данные обновляются следующими способами:

  • с помощью элементов управления форм,

  • посредством пользовательского интерфейса или

  • программными средствами с помощью объектной модели,

SharePoint Foundation вызывает метод GetValidatedString во всех случаях, когда данные хранятся в классе SPField или в производном классе. Например, метод SharePoint Foundation вызывает GetValidatedString, если значение поля в объекте SPListItem настроено для использования метода SPListItem.this["field name"].

ПримечаниеПримечание

Пользователи могут обновлять данные, содержащиеся в полях, способами, которые не требуют вызова метода GetValidatedString, и, следовательно, при этом не вызывается логика проверки данных, которая содержится в методе. При этом используется неуправляемый код или методы веб-служб, которые не вызывают объект SPListItem для обновления данных поля. Например, если пользователь обновляет данные элемента списка с помощью представления таблицы, обновление элементов списка выполняется без вызова метода GetValidatedString.

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

Для возврата сообщения об ошибке метод GetValidatedString должен вызвать исключение SPFieldValidationException как ошибку. Можно предоставить соответствующее сообщение об ошибке в качестве строкового параметра для конструктора SPFieldValidationException. В SharePoint Foundation, если пользователь ввел недопустимое значение и нажал кнопку ОК в форме, выводится сообщение (текст красного цвета) рядом с полем на стандартной форме "Создать" или "Редактировать" (элемент списка).

В следующем примере демонстрируется переопределение версии GetValidatedString, подтверждающее, что поле содержит значение в том случае, если является обязательным полем; и что версия строки значения не превышает заданного ограничения. (В свойстве Required содержится запись о том, является поле обязательным или нет).

public override String GetValidatedString(Object value)
{
    if ((this.Required == true) && (value.ToString() == ""))
    {
        throw new SPFieldValidationException(this.Title 
            + " must have a value.");
    }
    else if (value.ToString().Length > MAXLENGTH)
    {
        throw new SPFieldValidationException(this.Title 
            + " cannot be longer than " + MAXLENGTH.ToString());
    }
    return base.GetValidatedString(value);
} 
Public Overrides Function GetValidatedString(ByVal value As Object) As String
    If (Me.Required = True) AndAlso (value.ToString() = "") Then
        Throw New SPFieldValidationException(Me.Title & " must have a value.")
    ElseIf value.ToString().Length > MAXLENGTH Then
        Throw New SPFieldValidationException(Me.Title & " cannot be longer than " & MAXLENGTH.ToString())
    End If
    Return MyBase.GetValidatedString(value)
End Function

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

Если пользователи настраивают значение поля в пользовательском интерфейсе иначе, чем на стандартной форме "Создать" или "Редактировать" (элемент списка), следует также выполнить проверку данных, введенных в элемент управления поля пользовательского интерфейса. В частности, если поле должно обязательно содержать значение, данное требование рекомендуется применить на уровне пользовательского интерфейса. При использовании одного из встроенных классов SharePoint Foundation, производных от BaseFieldControl, для визуализации поля можно использовать внутреннюю проверку для применения Required. При выводе собственных элементов управления из BaseFieldControl или любого из их производных и переопределении метода Validate или CreateChildControls применять Required необязательно, также как и любую другую проверку на уровне пользовательского интерфейса.

Логика проверки пользовательского интерфейса может содержаться в методе Validate или в методе CreateChildControls или в комбинации этих двух методов. Недостаток размещения логики проверки в методе CreateChildControls заключается в том, что метод вызывается только при визуализации поля на форме, поэтому, если значение объектной модели обновляется, проверка выполняться не будет.

При переопределении метода Validate результат должен выводиться в отчете путем присвоения свойству IsValid значения true или false; в последнем случае требуется настройка соответствующего сообщения для ErrorMessage.

Следующий пример демонстрирует переопределение метода Validate. Сначала необходимо проверить, чтобы текущий режим был установлен как "Отображение"; в этом случае не имеет значения, что поле недопустимо, поскольку его все равно невозможно изменить. Данный метод также проверяет, известно ли уже о том, что свойство Value является недопустимым, выполнив проверку свойства IsValid. Если какая-либо из двух проверок дает положительный результат, никаких действий не выполняется. Если ни одна из проверок положительного результата не дает, метод вызывает базовый метод Validate, который присваивает IsValid значение false, если обнаруживает дефекты свойства Value; или значение ErrorMessage. (Метод BaseFieldControl.Validate не выполняет никаких действий, поэтому если класс, метод Validate которого переопределяется напрямую из BaseFieldControl, вызов базового метода Validate можно пропустить). И, наконец, метод выполняет проверку значения Required и применяет данное значение.

public override void Validate()
{
    if (ControlMode == SPControlMode.Display || !IsValid)
    {
        return;
    }

    base.Validate();

    if (Field.Required && 
        (Value == null || Value.ToString().Length == 0))
    {
        this.ErrorMessage = Field.Title + " must have a value."
        IsValid = false;
        return;
    }
}
Public Overrides Sub Validate()
    If ControlMode = SPControlMode.Display OrElse (Not IsValid) Then
        Return
    End If

    MyBase.Validate()

    If Field.Required AndAlso (Value Is Nothing OrElse Value.ToString().Length = 0) Then
        Me.ErrorMessage = Field.Title & " must have a value."
        IsValid = False
        Return
    End If
End Sub
ПримечаниеПримечание

Метод RenderValidationMessage используется для отображения ErrorMessage.

См. также

Задачи

Пример: создание типа настраиваемого поля

Концепции

Типы настраиваемых полей

Инструкции. Создание настраиваемого класса поля