Фактически, BCS без проблем позволяет решать только примитивные задачи, ну к примеру заCRUDить табличку SQL в список SharePoint. А чуть более сложные задачи требуют либо больших телодвижений, либо ну ОЧЕНЬ больших телодвижений... :(
Не вдаваясь в подробности, можно сказать, что BCS по-прежнему не идеален.
Антон Вишняков, за это ему отдельное спасибо, открыл мне глаза на еще один способ (помимо, конечно, "писать все руками") для интеграции данных SharePoint с внешними приложениями, который иногда может оказаться весьма полезным.
Способ заключается в использовании SQL Server Integration Services (SSIS) совместно с SharePoint List Source and Destination из OpenSource-проекта Microsoft SQL Server Community Samples: Integration Services.
Хочется немного рассказать об этом способе "на уровне теории", надеюсь эта информация будет полезна.
Те, кто видел DTS или работал уже с его обновленной версией - SSIS, наверняка представляют, что это такое. Если вкратце, SSIS позволяет задать источники данных, затем совершить над ними какие-нибудь преобразования, и конечный результат поместить в некий приемник данных.
Пример схемы преобразования данных в SSIS |
- Разделение и соединение данных - как вертикально (по столбцам), так и горизонтально (аналогично union all).
- Сортировка
- Группировка
- Подведение итогов
- Создание сводных таблиц (Pivot table)
- Собственные виды преобразований
В качестве источника данных и приемника данных могут выступать, в простейших случаях, таблицы и базы данных MS SQL, но также это могут быть Excel-таблицы, соединения OLE DB и ADO.Net, и т.д. Помимо встроенных источников и приемников, можно создавать собственные.
Источник и приемник для списков SharePoint в состав SSIS не входят, они были написаны отдельно и представляют собой решение Visual Studio, частично на C#, частично на VB.Net. Причем, это решение подойдет даже для 2007го SharePoint'а, поскольку не использует Client Object Model, а действуют через веб-сервис lists.asmx.
Следует отметить, что сделано все довольно дотошно. В частности, ребята постарались озаботиться такой немаловажной штукой, как производительность:
- Источник данных списка SharePoint запрашивает не весь список, а только затребованный его объем. Выборку колонок можно ограничить через дизайнер, а также можно задавать произвольные CAML-запросы.
- Есть настройка, которая позволяет задать количество строк "за этап". Для некоторых "широких" (с большим числом столбцов) списков такое вот блочное чтение позволяет увеличить итоговую производительность.
- Приемник данных обновляет только нужные колонки и только нужные строки (через Batch API).
Если решите попробовать, пример по созданию SSIS-проекта для интеграции с SharePoint описан на MSDN.
P.S. Сам пока не пробовал, так что это все пока только в теории, но думаю, этот способ вполне имеет шансы на успех. Надеюсь, будет возможность где-нибудь попробовать на рабочем проекте, если это удастся - я отпишусь! :)
Этот комментарий был удален автором.
ОтветитьУдалитьВ предыдущем каменте был мусор почему-то :-)
ОтветитьУдалитьЯ использовал этот метод. Отлично работает. Только Lookup-поля приходят в виде текста "ид;#значение". Но я доработал компонент SharePoint List Source так, чтобы он для lookup-поля генерировал два столбца: один для ид, другой для значения.