SSRS ReportingService2010 изменить встроенный источник данных на общий источник данных

У меня SQL Server 2008 с SSRS установлен на одном сервере и SQL Server 2008 R2 с SSRS установлен на новом сервере. Я хочу перенести более 200 отчетов, а также несколько общих расписаний и пару источников данных с первого сервера на второй, используя API-интерфейс веб-службы SSRS. Для простоты, поскольку есть только несколько общих источников данных, я разработал источники с использованием интерфейса диспетчера отчетов.

К сожалению, те, кто был до меня, включали информацию об источниках данных в каждый отчет (строка подключения, логин, пароль и т. Д.). Я подумал, что сейчас самое время изменить их так, чтобы они указывали на общий источник данных, поэтому этого не нужно делать для каждого отчета, один за другим. Я могу создавать отчеты на новом сервере просто отлично, используя CreateCatalogItem, но я могуКажется, он определяет, как правильно перейти от встроенного источника данных к общему источнику данных.

До сих пор я пробовал оба SetItemReferences:

itemRef.Reference = "/Data Sources/TMS";
itemRef.Name = "TMS";
itemRef.Reference = "/Data Sources/TMS";

rs2010.SetItemReferences(catItem.Path, new ReportService2010.ItemReference[] { itemRef });

и SetItemDataSources:

ReportService2010.DataSourceReference dataSourceRef = new ReportService2010.DataSourceReference();
dataSourceRef.Reference = "/Data Sources/TMS";

ReportService2010.DataSource dataSource = new ReportService2010.DataSource();
dataSource.Name = "TMS";
dataSource.Item = dataSourceRef;

rs2010.SetItemDataSources(catItem.Path, new ReportService2010.DataSource[] { dataSource });

Оба метода приводят кNotFoundException» при попытке создать отчет со встроенным источником данных, но оба они прекрасно работают с отчетами, которые уже указывают на общий источник данных.

Кроме того, я искал решение по всему Google, а также в StackOverflow, но ничего не нашел. Кто-нибудь может указать мне правильное направление здесь?

Ответы на вопрос(1)

Решение Вопроса

и у меня появилась блестящая идея, которая в итоге сработала. Последний код, который я использовал, приведен ниже:

List<reportservice2010.itemreference> itemRefs = new List<reportservice2010.itemreference>();
ReportService2010.DataSource[] itemDataSources = rs2010.GetItemDataSources(catItem.Path);

foreach (ReportService2010.DataSource itemDataSource in itemDataSources)
{
    ReportService2010.ItemReference itemRef = new ReportService2010.ItemReference();
    itemRef.Name = itemDataSource.Name;
    itemRef.Reference = "/Data Sources/TMS";
    itemRefs.Add(itemRef);
}

rs2010.SetItemReferences(catItem.Path, itemRefs.ToArray());
</reportservice2010.itemreference></reportservice2010.itemreference>

Проблема заключалась в том, что я не использовал то же имя источника данных, которое было найдено в файле отчета .rdl. Я был в состоянии определить, какое имя должно быть с помощью метода GetItemDataSources. Так как этот метод возвращает массив и может иметь более одного элемента в указанном массиве, я перебрал его, чтобы создать несколько ItemReferences, если существует более одной, хотя я сомневаюсь, что это случается очень часто, если вообще происходит.

 glenn garson26 мар. 2016 г., 19:47
Ницца! Спасибо. Было бы неплохо, если бы в документации Microsoft говорилось, как это сделать.
 KenD20 февр. 2013 г., 12:30
Спасибо - ваш код помог мне реализовать нечто очень похожее.

Ваш ответ на вопрос