Практическое руководство. Создание настраиваемого типа поля
Дата последнего изменения: 3 марта 2011 г.
Применимо к: SharePoint Foundation 2010
В этой статье
1. Создание определения типа поля
2. Создание класса поля
3. (Необязательно) Создание пользовательской таблицы стилей XSLT
4. Создание класса элемента управления визуализацией
5. Создание одного или нескольких шаблонов визуализации
6. (Необязательно) Создание типа значений поля
7. (Необязательно) Создание элемента управления для редактирования
8. Развертывание элементов
Различия в отображении полей для мобильных устройств и для компьютеров
В этом разделе описывается процесс создания пользовательского типа поля и определения способа его визуализации в представлениях списков и в формах просмотра, создания и редактирования.
Конкретный пример создания пользовательского поля и определения его визуализации см. в разделе Пример: создание типа настраиваемого поля.
1. Создание определения типа поля
Определение типа поля — это XML-файл, содержащий сведения, необходимые Microsoft SharePoint Foundation для регистрации типа поля и правильной визуализации поля. Важнее всего, что он содержит данные о сборке, содержащей скомпилированный тип поля.
Дополнительные сведения об определениях типов полей см. в разделе Практическое руководство. Создание определения настраиваемого типа поля.
2. Создание класса поля
Класс поля — это класс, экземпляры которого могут представлять конкретные поля, основанные на пользовательском типе поля. Этот класс должен наследоваться от класса SPField или одного из классов SharePoint Foundation, производных от него. Класс компилируется в сборку со строгим именем и развертывается в глобальном кэше сборок. В контексте представления списка объект SPField представляет столбец и его свойства, например свойство, указывающее, может ли выполняться его сортировка. В контексте режимов отображения, создания и редактирования объект SPField представляет конкретное поле элемента списка — ячейку в таблице, образующей список — и значение этой ячейки в базе данных контента.
Дополнительно этот класс может содержать пользовательскую проверку данных для этого типа поля. Сведения о пользовательской проверке см. в разделеПроверка данных в настраиваемых полях.
Дополнительные сведения о пользовательских классах полей см. в разделе Инструкции. Создание настраиваемого класса поля.
3. (Необязательно) Создание пользовательской таблицы стилей XSLT
Обычно для визуализации полей в представлении списка в SharePoint Foundation используются таблицы стилей XSLT. По умолчанию встроенные таблицы стилей SharePoint Foundation просто визуализируют значение поля в виде неформатированного текста. Если требуется другой вариант визуализации представлений списков, то одним из основных компонентов системы визуализации пользовательских полей является пользовательская таблица стилей XSLT. Ее называют в соответствии с шаблоном fldtypes_*.xsl и развертывают в папку %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\LAYOUTS\XSL. Пользовательская таблица стилей обладает приоритетом относительно таблицы стилей по умолчанию.
Заголовок в верхней части столбца в представлениях списков также визуализируется с помощью таблицы стилей XSLT, и создавать новую таблицу стилей, переопределяющую встроенную, следует тогда и только тогда, когда требуется нестандартная визуализация заголовка столбца для пользовательского типа поля.
Дополнительные сведения о создании таблицы стилей XSLT для пользовательского поля см. в статье Инструкции. Настройка визуализации поля в представлении списка.
Примечание |
---|
Если имеется устаревший пользовательский тип поля, созданный в одной из предыдущих версий SharePoint Foundation и по-другому отображающийся в представлениях списков, создаваемых в процессе визуализации по умолчанию в системе визуализации XSLT, XSLT-визуализацию для этого поля можно отключить. Для этого можно добавить <Field Name="CAMLRendering">TRUE</Field> в качестве потомка элемента FieldType в файле fldtypes*.xml, содержащем определение Collaborative Application Markup Language (CAML) устаревшего пользовательского поля. В этом случае поле (и заголовок столбца) в представлениях списков будет визуализироваться в соответствии с элементами RenderPattern. Дополнительные ведения см. в статье Элемент RenderPattern (Field Types). |
4. Создание класса элемента управления визуализацией
Класс элемента управления визуализацией используется в сочетании с шаблоном визуализации (см. в следующем разделе) для отображения полей в режимах создания, редактирования и отображения. Этот класс должен наследоваться от класса BaseFieldControl или одного из классов SharePoint Foundation, производных от данного класса. Этот класс компилируется в ту же сборку, что и класс поля.
Логика проверки реализована членами Validate, IsValid и ErrorMessage элемента управления отображением поля и методом GetValidatedString соответствующего типа поля. (Метод Validate может быть вызван с помощью метода CreateChildControls.)
Дополнительные сведения об элементах управления визуализацией см. в разделе Инструкции: создание элемента управления визуализацией поля.
5. Создание одного или нескольких шаблонов визуализации
У каждого элемента управления визуализацией поля есть хотя бы один связанный с ним шаблон визуализации поля, используемый для визуализации поля в режиме создания, редактирования или отображения. Для создания этой связи в качестве значения одного из свойств элемента управления визуализацией поля указывается идентификатор шаблона визуализации поля. Во время визуализации SharePoint Foundation находит нужный шаблон, просматривая идентификаторы всех шаблонов визуализации, объявленных в ASCX-файлах в папке %ProgramFiles%\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\CONTROLTEMPLATES (которые загружаются при запуске веб-приложения). Метод CreateChildControls элемента управления визуализацией часто выполняет "окончательную доводку" визуализации поля, но основная работа по визуализации выполняется шаблоном. Обычно метод CreateChildControls назначает значения по умолчанию дочерним элементам управления для данного элемента управления в режиме создания. Он назначает текущие значения поля дочерним элементам управления в режимах редактирования и отображения. Этот метод также может выполнять другие действия по окончательной доводке визуализации, например назначить CSS-класс дочернему элементу управления Label.
Обычно необходимы два шаблона визуализации: один для визуализации редактируемого поля в режимах создания и отображения, а другой для визуализации поля только для чтения в режиме отображения. Однако можно использовать один шаблон визуализации для всех трех режимов или отдельный шаблон визуализации для каждого режима. Можно даже использовать несколько шаблонов для одного режима, определяя логику вызова того или иного шаблона в зависимости от особенностей контекста, например контекста конкретного пользователя, типа списка или веб-сайта, в котором появляется поле.
Дополнительные сведения о шаблонах визуализации см. в разделе Практическое руководство. Создание шаблонов отображения полей.
В качестве дочерних элементов управления шаблону визуализации для режимов создания и редактирования обычно требуются интерактивные элементы управления, такие как элементы управления редактируемых текстовых полей, флажков, переключателей и раскрывающихся списков. Но в режиме отображения обычно требуются только элементы управления Label или Literal либо другие статические элементы управления отображением. По этой причине для режима отображения, вероятно, понадобится создать отдельный шаблон визуализации. Этот шаблон задается (с помощью идентификатора) в свойстве DisplayTemplateName. Основной шаблон для использования вне режима отображения задается свойством TemplateName().
Шаблон визуализации, фактически используемый для визуализации поля в любом заданном контексте, — это шаблон, возвращаемый свойством ControlTemplate элемента управления визуализацией. Метод доступа get этого свойства выбирает среди шаблонов визуализации, связанных с элементом управления визуализацией, используя следующие критерии:
текущий контекст HTTP;
режим элемента управления;
является ли поле обязательным;
должно ли поле, если оно является численным, отображаться в виде процентов;
является ли элемент списка папкой.
Это свойство можно переопределить, чтобы его метод доступа get проверял режим элемента управления и возвращал DisplayTemplate для режима отображения. (Если для свойства DisplayTemplate не был явно установлен другой шаблон, оно возвращает шаблон, определяемый свойством DisplayTemplateName.) Если в методе доступа get для свойства ControlTemplate не требуется другая логика, в режимах создания или редактирования можно вызывать метод доступа get базового свойства.
Примечание |
---|
Другой способ назначения шаблона визуализации в режиме отображения — применение метода CreateChildControls, который в режиме отображения присваивает свойству DisplayTemplateName значение TemplateName. (Если свойство ControlTemplate не было переопределено, оно возвращает Template, а если для последнего не был переопределен метод доступа get, оно возвращает шаблон, заданный свойством TemplateName.) Возможным недостатком использования метода CreateChildControls является то, что он не выполняется в контексте, в котором не отображается поле, например когда в процессе отладки в объектной модели проверяется значение свойства ControlTemplate. |
6. (Необязательно) Создание типа значений поля
При создании пользовательского класса поля, которому для данных поля требуется особая структура данных, можно создать класс значений (или структуру), содержащий данные поля.
Дополнительные сведения о создании пользовательских классов значений см. в разделе Создание настраиваемого класса значения поля.
7. (Необязательно) Создание элемента управления для редактирования
Для всех типов полей требуются имя, тип данных, описание и другие общие свойства, но во многих типах полей также используются свойства, присущие только полям этого конкретного типа. Эти переменные свойства задаются пользователями в пользовательском интерфейсе при создании нового столбца, основанного на этом типе поля. Обычно элемент в определении типа поля (см. выше в этом разделе) определяет, как визуализируются эти элементы управления установки свойств. Но иногда для редактирования требуется специальный элемент управления. Такой элемент управления определяется в пользовательском элементе управления, то есть в ASCX-файле, у которого обычно есть файл кода программной части, содержащий соответствующую логику. Создавать специальный элемент управления для редактирования рекомендуется, если для значений, которые пользователи могут выбрать при настройке нового столбца, нужно выполнить особые функции, например выполнить сложные вычисления, поиск значений в источниках данных или настраиваемую проверку данных.
Примечание |
---|
Элемент управления для редактирования переменных свойств не следует путать с описанными выше ASCX-файлами шаблонов визуализации. Шаблон визуализации отображает поле и его значение на странице для создания, редактирования или отображения конкретного элемента существующего списка, столбцы которого обычно уже определены. Элемент управления для редактирования переменных свойств, напротив, отображает некоторые свойства типа поля при создании столбца на основе этого типа. |
Дополнительные сведения об элементах управления для отображения и редактирования переменных свойств пользовательского типа поля см. в разделах Отображение свойств настраиваемого типа поля и Элементы управления редактора для свойств типа поля.
8. Развертывание элементов
Сведения о том, где развертывать различные созданные классы и файлы, см. в разделе Развертывание типов настраиваемых полей.
Различия в отображении полей для мобильных устройств и для компьютеров
В SharePoint Foundation визуализация поля с настраиваемыми элементами управления визуализацией для мобильных устройств подобна соответствующей операции для компьютеров. Однако следует помнить о следующих различиях:
Страницы для мобильных устройств — это набор страниц, полностью отличающийся от обычных страниц, и ссылающийся на другой набор шаблонов RenderingTemplate.
Шаблоны RenderingTemplate для мобильных устройств объявляются в файле MobileDefaultTemplates.ascx, а не в DefaultTemplates.ascx.
Элементы управления визуализацией полей для мобильных устройств используют собственное пространство имен Microsoft.SharePoint.MobileControls (вместо Microsoft.SharePoint.WebControls) и наследуются от классов System.Web.UI.MobileControls в ASP.NET, а не от классов System.Web.UI.WebControls.
Иерархия наследования для элементов управления визуализацией полей для мобильных устройств немного отличается от иерархии наследования для обычных элементов управления визуализацией полей. Например, функции TemplateBasedControl и FormComponent для обычной визуализации полей объединены в классе SPMobileComponent.
В настраиваемых элементах управления визуализацией полей для мобильных контекстов чаще используется метод CreateChildControls элемента управления для визуализации поля и, соответственно, реже используется шаблон визуализации, чем в случае настраиваемых элементов управления визуализацией полей, создаваемых для компьютерных браузеров. Более того, для настраиваемых элементов управления визуализацией, предназначенных для мобильных устройств, метод CreateChildControls переопределяется редко. Вместо этого обычно переопределяется один из четырех других методов, вызываемых методами CreateChildControls:
Дополнительные сведения о визуализации страниц для мобильных устройств и настраиваемых элементах управления визуализацией полей см. в статьях Система отображения страниц для мобильных устройств и Пошаговое руководство. Создание настраиваемого элемента управления визуализацией для мобильных страниц.
См. также
Задачи
Пример: создание типа настраиваемого поля
Концепции
Инструкции. Создание настраиваемого класса поля
Проверка данных в настраиваемых полях
Создание настраиваемого класса значения поля
Практическое руководство. Создание определения настраиваемого типа поля
Отображение свойств настраиваемого типа поля
Элементы управления редактора для свойств типа поля
Инструкции: создание элемента управления визуализацией поля
Практическое руководство. Создание шаблонов отображения полей