I'm believe I'm needing to add an extension to SSRS.
I'm trying to shy away from anything related to a Security extension, basically because our security works pretty much as it should with the current scheme.
I think a Data extension is the route that I need to go. Here are the details.
1. reports are reports, and what we have is just fine in terms of content, layout, etc. (and we are running with a single customer currently).
2. we need to scale for potentially thousands of customers. each customer has their own OrganizationID. From this OrganizationID, we need to calculate the connection string and image library path.
3. we need to use our own form of "Global Directory" (WCF, etc.), passing an OrganizationID to this directory service in order to return the associated customer's datasource connection string and the associated image library path (this needs to happen pre report render).
Is the SSRS Data Extension a good approach for this kind of scenario? Are there any known pitfalls, design considerations, etc. that I need to be aware of up front?
To be more specific, I'd like the ReportParameters in the snippet below to only be 1 (publicOrgID instead) and the information for what's currently in-bound into the report (param, param) we want to have calculated on the server side.
SSRSGlobalDirectory globalDirectory = new SSRSGlobalDirectory();
string publicOrgID = Utility.Util.GetPublicOrgID(Convert.ToInt32(Session[Resource.HC_StringConstants.HC_MYSTOREID].ToString()));
globalDirectory = SSRS.CallGlobalDirectoryforSSRS(publicOrgID);
ReportViewer1.ProcessingMode = ProcessingMode.Remote;
ReportViewer1.ServerReport.ReportServerUrl = new Uri(globalDirectory.SQLReportServiceURL);
ReportViewer1.ServerReport.ReportPath = Resource.HC_StringConstants.HC_FISUMMARYREPORT;
ReportViewer1.AsyncRendering = false;
ReportViewer1.SizeToReportContent = true;
ReportParameter param = new ReportParameter;
param = new ReportParameter(Resource.HC_StringConstants.HC_SQLCONNSTRING, globalDirectory.ConnectionString);
param = new ReportParameter(Resource.HC_StringConstants.HC_IMAGELIBRARYURL, globalDirectory.SiteImagesURL);
I'm good at this point. We wrapper-ed our WCF/Client Services portion (what gives us the connection and image path values from an OrgID) into a .dll.
At this point, I'm getting the 2 values I needed :)
I'm implementing the Connection Class at this point (and sticking with a Data Processing Extension, at least until I hit a "brick wall"), where I plan on injecting these values.
1. I don't want to change a thing with the Report Designer only the Report Server (leave the existing connection stuff as is in the RDL and only offer the PublicOrgID as another report paramenter)
2. I want my DPE to "wrapper" all SSRS requests if running in a web application context.
also, i did find this today:
I think I'm understanding it. However, MSDN is so generic and details weak now, that I feel like I'm killing time and need to find a better resource.
also looking at this: http://www.codeproject.com/Articles/355461/Dynamically-Pointing-to-Shared-Data-Sources-on-SQL
to see if it's a better adaptation (as far as extensions) for what I need.
(I don't think I even saw this type of extension in the MS documentation?)
getting back to the DPE approach...
in my previous posts, I snippet-ed what it is that we are doing now.
looking at the interfaces here: http://msdn.microsoft.com/en-us/library/ms152816%28v=sql.110%29.aspx
I don't see any means to point to a particular report (ServerReport.ReportPath)?
Does anyone know how this is suppose to work (please don't tell me that this extension is designed so that I would have to write a DPE for each report?).
The document url mentioned above is horrible in terms of real details.
worst microsoft stuff i've ever seen documented in the 37 years i've been in IT.
also, does anyone know whether MS actually fixed the 2005 asmx for SSRS?
it looks like the initial release(s) http://social.msdn.microsoft.com/forums/sqlserver/en-US/1fb8d5b5-31f2-4a62-84c1-cb2f15217ef3/custom-data-processing-extension-and-parameters
has bugs in the parameters interface (which is what I'm dealing with now).