Одним из компонентов Microsoft Office SharePoint Server (MOSS) 2007 является служба каталога бизнес-данных Business Data Catalog (BDC). Основная задача службы BDC — сделать данные, хранящиеся и используемые в корпоративных бизнес-приложениях, доступными пользователям, процессам и другим приложениям, и при этом обеспечить удобный доступ к этим данным. При необходимости достаточно квалифицированный пользователь (обычно разработчик) может получить необходимые данные непосредственно из бизнес-приложений, а BDC позволяет их получить и предоставить к ним доступ с помощью платформы MOSS. В этой статье рассматривается архитектура BDC и на примере показаны возможности этой службы по извлечению бизнес-данных.

Как ясно из названия, BDC представляет собой каталог бизнес-данных. Собственно, в каталоге данные не хранятся. Например, что находится в каталоге товаров обычного магазина? Только описания товаров, которые позволяют найти нужные товары. Так и BDC — управляемый метаданными коннектор, позволяющий подключиться и получить необходимые данные, а также обеспечивающий доступ к этим данным по запросу. При этом данные остаются собственно в приложениях, а BDC действует как средство передачи данных в режиме только для чтения. BDC может кэшировать часть данных или получить их физические копии в SharePoint, но если требуется записать информацию в бизнес-приложение на сервере, придется воспользоваться другими инструментами (скорее всего, самим бизнес-приложением).

Существует несколько способов получения данных, описанных в каталоге BDC. Без дополнительных настроек MOSS позволяет получить доступ к данным через Web-компоненты Web Parts, столбцы в списках и библиотеках, поля профилей пользователей, а также через результаты поиска. И конечно, решив заняться программированием, вы можете использовать BDC для получения и обработки данных из бизнес-приложений. Но, как мы убедимся далее, впечатляющих результатов можно добиться, даже не написав ни строчки программного кода. Логическая архитектура BDC представлена на рисунке.

Описание данных через Application Definition File

Как уже было сказано, заниматься кодированием не обязательно. Это действительно так, но все же для описания этих данных потребуется приложить некоторые усилия. Здесь нужны владелец бизнес-приложения и ИТ-специалист, который располагает сведениями о физическом размещении данных, способах хранения и методах доступа к ним. Пользователь бизнес-приложения описывает назначение данных и то, как они используются для специфических требований бизнеса. На основе этих сведений ИТ-специалист должен создать файл описания приложения ADF, который представляет собой файл XML с описанием этих данных, и загрузить этот файл в BDC.

BDC поддерживает два метода доступа к данным — прямые запросы в большинство популярных баз данных через драйверы ADO. NET, OLE DB и ODBC или запросы к Web-службам приложений, которые могут собрать и предоставить нужные данные. В этой статье используется только первый метод, второй мы рассмотрим в другой раз. Возьмем пример простой базы данных, который показывает данные в виде двух таблиц (см. экран 1). Конечный результат представляет собой страницу, показанную в сайте группы MOSS (см. экран 2). В этих таблицах должны быть перечислены, например, все фильмы, в которых играет один и тот же актер. Анализ данных показывает, что столбец ActorId связывает две таблицы, при этом родительской является таблица Actor, а дочерней — таблица Movie.

Забудем на время о BDC и представим основные действия, которые следовало бы запрограммировать для получения результата. Сначала требуется найти нужную базу данных и подключиться к ней с правами определенной учетной записи. Затем необходимо открыть таблицы, выполнить некоторые запросы и получить результаты из различных строк и столбцов. Точнее говоря, получить данные из родительской таблицы и связать данные родительской и дочерней таблиц. И наконец, требуется сформатировать и отобразить полученные результаты.

Служба BDC позволяет абстрагироваться от всех этих деталей, а файл ADF, по существу, описывает, как выполнить каждый из перечисленных выше шагов, за исключением форматирования и отображения. Последний шаг выполняется ориентированными на работу с BDC Web-компонентами Web Parts, нужно лишь перечислить столбцы, свойства пользовательского профиля и выполнить поиск.

Файл ADF должен соответствовать схеме, определенной в файле C:Program FilesMicrosoft Office Servers12.0Bindcmetadata.xsd на сервере SharePoint. Эта схема определяет соединения, логические объекты, методы, фильтры, действия и отношения. Рассмотрим отдельно эти компоненты и соответствующий XML-код, который был разработан для решения нашей задачи.

Подключение

Приведенный в листинге 1 блок LOBSystemInstance определяет информацию для регистрации и подключения к базе данных, а также каталог, который требуется открыть. При этом часть строк переносится из-за ограничений формата статьи. Для аутентификации BDC может обратиться к базе данных от имени системной учетной записи или с реквизитами вызывающего пользователя.

Этот код показывает, как определен запрос SpiesInstance; он обращается к таблице Spies в базе данных SQL Server с именем dc2sqlexpress с полномочиями вызывающего пользователя. Из чего, кстати, следует, что вызывающий пользователь должен обладать достаточными правами для доступа к данным.

Логические объекты

Логический объект описывает один элемент бизнес-приложения. Код в листинге 2 определяет два элемента — актера и фильм. Каждый объект содержит элементы, которые определяют идентификаторы, методы, фильтры и действия. Следует воспринимать идентификатор как основной ключ в таблице базы данных. Он однозначно определяет частный запрос объекта, который в нашем случае представляют основные ключи — ActorId и MovieId. Следует иметь в виду, что язык XML чувствителен к регистру, поэтому надо убедиться, что имена точно соответствуют именам столбцов базы данных.

Контейнер свойств определяет характеристики объекта. Приведенный в листинге 2 код показывает, что столбцы ActorName и MovieName (имя актера и название фильма) образуют отображаемое по умолчанию имя для данного объекта. При этом определяется также выполняемое по умолчанию действие View Profile, которое будет рассмотрено ниже.

Методы

Компонент методов определяет методы, с помощью которых можно найти экземпляры объекта, и очень напоминает определение интерфейса. Например, метод может быть SQL-оператором, хранимой процедурой для базы данных или Web-методом для Web-службы. Некоторые методы должны быть заданы, чтобы определенная функциональность SharePoint могла работать. Например, если данные должны индексироваться программой поиска, то необходимо определить метод IDEnumerator. Этот метод возвращает все допустимые идентификаторы объекта Entity ID, поэтому он может использоваться для перечисления всех экземпляров объекта. Набор инструментов MOSS 2007 SDK, доступный по адресу http://msdn2.microsoft.com/en-us/library/ms550992.aspx,  содержит более детальное рассмотрение типов методов, а также варианты применения для различных типов функциональности SharePoint.

В листинге 3 показано, что для объекта Actor я определил два метода: GetActors и GetMoviesForActor. Они принимают входные параметры и выполняют соответствующие запросы SQL для получения требуемого результата. Для каждого объекта требуется определить метод экземпляра, который возвращает один экземпляр этого объекта (type=SpecificFinder) или набор экземпляров объекта (type=Finder). Если метод не определить, невозможно будет использовать Web-компоненты Web Parts, получить список или выполнять поиск при обработке данных. В этом примере использован метод GetActors для выборки одного или всех актеров.

Параметры

Необходимо определить входные параметры, которые будут использоваться в качестве фильтров в запросах на вычислительной машине базы данных. Некоторые предоставляемые по умолчанию Web-компоненты позволяют выбрать, какие входные параметры будут использоваться для фильтрации. Необходимо также определить возвращаемые параметры для каждого метода. Как показано в листинге 4, определен фильтр Name, который будет выполнять сравнение с использованием шаблонов. Далее я связал этот фильтр с входным параметром, соответствующим столбцу ActorName (см. свойство AssociatedFilter контейнера TypeDescriptor, описывающее входной параметр Actor Name).

В листинге 2 также показан параметр с именем атрибута Actors. Он описывает возвращаемые столбцы таблицы и отображаемые имена для их использования.

Действия

Действия являются независимыми операциями, которые могут применяться к объекту. Они описываются в BDC, после чего могут использоваться в релевантных местах. Например, заданные действия появятся в меню Actions в Web-компоненте Business Data List. Их можно использовать для выполнения почти любого действия — например, дать ссылку на источник данных в исходном приложении для полного доступа к данным или ссылку на любое место на основе полученных данных. Например, предоставить ссылку на систему поиск Google или Windows Live или передать часть полученных данных в качестве результатов поиска.

Профиль просмотра View Profile представляет собой действие по умолчанию, получаемое с каждым объектом. В листинге 5 добавлены два других действия. Одно заполняет имя актера в поиске по базе данных Internet Movie Database, другое запускает ссылку URL, связанную со столбцом WebLink в записи об актере в таблице Actors. Можно добавить и другие действия через SharePoint после определения объекта в BDC.

 

Ассоциации

Ассоциации объединяют логические объекты. Типичный пример — две таблицы в базе данных, имеющей связь типа «один ко многим». В приведенном выше примере дано отношение актер–фильм, в котором появляется этот актер (см. листинг 6). Ассоциация определяет имя метода, который использовался для создания такого отношения.

 

