12
votes

I'm dynamically generating RDL files for SSRS 2008, assembling my reports from "building blocks" which I defined as reports on Report Server, and which I use as subreports on my generated report.

On my Report Server, I have a single, shared data source which does work as long as I run stuff directly on the report server.

What I'm trying to accomplish is this:

  • my generated main report should reference that shared data source
  • my subreports contained on the generated main report should also use the same data source
  • after I deploy the report to report server using the webservice interface, I'd like to be able to actually see the report right away

For now, I can generate and validate my RDL just fine, I can deploy it to the report server just fine, too - it shows up and all, great.

But when I try to view the report, I get an error that my data source is invalid or has been removed or something.......

What am I missing?? I am pretty sure I have the right data source - GUID for it and all - and the names do match. How do I tell a generated RDL to use the shared data source already present on the server??

1

1 Answers

20
votes

Answering my own question here, hoping someone else might find this useful:

I was under the (false) impression that the unique "DataSourceID" given to a data source on the server would be sufficient to identify it uniquely.

So in my generated RDL, I had something like :

  <DataSources>
    <DataSource Name="MyDataSource">
      <Transaction>true</Transaction>
      <DataSourceReference>MyDataSource</DataSourceReference>
      <rd:DataSourceID>6ba7c588-e270-4de9-988c-d2af024f10e1</rd:DataSourceID>
      <rd:SecurityType>None</rd:SecurityType>
    </DataSource>
  </DataSources>

Now this worked once, when my data source was indeed called "MyDataSource" and located in the same directory as my report which I published through the RS WebService API.

As soon as I moved the data source elsewhere, it stopped working.

THE SOLUTION:
This may sound silly, but I really didn't "get it" at first: the DataSourceReference needs to have the full and complete "path" on the Reporting Server to that data source I want to reference. Just specifying the unique ID won't do....

So once I changed my RDL to:

  <DataSources>
    <DataSource Name="MyDataSource">
      <Transaction>true</Transaction>
      <DataSourceReference>/MyProject/DataSources/MyDataSource</DataSourceReference>
      <rd:DataSourceID>6ba7c588-e270-4de9-988c-d2af024f10e1</rd:DataSourceID>
      <rd:SecurityType>None</rd:SecurityType>
    </DataSource>
  </DataSources>

(notice the <DataSourceReference>/MyProject/DataSources/MyDataSource</DataSourceReference>)

since that moment it works like a charm.

Hope someone might find this useful some day!