Работа со сложными типами данных
Дата последнего изменения: 16 апреля 2010 г.
Применимо к: SharePoint Server 2010
В этой статье
Обзор сложных типов в службе BCS
Сложное форматирование для внешних типов контента службы BCS с помощью форматирования строк
Уровень служб, совместимый с SharePoint
Сборки подключения .NET
Расширение системы типов внешних списков с помощью пользовательских типов полей
Настройка форм списков SharePoint
Настройка форм InfoPath
Используя Microsoft Business Connectivity Services (BCS), можно различным образом отображать сложные типы данных во внешних списках. Сложные типы — это типы данных, содержащие другие подтипы, например адрес, состоящий из полей улицы, города, области и индекса. По умолчанию сложные типы не могут быть отображены на уровне представления в Microsoft SharePoint 2010 и Microsoft Office 2010, хотя и поддерживаются схемой внешних типов контента. По этой причине, чтобы включить отображение этих сложных типов, необходимо выполнить дополнительные действия. Данный раздел содержит обзор сложных типов в Business Connectivity Services, а также предлагает различные решения для отображения этих сложных типов в пользовательском интерфейсе.
Обзор сложных типов в службе BCS
Данные во внешних системах часто предоставляются с помощью детализированных веб-служб со сложными структурами передачи сообщений. Хотя схема для внешних типов контента и поддерживает структуры данных параметров практически любой сложности, сложные типы часто оказываются причиной несовместимостей с технологиями представления в SharePoint и Microsoft Office.
Внешние типы контента определяют стереотипные операции, многим из которых требуется технически сложная структура параметров. Специальный метод поиска (также называемый Read Item (чтение элемента) в SharePoint Designer) должен возвращать единственный сложный тип, содержащий набор полей внешнего типа контента, например тип "Customer" (заказчик) с полями "CustomerID" (идентификатор заказчика), "Name" (имя) и "PhoneNumber" (номер телефона). Дочерние элементы этой структуры сопоставляются с столбцами внешнего списка. В большинстве внешних типов контента предусмотрен метод поиска, возвращающий коллекцию того же типа, что и конкретный метод поиска. Проблемы возникают, когда у любого из полей есть дочерние элементы или когда тип поля не поддерживается технологиями представления, например, если поле "CustomerAddress" (адрес заказчика) добавлено с структура заказчика, у которой в свою очередь есть дочерние элементы, определяющие улицу ("Street"), город ("City"), штат ("State") и индекс ("PostalCode").
Одним из основных компонентов пользовательского интерфейса для отображения внешних данных в SharePoint является внешний список. С точки зрения структуры внешний список — это плоское представление данных на основе строк. Если не прилагать дополнительных усилий, сложные типы и простые типы, не поддерживаемые системой типов списков SharePoint, будут пропускаться в представлении списка.
Схема внешних типов контента в Business Connectivity Services поддерживает понятие комплексного форматирования для сценариев "только чтение", если сложный тип можно преобразовать в простую строку, используя строку форматирования Microsoft .NET Framework (см. подраздел Сложное форматирование для внешних типов контента службы BCS с помощью форматирования строк дальше в этом разделе). Если поддержка только чтения недостаточна или если сложный тип нельзя преобразовать с помощью этого метода, SharePoint 2010 позволяет создавать пользовательские типы полей, обеспечивающие управление поведением, связанным с визуализацией и редактированием внешних списков и форм элементов списков.
Формы — это основной пользовательский интерфейс для элементов внешних списков. Сложные типы создают проблемы при формировании форм, так как их сложно конструировать автоматически, одновременно поддерживая минимальный уровень визуальной привлекательности. Внешние списки можно связать с формами списков SharePoint (основанными на ASP.NET) или формами Microsoft InfoPath 2010. В подразделах Настройка форм списков SharePoint и Настройка форм InfoPath этого раздела описывается, как отображать сложные типы в этих формах.
Сложное форматирование для внешних типов контента службы BCS с помощью форматирования строк
В ситуациях, в которых сложный тип является типом "только для чтения" во внешнем списке и может быть преобразован в строку, Business Connectivity Services поддерживает использование строки форматирования для дескриптора типа, чтобы визуализировать сложный тип во внешнем списке или форме элемента как строку. Ниже приведен пример использования форматирования строки для преобразования сложного типа Customer, упомянутого ранее.
<TypeDescriptor TypeName="CustomerAddress" IsCollection="false" Name="CustomerAddresses" >
<TypeDescriptors>
<TypeDescriptor TypeName=" CustomerAddress " Name="CustomerAddress" >
<Properties>
<Property Name="ComplexFormatting" Type="System.String" />
<Property Name="FormatString" Type="System.String">{0}, {1}, {2} {3}</Property>
</Properties>
<TypeDescriptors>
<TypeDescriptor TypeName="System.String" Name="Street"/>
<TypeDescriptor TypeName="System.String" Name="City" />
<TypeDescriptor TypeName="System.String" Name="StateProvince" />
<TypeDescriptor TypeName="System.String" Name="PostalCode" />
</TypeDescriptors>
</TypeDescriptor>
</TypeDescriptors>
</TypeDescriptor>
Уровень служб, совместимый с SharePoint
Архитектурно оптимальным подходом к работе со сложным типом данных является создание уровня служб с плоской структурой параметров, существующего в рамках ограничений уровней представления. Продолжая пример из предыдущего подраздела, если веб-служба возвращает все поля, представляющие заказчиков на одном и том же уровне, SharePoint позволяет визуализировать и редактировать элементы заказчиков без каких-либо изменений.
Необходимо, однако, взвесить этот подход и его издержки (написание, размещение и поддержка пользовательского кода) с издержками, связанными с обработкой сложных типов на уровнях представления для каждого приложения, используя сложную службу. Во многих корпоративных развертываниях уровень служб уже существует, особенно для таких бизнес-сущностей, как заказчик (Customer) или продукт (Product), которые широко используются во многих приложениях. Стоимость добавления методов для использования с SharePoint 2010 может оказаться меньше стоимости обработки всех сложностей типа в каждом приложении.
Сборки подключения .NET
Если добавление или расширение уровня служб не подходит, SharePoint 2010 позволяет упаковать определение внешнего типа контента в класс, инкапсулирующий бизнес-логику, обеспечивающую работу внешнего типа контента. Разработчик может определить уплощенный интерфейс внешнего типа контента, используя конструктор подключения к бизнес-данным в Visual Studio 2010, и реализовать любую нужную логику агрегации и преобразования типов в заглушках кода, создаваемых этим инструментом. После завершения реализации можно использовать Visual Studio для создания пакета решения (WSP-файла), который содержит определение внешнего типа контента и сборку и который можно импортировать в SharePoint 2010.
![]() |
---|
Чтобы импортировать этот тип пакета необходимы привилегии администратора фермы, так как код, поддерживающий внешний тип контента, выполняется в режиме полного доверия. Сведения о создании сборок соединителей .NET см. в статье, посвященной использованию конструктора подключения к бизнес-данным в Visual Studio 2010 (Возможно, на английском языке), написанную Борисом Шолем (Boris Scholl). |
Так как изменение поведения тыловых служб подходит не всегда, SharePoint 2010 также предоставляет несколько способов расширить уровень представления для обработки сложных типов.
Расширение системы типов внешних списков с помощью пользовательских типов полей
Инфраструктура списков SharePoint 2010 поддерживает ряд универсальных типов данных, достаточных для большинства типовых сценариев ввода данных. Чтобы представить сложные элементы бизнес-данных, например адреса, SharePoint 2010 позволяет определять пользовательские типы полей, которые можно сделать доступными на всех веб-сайтах фермы SharePoint. Центральным для пользовательского типа поля является его файл определения. Он определяет способ визуализации поля в представлениях списков и элементов. Он также определяет любые переменные свойства и ссылку на сборку, реализующую этот тип поля. Класс поля наследуется от класса SPField и представляет собой конкретные поля на основе пользовательского типа поля. Класс поля определяет возможности, такие как сортировка, столбца на основе пользовательского поля, определяет поведение ячейки в списке и базе данных контента, а также может реализовывать пользовательскую логику проверки.
Большинству сложных пользовательских типов полей также требуется класс управления визуализацией, шаблон визуализации, или пользовательский класс значения. Дополнительные сведения о пользовательских типах полей см. в разделах Типы настраиваемых полей и Пример: создание типа настраиваемого поля.
После определения пользовательского типа на него можно ссылаться, используя дескрипторы типа в определении внешнего типа контента, как показано в следующем примере.
<TypeDescriptor TypeName="Customer.Address” Name="CustomerAddress" DefaultDisplayName="Customer Address">
<Properties>
<Property Name="SPCustomFieldType" Type="Customer.Address">Customer Address</Property>
</Properties>
</TypeDescriptor>
При таком определении дескрипторов типа внешний список, основанный на внешнем типе контента, может определить, что дескриптор типа "CustomerAddress" ссылается на пользовательский тип поля и визуализировать его соответствующим образом.
Настройка форм списков SharePoint
При создании нового внешнего списка SharePoint 2010 автоматически создает формы, служащие для создания, редактирования и просмотра элементов списка. Формы SharePoint основаны на элементах управления .NET Framework и предоставляют аналогичные возможности расширения, которые можно использовать для правильной визуализации сложных типов. Пользовательские типы полей, описанные в этом разделе, представляют собой механизм расширения, используемый для сложных типов чаще всего. В более простых случаях можно попробовать расширить исходное поле SharePoint Foundation. Дополнительные сведения о настройке форм списков см. в разделе Формы списка.
Настройка форм InfoPath
SharePoint 2010 также поддерживает использование форм InfoPath для просмотра и редактирования элементов списков. InfoPath предоставляет возможности, упрощающие для пользователей, не являющихся разработчиками, создание привлекательных форм с надежной проверкой и обширным условным форматированием. Другим преимуществом форм InfoPath по сравнению со стандартными формами списков является их способность работать в браузере, или в качестве автономных форм, или в клиентах с расширенными возможностями. Формы InfoPath — это технология форм, используемая для автономной работы с данными внешних списков в Microsoft SharePoint Workspace 2010. В SharePoint 2010 нельзя создавать формы InfoPath для внешних списков в InfoPath Designer. Вместо этого можно создавать формы InfoPath в SharePoint Designer либо из внешнего списка, либо с помощью конструкторов внешних типов контента. После создания эти формы можно настроить в InfoPath Designer.
Если внешние типы контента содержат сложные типы, создать для них визуально привлекательный макет, используя стандартную логику, трудно. Соответственно, генератор форм создает пустую форму. Однако, так как InfoPath все же поддерживает сложные типы в конструкторе, созданную форму можно открыть в InfoPath Designer из конструктора внешнего списка в SharePoint Designer. Пользовательские типы доступны в списке полей, см. рисунок 1, и могут быть макетированы вручную.
Рисунок 1. Список полей в InfoPath Designer
После завершения настройки измененную форму необходимо передать обратно во внешний список, используя кнопку Быстрая публикация меню Файл.
Рисунок 2. Кнопка "Быстрая публикация" в InfoPath Designer