Базовый элемент разработки: типы столбцов и полей
Дата последнего изменения: 8 июля 2010 г.
Применимо к: SharePoint Foundation 2010
В этой статье
Объектная модель для типов столбцов и полей
XML-код, применяемый для типов столбцов и полей
Области, связанные с разработкой столбцов и типов полей
Дополнительные сведения о разработке столбцов и типов полей
В данном разделе представлен краткий обзор типов столбцов и полей — базовых элементов разработки в Microsoft SharePoint Foundation.
Совет |
---|
Термин "поле" имеет два близких значения при разработке для SharePoint Foundation. Иногда он относится к столбцу в списке, но когда речь идет об отдельном элементе списка, термин "поле" имеет значение, подобное значению слова "ячейка", когда оно относится к пересечению столбцов и строк в таблице. Частично из-за этого термины "столбец" и "поле" являются синонимами в контексте разработки SharePoint Foundation. Например, объект, представляющий столбец, является объектом класса SPField или класса, производного от него. |
В SharePoint Foundation столбцы содержат не только данные определенного типа данных — они сами являются типами, так как одинаковый столбец может использоваться в нескольких списках с различными данными. Столбец может находиться в галерее столбцов сайта. Столбец сайта из галереи может быть добавлен в любой список на сайте, как программно, так и через пользовательский интерфейс. Столбец может быть также добавлен в тип контента, как программно, так и через пользовательский интерфейс, например с помощью конструктора типа контента.
Некоторые из столбцов сайтов, встроенные в SharePoint Foundation, включают "Адрес", "Дата рождения", "Имя помощника" и URL-адрес. Каждый столбец принадлежит к тому или другому "виду типов", которые обычно называются типами полей. Например, типы полей "Адрес", "Дата рождения", "Имя помощника" и URL-адрес являются соответственно: несколькими строками текста, датой и временем, единственной строкой текста и гиперссылкой. Полный список типов полей определен значениями перечисления SPFieldType. Некоторые наиболее важные значения включают следующие:
Boolean. Это поле принимает только значения true или false.
Calculated. Значение этого поля вычисляется во время выполнения с помощью математической формулы.
Choice. Это поле может иметь только одно значение, и это значение должно быть включено в конечный перечисляемый список значений. Также есть тип поля "Multichoice", который позволяет выбирать более одного значения из списка.
Computed. Значение этого поля зависит от значения другого поля в том же элементе списка. Оно обычно является значением логической операции, выполняемой с одним или несколькими другими полями.
Lookup. Это поле подобно полю "Choice", но список возможных значений берется из столбца какого-либо другого списка.
Text. Это поле принимает одну строку текста. Также есть тип поля "Multiline Text".
Здесь приведено несколько наиболее интересных операций, которые можно выполнять с полями как программно, так и с помощью разметки XML:
Чтение и запись значения определенного типа поля в определенном элементе списка.
Добавление и удаление столбцов в списке.
Добавление и удаление столбцов в галереях столбцов сайта.
Изменение способа отображения полей в формах создания, редактирования и отображения элементов списков.
Изменение способа отображения столбцов в представлениях списков.
Создание настраиваемого типа полей.
Создание одного или более настраиваемых элементов управления отображением, чтобы отображать поля различных типов страниц и форм.
Создание одного элемента управления отображением или более на мобильных устройствах, чтобы отображать поля на мобильных устройствах.
Исключение нежелательных столбцов из результатов запроса.
Выполнение объединения двух таблиц в запросе, когда одна таблица имеет столбец Lookup, который берет значения из другой таблицы.
Объектная модель для типов столбцов и полей
Примечание |
---|
В данном разделе явно представлены только классы в серверной объектной модели SharePoint Foundation. Клиентская объектная модель имеет параллельные классы для большинства из этих серверных классов. В общем случае, но не всегда, если имя серверного класса начинается с "SP", параллельный объектный класс имеет такое же имя, но без префикса "SP". |
Индексаторы SPListItem
Одна из наиболее общих задач написания кода при разработке SharePoint Foundation — чтение и запись в столбец элемента списка. Чтобы сделать это, получите ссылку на объект SPListItem, который представляет элемент списка, и затем используйте один из его индексаторов (Item), чтобы получить ссылку на определенное поле. Одни индексаторы принимают объект Int32, другие индексаторы принимают объект String, а третьи индексаторы принимают объект Guid. Последние могут быть использованы для получения поля по его свойству Id. Можно передать как внутреннее имя поля, так и его отображаемое имя с помощью индексатора String.
SPField и его производные
Каждый тип полей представлен классом, который является производным от SPField. Например, SPFieldBoolean представляет логические поля, а SPFieldChoice представляет поля выбора. Все заданные столбцы в галерее столбцов сайта на веб-сайте являются объектом одного из этих классов. Свойства класса различают разные столбцы определенного типа полей. Например, столбец "Дата рождения" и столбец "Срок выполнения" являются объектами класса SPFieldDateTime, но они отличаются, помимо прочего, по значению свойства Title. Среди членов класса SPField есть свойство ListsFieldUsedIn(), которое сообщает, какие из списков включают этот столбец. Также оно имеет метод EnforceUniqueValues, обеспечивающий, чтобы в двух ячейках в столбце не было одинаковых значений, так же как и свойства Filterable и Sortable.
Критичным членом класса SPField является метод Update(). Он должен вызываться для сохранения изменений, сделанных в столбце.
Совет |
---|
Существует несколько членов каждого класса, производного от SPField, которые могут подсказывать, что их объекты представляют определенное поле в элементе списка, то есть сущность, которая может в представлении списка соответствовать определенной ячейке в столбце. Например, существуют методы GetFieldValue(String) и HasValue(Object). Также существует свойство FieldRenderingControl, которое определяет способ отображения поля, когда единственный элемент списка отображается в форме (например, в форме создания или редактирования). Хотя при работе с этими членами может быть удобно думать таким образом об объекте, производном от SPField, нужно иметь в виду, что объект не имеет каких-либо свойств, которые содержат значение поля в конкретном элементе списка, а вызов метода SPField.Update() не сохраняет изменения, сделанные для такого значения. (Объект в свойстве FieldRenderingControl не имеет такого члена, в частности свойства ItemFieldValue.) Подобно этому, GetFieldValue(String) не получает значение; оно преобразует значение, переданное ему, в качестве параметра. Так же HasValue(Object) просто сообщает, является ли объект, переданный ему, null. Конечно, хотелось бы, чтобы значение, переданное обоим методам, было значением поля в определенном элементе списка; но программист должен использовать эти методы таким образом. Основной способ чтения и записи данных определенного поля в определенном списке заключается в использовании индексатора с объектом SPListItem. |
Можно создать собственные настраиваемые типы полей, произведя новый класс от SPField или от класса, который унаследован от него. Дополнительные сведения см. в разделе Инструкции. Создание настраиваемого класса поля.
Примечание |
---|
Не каждый класс, который наследуется от SPField, может использоваться в качестве базового класса для класса настраиваемого типа полей. Список классов, для которых корпорация Майкрософт поддерживает создание производных, см. в разделе Инструкции. Создание настраиваемого класса поля. |
BaseFieldControl и его производные
Отображение поля в определенном элементе списка в формах создания элемента и редактирования элемента (и иногда в форме отображения элемента) обычно управляется объектом класса, производного от BaseFieldControl. Например, объект SPFieldBoolean отображается объектом класса BooleanField, а объект SPFieldUrl отображается объектом класса UrlField.
Объект, который создает экземпляр элемента управления отображением, содержит в своем свойстве Field ссылку на объект поля, который он отображает. Последний содержит ссылку на его элемент управления отображением в своем свойстве FieldRenderingControl. Как подсказывают эти обратные ссылки, эти два объекта являются партнерами. Объект, производный от SPField, содержит конфигурацию столбца, а элемент управления, производный от BaseFieldControl, обрабатывает взаимодействие с пользователями и управляет отображением полей элементов списка в пользовательском интерфейсе.
Элемент управления отображением синхронизирован с полем в базе данных контента с помощью свойств Value и ItemFieldValue, метода UpdateFieldValueInItem() и обработчика OnLoad(EventArgs). В форме редактирования свойство ItemFieldValue в базе данных контента имеет значение поля в определенном элементе списка, который отображается в форме. В форме создания нового элемента свойство ItemFieldValue имеет значение по умолчанию. Обработчик OnLoad(EventArgs) назначает свойству Value значение свойства ItemFieldValue. Если пользователь задает или изменяет значение в форме, метод UpdateFieldValueInItem() назначает свойству ItemFieldValue значение свойства Value.
Можно создать настраиваемый элемент управления отображением полей, произведя новый класс от класса BaseFieldControl или от класса, который унаследован от него. Дополнительные сведения см. в разделе Инструкции: создание элемента управления визуализацией поля.
Шаблоны отображения
Большая часть работы по созданию и настройке элемента управления полем, включая создание его дочерних элементов управления, выполняется шаблоном отображения. Каждый элемент управления отображением имеет минимум один шаблон отображения, связанный с ним. Объект RenderingTemplate определен как элемент RenderingTemplate в файле ascx в папке %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\CONTROLTEMPLATES. Ссылка на шаблон отображения осуществляется с помощью значения его идентификатора в свойстве объектов элементов управления отображением TemplateName. Так как шаблон отображения выполняет большую часть работы по отображению, методу CreateChildControls() нужно выполнить значительно меньше работы, чем в классическом классе элемента управления Microsoft ASP.NET. Обычно он предоставляет только окончательную доводку для дочерних элементов управления. Например, он может назначать значение по умолчанию для дочернего элемента управления, если поле отображается в форме создания нового элемента, или назначать текущее значение поля дочернему элементу управления в форме редактирования элемента.
Можно создать настраиваемые шаблоны отображения, чтобы использовать их с настраиваемыми элементами управления. Дополнительные сведения см. в разделе Практическое руководство. Создание шаблонов отображения полей.
SPMobileBaseFieldControl и его производные
Отображение поля в версиях страниц SharePoint Foundation для мобильных устройств управляется с помощью классов, которые происходят от SPMobileBaseFieldControl. Например, объект SPFieldBoolean отображается с помощью объекта класса SPMobileBooleanField. Можно создать собственные элементы управления отображением полей для мобильных устройств, которые происходят от одного из этих классов.
В общем случае эти классы предоставляют такую же функциональность для форм мобильных устройств, как классы, производные от BaseFieldControl, предоставляют для обычных форм. Однако существуют некоторые отличия в архитектуре:
Дерево наследования классов, производных от SPMobileBaseFieldControl, приводит к классу ControlASP.NET, а не к классу Control. Также в той части дерева, которая принадлежит SharePoint Foundation, функции, унаследованные от классов TemplateBasedControl и FormComponent в элементах управления отображением не для мобильных устройств, объединены в класс SPMobileComponent в версии элементов управления для мобильных устройств.
Элементы управления отображением имеют свой собственный набор шаблонов отображения, и если создается настраиваемый шаблон отображения для использования на страницах не для мобильных устройств, то может потребоваться создание отдельного шаблона для использования на страницах для мобильных устройств.
Настраиваемые элементы управления отображением полей, которые создаются для контекстов мобильных устройств, при отображении поля зависят больше от метода элемента управления CreateChildControls(), и поэтому они меньше зависят от шаблона отображения, чем настраиваемые элементы управления отображением полей, созданные не для контекстов мобильных устройств. Более того, при создании настраиваемых элементов управления отображением для мобильных устройств часто не переопределяется сам метод CreateChildControls(). Вместо этого обычно переопределяется один или несколько других методов, которые вызываются методом CreateChildControls(): CreateControlForDisplay(), CreateControlForEdit(), CreateControlForNew() и CreateControlForView().
Объект, который создает экземпляр элемента управления отображением для мобильных устройств, содержит в своем свойстве Field ссылку на объект поля, который он отображает. Последний содержит ссылку на его элемент управления отображением для мобильных устройств в своем свойстве FieldRenderingMobileControl. Члены, включенные в процесс обработки базы данных контента, и элементы управления отображением синхронизированы немного отличающимся способом в случае классов, производных от SPMobileBaseFieldControl, по сравнению со случаем классов, производных от BaseFieldControl, как это описано ниже.
Дополнительные сведения об отображении полей на страницах для мобильных устройств см. в разделе Настройка отображения поля на страницах для мобильных устройств.
Настраиваемые классы значений полей
При создании настраиваемого типа поля, который содержит комплексный вид данных, может потребоваться создание настраиваемого класса значений полей. Некоторые из встроенных типов полей требуют специальные типы для комплексных значений. Например, объекты типа поля SPFieldLookup принимают значения особого типа, который представлен с помощью класса SPFieldLookupValue. Дополнительные сведения о создании настраиваемых классов значений полей см. в разделе Создание настраиваемого класса значения поля.
Свойство ViewFieldsOnly и объединения
При использовании объекта SPQuery для представления запроса Collaborative Application Markup Language (CAML) можно использовать свойства ViewFields и ViewFieldsOnly для обеспечения того, чтобы запрос не получал лишние поля из базы данных контента. При использовании поставщика LINQ для SharePoint для запросов данных списка ключевое слово LINQ select может быть использовано с той же целью. Существует также свойство Joins, позволяющее запросу объединять два списка или более. В качестве альтернативы поставщик LINQ для SharePoint поддерживает ключевое слово join. Дополнительные сведения см. в разделе Соединения списков и проекции.
XML-код, применяемый для типов столбцов и полей
Существует значительное число разметок XML, включенных в определение типов столбцов и полей.
Определения типов полей
Подробное определение типа поля предоставляется элементом Field, который является частью основной схемы List. Дополнительные сведения см. в статье Элемент Field (List). Если поле развертывается как часть компонента, этот же элемент используется в файле манифеста для этого компонента. Дополнительные сведения см. в статье Определения полей.
XML-код типа поля и таблицы стилей XSLT
Поля, которые необходимо отрисовать, также быть зарегистрированы SharePoint Foundation в файлах, названных по шаблону fldtypes*.xml и расположенных в папке %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\XML. Формат такого файла — XML-файл типа поля. Разметка в таких регистрациях — это более простой тип определений полей. В ней приводятся некоторые основные характеристики типа поля и определяется сборка и управляемый класс типа поля. (Доступ только для чтения к определению типа поля доступен в объектной модели с помощью класса SPFieldTypeDefinition.)
В представлениях списков значения полей отрисовываются таблицей стилей XSLT. Заголовки каждого столбца также отрисовываются таблицей стилей XSLT. Таблицы стилей XSLT можно создать для настраиваемых полей или для переопределения стандартной отрисовки существующих полей. Все таблицы стилей сохраняются в папке %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\LAYOUTS\XSL.
Пользовательские элементы управления ASP.NET
Пользовательские элементы управления ASP.NET, определенные в файлах ascx, могут использоваться при разработке типов полей для следующих двух целей. Сначала поле отрисовывается в формах отображения, создания и редактирования с помощью элементов управления визуализацией (см. раздел BaseFieldControl и его производные выше) и шаблона отображения. Шаблон отображения определен в элементе <RenderingTemplate> в файле ascx в папке %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\ControlTemplates. Он представлен в объектной модели классом RenderingTemplate. Этот класс предоставляет простой в использовании уровень абстракции на вершине системы пользовательских элементов управления в виде шаблонов ASP.NET. Дополнительные сведения о шаблонах отображения и их взаимосвязи с элементами управления отображением см. в разделе Шаблоны отображения. Затем, если само поле содержит переменные свойства с разными значениями в различных списках, включающих это поле, следует создать элемент управления для изменения свойства в виде пользовательского элемента управления в файле ascx. Дополнительные сведения об этой задаче см. в статье Отображение свойств настраиваемого типа поля.
Типы присоединения в схеме запросов
Collaborative Application Markup Language (CAML) Схема Query включает элемент Элемент Join (View), который позволяет присоединяться к спискам в запросе CAML таким образом, что один список имеет столбец Lookup, который берет значения из столбца в другом списке. Этот элемент также дает возможность использовать явные и неявные присоединения в запросе LINQ, использующем поставщик LINQ для SharePoint.
Области, связанные с разработкой столбцов и типов полей
Базовые элементы: списки и библиотеки документов
Стандартный блок: типы контента
Дополнительные сведения о разработке столбцов и типов полей
Расширенные и подробные сведения по использованию столбцов и типов полей в проектах разработки находятся в разделе Подробное описание инфраструктуры разработки в SharePoint Foundation в темах по Формы списка, Столбцы и Типы настраиваемых полей. Сведения о разработке отображения полей для мобильных устройств см. в разделе Настройка отображения поля на страницах для мобильных устройств.
Чтение значения определенного поля в определенном элементе списка является одной из задач, описанных в статье Основные задачи программирования SharePoint. Дополнительные сведения см. в статье Практическое руководство. Чтение значения поля в элементе списка.
Дополнительные сведения о запросе данных в SharePoint Foundation см. в разделе Составление запросов и извлечение данных.