Как мы видим, определение содержимого ADF предполагает, что заранее известна информация о реализации серверной части приложения. Создание правильного кода XML никогда не было тривиальной задачей, и разобраться с этим вопросом помогут примеры XML из учебной базы данных примеров Adventure-Works2000 SQL Server в MOSS SDK. Имеются также разработанные сообществом инструментальные средства и приложения независимых разработчиков (см. http://www.bdcmetaman.com/default.aspx),  которые помогут создавать правильные файлы ADF.

Импорт ADF

После того как файл ADF определен, его надо импортировать в Shared Services Provider. BDC является общей службой, и потому каталог открыт для любого Web-приложения или сайта, который объединен с общей службой. Для выполнения импорта используется Web-приложение Shared Services Provider Administration, доступ к которому осуществляется через SharePoint Central Administration. При импорте выполняется анализ XML, проверяется его связность и соответствие исходным данным, после чего все определения метаданных загружаются в базу данных общих служб. По завершении этого процесса логические объекты в базе данных общих служб будут доступны для других компонентов SharePoint (например, Web-компонентов, списков, пользовательских профилей и поиска). Логический объект Actor появится в Shared Services Provider Administration после успешного импорта файла ADF. Отображаемые поля будут иметь вид, заданный в ADF, — в нашем примере они полностью совпадают с полями исходной таблицы. Но создатель ADF может решить, какие именно данные следует взять из основного источника. Теперь посмотрим, как этот каталог может использоваться другими компонентами, например Web-компонентами, представлением и поиском.

Web-компоненты BDC

Теперь мы получили шесть Web-компонентов BDC, которые можно использовать для отображения логических объектов из BDC. Web-компоненты можно подключить для построения Web-страниц с очень сложной логикой. Теперь перейдем к применению Web-компонентов Business Data List Web Part и Business Data Related List Web Part, чтобы связать все воедино.

Web-компонент Business Data List Web Part позволяет выбрать из каталога и показать все экземпляры логического объекта в источнике внутренней базы данных. Это дает возможность отфильтровать запрос на внутренних данных на основе дескрипторов фильтра, FilterDescriptors, которые есть в файле ADF. Также можно организовать отображение данных, используя обычную таблицу стилей Extensible Style Language (XSL). В нашем примере Web-компонент отображает данные в этом разделе внизу слева (см. экран 2). Я определил настройку Web-компонента таким образом, что возвращаться будет каждый логический объект Actor без применения фильтрации.

Теперь можно воспользоваться Web-компонентом Business Data Related Links Web Part для создания заданного отношения между базами данных Actors и Movies в ADF. Настроив Web-компонент Related Links Web Part, можно увидеть все отношения, определенные в BDC. Таким образом, надо выбрать отношение ActorToMovie, потом применить связи Web-компонентов, чтобы получить отношение выбранный актер — фильмы с его участием. После задания логического объекта в каталоге определяется доступ ко многим местам, в том числе к столбцу в списке. Таким образом, определяя обычный список, показанный на экране 2, я указал столбец Actor как тип Business Data. Далее рассмотрим пользовательский интерфейс для просмотра каталога и выбора логического объекта, который надо разместить в этом столбце. Напомним, что в данном примере по умолчанию результирующим значением было поле ActorName, оно и будет показано. Данные, полученные через службу BDC, предназначены только для чтения, но они будут автоматически обновляться в этом пункте, если любая из колонок определена как записываемая. Эти функции позволяют объединять заказанные данные с данными, существующими в каком-то другом месте (и, по-видимому, сейчас они доступны только через бизнес-приложение).

Соединив все эти новые возможности, предлагаемые SharePoint Search через BDC, можно получить результаты поиска с закладками для актеров и ссылками на фильмы. При выборе ссылки появится другая страница с результатами поиска, где показаны все фильмы с участием этого артиста.

Подведем итоги

Если у вас возникла необходимость получить данные, которые находятся в серверной части бизнес-приложений, ответ можно получить через BDC. Служба BDC служит превосходным дополнением к технологиям SharePoint, несмотря на пока ограниченные возможности небольшого количества инструментов поддержки. Рекомендую читателям ознакомиться с более подробной информацией в MOSS SDK. Вооружившись этими знаниями и подробно изучив данные серверной части, можно приступить к общему использованию всех данных бизнес-приложений.

Кевин Лаахс (kevin.laahs@hp.com) — главный консультант группы HP Services Advanced Technology Group