Hello,
I'm having problems finding CRM 2011 examples of streaming an SSRS report to PDF format from a plugin. I want to be able to stream an SSRS report to PDF and store the PDF in a server location.
I'm trying to make this code work with the canned CRM 2011, reports but ultimately I want to be able to use the same process against custom CRM reports.
All the examples I find are related to CRM 4.0 and don't work in CRM 2011.
I've been trying to use the following code as a basis for the PDF stream:
ReportExecutionService rs = new ReportExecutionService();
rs.Credentials = System.Net.CredentialCache.DefaultCredentials;
rs.Url = "http://SQL1/reportserver/ReportExecution2005.asmx";// Setting Report Parameters// 1. Report path from report server// 2. Output format// 3. Device Infostring reportPath = "/SharedReports/5.0.xxxx/1033{3C3CA962-D4E0-4E62-A9B4-36F00C484D36}";string format = "PDF";string historyID = null;string devInfo = @"<DeviceInfo><Toolbar>False</Toolbar></DeviceInfo>";// Passing parameters to report
ParameterValue[] parameters = new ParameterValue[7]; // Define parameters
parameters[0] = new ParameterValue();
parameters[0].Name = "CRM_FilterText";
parameters[0].Value = "";
parameters[1] = new ParameterValue();
parameters[1].Name = "CRM_FormatDate";
parameters[1].Value = "";
parameters[2] = new ParameterValue();
parameters[2].Name = "CRM_FormatTime";
parameters[2].Value = "";
parameters[3] = new ParameterValue();
parameters[3].Name = "CRM_FullName";
parameters[3].Value = "AccountOverview";
parameters[4] = new ParameterValue();
parameters[4].Name = "CRM_URL";
parameters[4].Value = "http://SQL1/reportserver/ReportService2005.asmx";
parameters[4].Value = "String";
parameters[5] = new ParameterValue();
parameters[5].Name = "SubEntities";
parameters[5].Value = "";
parameters[6] = new ParameterValue();
parameters[6].Name = "CRM_NumberLanguageCode";
parameters[6].Value = "";string encoding;string mimeType;string extension;
Warning[] warnings = null;string[] streamIDs = null;
ExecutionInfo execInfo = new ExecutionInfo();
ExecutionHeader execHeader = new ExecutionHeader();
rs.ExecutionHeaderValue = execHeader;
execInfo = rs.LoadReport(reportPath, historyID);
rs.SetExecutionParameters(parameters, "en-us");
String SessionId = rs.ExecutionHeaderValue.ExecutionID;// Data Source settings
DataSourceCredentials[] credentials = new DataSourceCredentials[1];
DataSourceCredentials dsc = new DataSourceCredentials();
dsc.DataSourceName = "CRM";
dsc.UserName = "kcguise";
dsc.Password = "password";
credentials[0]=dsc;
rs.SetExecutionCredentials(credentials);// Generating reportbyte[] result = null;try
{
result = rs.Render(format, devInfo, out extension, out encoding, out mimeType, out warnings, out streamIDs);
}catch (SoapException err)
{thrownew Exception(err.Detail.OuterXml);
}//Encoded data is pdf
String encodedData = System.Convert.ToBase64String(result);
The main problem I have is that I don't know how I should set the DataSourceCredentials, and that is where I'm getting a problem. With the above code I get the following error:
{"An error has occurred during report processing. --->
Microsoft.ReportingServices.ReportProcessing.ProcessingAbortedException:
An error has occurred during report processing. ---> Microsoft.ReportingServices.ReportProcessing.ReportProcessingException:
Cannot create a connection to data source 'CRM'. ---> Microsoft.Crm.Reporting.DataExtensionShim.Common.ReportExecutionException: \n
System.FormatException: Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx). --->
Microsoft.Crm.Reporting.DataExtensionShim.Common.
ReportExecutionException: Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)."}
Supposedly, I'm to use the following code to figure out the DataSourceCredentials, but the problem is that the CrmAuthenticationToken does not seem to be supported in CRM 2011 anymore.
CrmAuthenticationToken token = new CrmAuthenticationToken();
token.AuthenticationType = 0;
token.OrganizationName = "CRM";
CrmService.CrmService service = new CrmService.CrmService();
service.CrmAuthenticationTokenValue = token;
service.UseDefaultCredentials = true;//Get Credentials
WhoAmIRequest req = new WhoAmIRequest();
WhoAmIResponse whoami = (WhoAmIResponse)_service.Execute(req);string userName = whoami.UserId.ToString();string password = whoami.OrganizationId.ToString();//Create DataSourceCredentials for SRS
DataSourceCredentials dsc = new DataSourceCredentials();
dsc.DataSourceName = "CRM";
dsc.UserName = userName;
dsc.Password = password;
Does anyone have a working example of streaming an SSRS report in PDF format. Or could you provide some insight on how to get around the DataSourceCredentials issue?