Создание настраиваемого класса значения поля

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

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

В этой статье
Конструкторы, используемые с пользовательскими классами значений полей
Использование директивы [Serializable]
Обращение к значениям поля из пользовательского класса поля

При создании пользовательского класса поля, для которого требуется специальная структура данных поля (если такая структура не поддерживается родительским классом поля, производным от которого является создаваемый класс), можно создать класс значений, содержащий данные поля.

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

Пользовательский тип данных может быть структурой или классом, но в целях упрощения инструкций в пакете SDK Microsoft SharePoint Foundation 2010 всегда подразумевается использование класса.

Пользовательский класс значений поля не обязательно должен являться производным от конкретного класса. Это верно даже для пользовательских классов, производных от классов полей, с которыми уже сопоставлены классы значений полей. Например, при наследовании пользовательского класса поля от класса SPFieldMultiColumn не обязательно наследовать класс значений поля от класса SPFieldMultiColumnValue.

Для пользовательских классов значений рекомендуется следовать следующему соглашению об именовании:

имя_типа_поляFieldValue

В качестве примера классов с правильными именами можно привести классы TargetDateFieldValue и RegularExpressionFieldValue. Специальные классы значений SharePoint Foundation были разработаны до определения этого соглашения и следуют шаблону SPFieldимя_типа_поляValue, например, SPFieldMultiColumnValue.

Конструкторы, используемые с пользовательскими классами значений полей

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

Если класс является производным от одного из классов SPFieldимя_типа_поляValue, эти конструкторы обычно используются только для вызова конструктора базового класса. Далее приведены примеры стандартных конструкторов класса значений, являющегося производным от другого класса:

public RegularExpressionFieldValue()
  : base() { }

public RegularExpressionFieldValue(string value)
  : base(value) { }
Public Sub New()
    MyBase.New()
End Sub

Public Sub New(ByVal value As String)
    MyBase.New(value)
End Sub

В некоторых случаях требуется использовать дополнительные конструкторы. Например, если пользовательский тип базируется на поле внутреннего массива, может потребоваться использование конструктора, который принимает параметр типа Int32 для инициализации размера массива, но не его конкретных элементов. Кроме того, может потребоваться использование дополнительных параметров для базовых конструкторов. Например, если значения пользовательского типа содержат контекстно-зависимый компонент, возможно, потребуется добавление параметров SPContext, SPWeb или SPSite. Примеры конструкторов см. в описании классов SPFieldимя_типа_поляValue.

Использование директивы [Serializable]

Практически каждое объявление класса значений поля должно содержать директиву [Serializable], которая обеспечивает возможность сериализации объектов класса. Эту директиву необходимо добавлять в объявление настраиваемого класса значений поля, но не следует добавлять в том случае, если значения объектов класса являются контекстно-зависимыми, что не позволяет сохранять или восстанавливать их. Например, в объявлении класса SPFieldLookupValue директива [Serializable] не используется, поскольку значения этого типа всегда являются временными.

Если класс определен с использованием директивы [Serializable], следует реализовать в нем метод ToString, который обеспечивает преобразование значения поля в строковый формат, используемый для хранения данных. Если класс наследуется от другого класса значений поля, переопределять этот метод необязательно.

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

Во всех классах SPFieldимя_типа_поляValue, поставляемых вместе с SharePoint Foundation и поддерживающих сериализацию, переопределяется метод ToString вместо реализации интерфейса ISerialization. Рекомендуется следовать этому образцу и не реализовывать интерфейс ISerialization.

Дополнительные сведения о классе SerializableAttribute см. в описании класса SerializableAttribute.

Обращение к значениям поля из пользовательского класса поля

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

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

Для большинства таких элементов в реализации SPField не выполняется никаких эффективных действий. Например, метод GetFieldValue просто возвращает переданные в него значения, а метод GetValidatedString вызывает метод ToString класса значений, который не содержит каких-либо функций проверки. Поэтому, если класс типа поля наследуется непосредственно от класса SPField, необходимо переопределить любые его элементы, которые будут использоваться для выполнения каких-либо функций. По возможности рекомендуется наследовать пользовательский класс поля от любого из классов, являющихся производными от SPField.

  • DefaultValue — возврат значения в строковом формате, которое может использоваться по умолчанию в качестве значения поля, если элемент списка не содержит значения в соответствующем поле.

  • DefaultValueTyped — возврат значения, которое может использоваться по умолчанию в качестве значения поля, если элемент списка не содержит значения в соответствующем поле.

  • FieldValueType — возврат типа значения поля.

  • GetFieldValue — преобразование указанной строки в объект значения типа поля. При вызове метода M:Microsoft.SharePoint.SPField.GetFieldValue(System.String) пользовательский объект поля должен возвращать пользовательский объект значения поля. В SharePoint Foundation объект значения поля возвращается при вызове метода SPListItem.this["field name"]. Во многих случаях в переопределении этого метода сначала проверяется, что значение типа String не является пустым или значением NULL, после чего вызывается конструктор пользовательского класса значений, принимающий параметр строкового типа (см. выше).

  • GetFieldValueAsText — возврат значения данных поля в виде строки.

  • GetFieldValueAsHtml — возврат значения данных поля в виде строки в формате HTML. Это значение в формате HTML в большинстве случаев используется для отображения значения поля непосредственно на странице. Например, оно используется на странице журнала версий для элемента списка. Обратите внимание, что такое значение поля не используется в форме отображения, на которой поля обычно отображаются аналогично представлениям списка, то есть на основании элемента Collaborative Application Markup Language (CAML)DisplayPattern, представленного в файле fldtype*.xml для типа поля.

  • GetValidatedString — проверка объекта значения типа поля и его преобразование в сериализованную строку. В свою очередь, этот метод может использовать метод ToString объекта значения поля для его преобразования в строку.

  • PreviewValueTyped — возврат предыдущего значения данных поля для представления элемента управления "Поле" во время проектирования в режиме отображения или изменения.

См. также

Задачи

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

Концепции

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

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

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