2010-07-02 12 views
11

Versión corta y dulce: ¿Hay un único método de servicio web que devuelva los nombres de todos los informes disponibles y los parámetros de cada informe?SSRS: ¿Recibe una lista de todos los informes y parámetros en una sola llamada al servicio web?

Tengo mi código web (C#/MVC) conectado a un servicio web de SSRS, y puedo recuperar informes a través de esos servicios.

Sé que puedo obtener una lista de los informes disponibles de esta manera:

var rService = new ReportingService2005 
{ 
Url = @"http://domain.com/ReportServer/ReportService2005.asmx?wsdl", 
Credentials = System.Net.CredentialCache.DefaultCredentials 
}; 

var reportList = rService.ListChildren(@"/Blah", true); 

El resultado de ListChildren() da una gran cantidad de información, pero no enumera los parámetros para cada informe. Con el fin de obtener el parámetro para un informe, necesito hacer una llamada independiente:

string historyId = null; 
ReportService.ParameterValue[] values = null; 
ReportService.DataSourceCredentials[] credentials = null; 

var parameters = rService.GetReportParameters(@"/Blah/" + reportName, historyId, true, values, credentials); 

Así que si quiero conseguir todos los informes disponibles y sus parámetros, que tendría que recorrer los resultados de ListChildren, que significa que haría una llamada de servicio web para cada uno de esos informes.

¿Hay una mejor manera de hacerlo?

+2

Terminé usando el método que he descrito anteriormente, pero luego almacenar en caché los resultados en el Sever durante una hora. Para mi situación específica, sé que los informes no cambiarán a menudo, y si lo hacen, no es necesario que la lista de informes se actualice inmediatamente en el sitio web. Tus resultados pueden variar – Jason

+0

¿Qué hay de malo en hacer una llamada para cada uno? – ErikE

Respuesta

1

No hay tal llamada bulitin a la interfaz de los servicios web. Como alternativa, puede lograr algo similar consultando directamente las tablas de los sistemas de servicios de informes en ReportServer DB; pero esto dependerá de la versión, y es probable que MS no lo admita.

Dicho esto, he usado estas tablas para crear varios informes adhoc en el pasado. y no experimentó ningún problema YMMV.

0

utilicé ListChildren de esta manera.

ReportingService2005 rService = new ReportingService2005(); 
rService.Credentials = System.Net.CredentialCache.DefaultCredentials; 

CatalogItem[] catalogItems = rService.ListChildren("/", true); 

estos le darán todos los informes, carpetas y fuente de datos del Administrador de informes. luego filtrarla con su código como,

foreach (CatalogItem item in catalogItems.Where(m => m.Name.ToLower().Contains(model.ReportName.ToLower()))) 
{ 
    Your code;  
} 
Cuestiones relacionadas