I’m using Report Builder 3.0 to create a report for use in SharePoint 2010. SQL Server 2008 R2 is the back end with Reporting Services in SharePoint Integrated Mode. One of the cool features of Report Builder 3.0 is the use of a SharePoint List as a data source, the setup for which is very straightforward–just give it the URL for the SharePoint List as the connection string and it works.
I eventually want to package this site as a Site Template including the report that lives in it, which means that the URL will need to be relative instead of absolute. So for example instead of this:
http://mainsite/subsite1/lists/mylist
… I need to specify something like this:
mylist
… so that when I package this as a Site Template and create a new site based on that template, the report will work with the new site’s list instead of pointing back to the original site’s list URL. I’ve tried “mylist”, “lists/mylist”, etc.–everything short of specifying subsite1/lists/mylist–but nothing has worked so far except for the full URL.
Is it possible to use a relative URL or some other method so that the connection string won’t have to be manually changed in the report every time I create a new site based on this site template?
Edit: I misunderstood what needed to go in the data source’s connection string. It’s not the URL to the list but rather the URL to the site that goes in the connection string. The concept of the question remains valid though–need to dynamically set the connection string of a data source that points to a SharePoint list.
After brainstorming with some co-workers we figured it out. The key is to use an expression for the connection string. Using my original example the goal is to get this:
… in the connection string but without hardcoding it–make it dynamic based on where the report lives so the report can be packaged along with the rest of the site as a site template. The expression I ended up with is:
The report lives in a library called “Reports”, so Globals!ReportFolder returns:
The Replace() function then takes out the “Reports” part of the string, and the result is the connection string I wanted.
Things to look out for: