Quantcast
Channel: SQL Server Reporting Services
Viewing all articles
Browse latest Browse all 1418

SSRS Using ReportingService2010 to get report parameters and resolve dependencies programmatically - HELP!

$
0
0

Hi all, I have written a replacement for the report viewer web control that works extremely well but for one thing.

In summary I am dynamically building an interface for the report filters and then pass in a collection of parameter names and selected values. For this example my UI consists of 3 multi-select dropdowns where the content of dropdown 2 depends on the selection in dropdown 1 and dropdown 3 depends on the selection in dropdown 2. When a value changes in dropdown 1 I make a postback passing the UI values in order to get the default values for dropdown 2 and of course the same process to populate dropdown 3 when the value changes in dropdown 2. With me so far?

I am using ReportingService2010 and calling GetItemParameters, with the render option set to false, to get all of the parameter info that I need.

client.GetItemParameters(criteria.Path + criteria.Report, null, false, null, null).ToList();

I am then iterating through the returned parameters and building up a dictionary of parameter dependencies and values (values are extracted by parameter name from the passed in UI collection mentioned above).

// Now check other dependencies
if (param.Dependencies != null)
{
    foreach (var d in param.Dependencies)
    {
        if (!dependencies.ContainsKey(d))
        {
            // Check if we a valid value in the response collection to be able to set the dependency value
            var response = criteria.Responses.FirstOrDefault(r => r.Title == d.ToString());

            if (response != null && !string.IsNullOrEmpty(response.Value))
            {
                var paramDetail = unrenderedParameters.FirstOrDefault(p => p.Name == d);

                switch (paramDetail.ParameterTypeName)
                {
                    case "DateTime":
                        DateTime validDate = DateTime.ParseExact(response.Value, "d/M/yyyy", CultureInfo.InvariantCulture);
                        dependencies.Add(d, new ParameterValue() { Name = d, Label = d, Value = validDate.ToString("yyyy-MM-dd") });
                        break;

                    default:
                        dependencies.Add(d, new ParameterValue() { Name = d, Label = d, Value = response.Value.Trim() });
                        break;
                }
            }
        }
    }
}

Once I have done I then again call GetItemParameters with the render option set to true and also pass in the dependency parameter and value collection in order to resolve the dependencies like so

client.GetItemParameters(criteria.Path + criteria.Report, null, true, dependencies.Values.ToArray(), null).ToList();

Now this is where I am hitting a problem. I would expect that after selecting a value in dropdown 1, setting render to true and passing the dependant values in a call to GetItemParameters that I would get the default values for dropdown 2 populated but I don't. The status for dropdown 2 is always 'HasOutstandingDependencies'. 

I am assuming that I need to somehow loop through the parameters to resolve all dependencies but I cannot figure out what I would need to do any different to what I already am consider the dependant values are already being passed. Any ideas?


Viewing all articles
Browse latest Browse all 1418

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>