SSRS: получить список всех отчетов и параметров в одном вызове веб-службы?
Короткий и сладкий вариант: существует ли один метод веб-службы, который бы возвращал имена всех доступных отчетов и каждый параметр отчета?
У меня есть мой веб-код (С#/MVC), подключенный к веб-службе SSRS, и я могу получать отчеты через эти службы.
Я знаю, что могу получить список доступных отчетов вроде этого:
var rService = new ReportingService2005
{
Url = @"http://domain.com/ReportServer/ReportService2005.asmx?wsdl",
Credentials = System.Net.CredentialCache.DefaultCredentials
};
var reportList = rService.ListChildren(@"/Blah", true);
Результат ListChildren() дает много информации, но не отображает параметры для каждого отчета. Чтобы получить параметр для отчета, мне нужно сделать отдельный вызов:
string historyId = null;
ReportService.ParameterValue[] values = null;
ReportService.DataSourceCredentials[] credentials = null;
var parameters = rService.GetReportParameters(@"/Blah/" + reportName, historyId, true, values, credentials);
Итак, если я хочу получить все доступные отчеты и их параметры, мне нужно будет просмотреть результаты ListChildren, что означает, что я буду делать вызов веб-службы для каждого из этих отчетов.
Есть ли лучший способ сделать это?
Ответы
Ответ 1
Существует такой вызов bulitin для интерфейса webservices. В качестве альтернативы вы могли бы добиться чего-то подобного, напрямую обратившись к таблицам систем служб отчетов в базе данных ReportServer; но это будет зависящим от версии, и MS, вероятно, не поддержит его.
При этом я использовал эти таблицы для создания нескольких отчетов adhoc в прошлом. и не испытывал никаких проблем с YMMV.
Ответ 2
Я использовал ListChildren таким образом.
ReportingService2005 rService = new ReportingService2005();
rService.Credentials = System.Net.CredentialCache.DefaultCredentials;
CatalogItem[] catalogItems = rService.ListChildren("/", true);
они предоставят вам все отчеты, папки и источник данных из диспетчера отчетов.
затем отфильтруйте его с помощью своего кода, например,
foreach (CatalogItem item in catalogItems.Where(m => m.Name.ToLower().Contains(model.ReportName.ToLower())))
{
Your code;
}