Как добавить встроенный источник данных в RDL в коде C#?

Я пытаюсь использовать SSRS в ситуации с несколькими арендаторами. Базовая версия, которую мы хотим поддерживать, — это SQL Server 2008, но если потребуется R2, ​​мы можем с этим согласиться.

В настоящее время я использую конечную точку ReportingService2005.asmx, которая, кажется, предоставляет класс ReportService2005SoapClient (хотя все образцы показывают класс ReportingService2005).

Когда мы запускаем отчет, я хочу сделать копию этого отчета с сервера, добавить встроенный источник данных, указать наборы данных на этот источник данных, а затем запустить отчет.

Я дошел до:

  1. получение RDL с сервера

  2. изменение XML для добавления источника данных

  3. указание наборов данных, чтобы они указывали на новый источник данных

... но когда я пытаюсь "CreateReport", я получаю следующую ошибку:

System.Web.Services.Protocols.SoapException: набор данных «DataSet1» ссылается на несуществующий источник данных «mydatasource_LOCAL».
в Microsoft.ReportingServices.Library.ReportingService2005Impl.ExecuteBatch(Guid batchId)
в Microsoft.ReportingServices.WebServer.ReportingService2005.ExecuteBatch()

Я добавил набор данных в RDL, он выглядит так же, как когда я добавляю его в дизайнере. Однако я предполагаю, что что-то нужно добавить на сервер? Что мне не хватает?

(Кроме того, я знаю, что MS Dynamics включила многопользовательский SSRS в одном экземпляре, но я не вижу информации о том, как они это сделали. Если у них есть какой-либо код или что-то, чем они делятся, кто-то может указать мне, что это было бы здорово.)


person PilotBob    schedule 03.05.2013    source источник


Ответы (1)


Вы используете правильную конечную точку, более или менее. Из MSDN:

ReportService2005 и ReportService2006 устарели в SQL Server 2008 R2. Конечная точка ReportService2010 включает функции обеих конечных точек и содержит дополнительные функции управления.

В любом случае вы упомянули, что изменили RDL для использования нового источника данных на шаге 2. Я могу ошибаться, но я думаю, что вам, вероятно, все же нужно добавить DataSource в каталог отчетов с помощью ReportingService2010 CreateDataSource(...).

Если вы развертываете новый отчет из Visual Studio на сервере отчетов, в журнале также будет указано, что он развертывает источник данных до развертывания отчета.

Конечно, вы также можете заранее создать этот источник данных на сервере с помощью диспетчера отчетов (хотя имя «mydatasource_LOCAL» может быть не идеальным).

person Jeroen    schedule 06.05.2013
comment
Я не вижу, чтобы он развертывал источник данных, когда я использую встроенный источник данных в отчете, только когда я создаю общие источники данных. Я дважды проверю, чтобы быть уверенным. (Да, используя эту конечную точку, потому что нам нужна поддержка SQL Server 2008 и выше). - person PilotBob; 08.05.2013
comment
Это появляется, когда я развертываю отчет, источник данных создается в базе данных reportmanager. У него есть идентификатор элемента, который соответствует отчету. Но как мне получить идентификатор элемента отчета, который я не могу создать, чтобы создать источник данных? - person PilotBob; 08.05.2013
comment
Кажется, мне даже не пришлось изменять RDL. Просто клонируйте отчет, а затем используйте SetItemDataSources, который создал встроенный источник данных для отчета. - person PilotBob; 09.05.2013