A question today on how to get the valid values for a report parameter via the web service API when a query specifies the valid values. (Whew - clunky sentence).
To do this you can use the GetReportParameters web method. First, be wary of a small bug in the documentation where the order of parameters are incorrect. Not a big problem with intellisense, though.
Example:
ReportingService rService = new ReportingService(); rService.Credentials = System.Net.CredentialCache.DefaultCredentials; string historyID = null; bool forRendering = true; ParameterValue[] values = null; DataSourceCredentials[] credentials = null; ReportParameter[] parameters; parameters = rService.GetReportParameters ( "/Northwind Reports/Report2", historyID, forRendering, values, credentials );
This will give you back an array of ReportParameter objects. If a ReportParameter object has a set of valid values defined by a query, reporting services will run the query and populate the ValidValues property with ValidValue objects (only when ForRendering == true). If we wanted to dump the valid values for parameter[0]:
foreach(ValidValue v in parameters[0].ValidValues) { Console.WriteLine(v.Label + " " + v.Value); }
Note, if you have hierarchical parameters, where, for example, the set of valid values for parameters[1] depends on the value selected for parameters[0], you’ll need to initialize the ParameterValue array to get the valid values for parameters[1]. If you are doing this all from scratch this may mean multiple calls to GetReportParameters.