我在SSRS中有一个报告,它以SalesRepCode
和Email
为参数生成PDF收据。如果我使用报告查看器,它应该正常工作。
使用C#,我想自动生成每个SalesRep的PDF,一旦PDF呈现,我想将其存储在一个文件夹中,然后将其作为电子邮件附件发送。
我查看了ReportingService2005
类的MSDN文档,但这是指2005版本,我正在使用SSRS 2012,但我还没有找到与我正在使用的版本相关的东西。
有没有正确的方法来实现这一目标?
答案 0 :(得分:3)
您可以毫无问题地使用Render
ReportExecutionService方法。您需要向ReportExecution2005添加服务引用,该引用是报告服务器的Execution Endpoint。
示例强>
以下示例取自msdn,并用于一些小的更改。要查看原始示例,请查看msdn example。使用时,请注意使用PDF
作为格式以及报告路径,它应该是报告的路径,以/
开头,而报告名称不是.rdl
。
ReportExecutionService rs = new ReportExecutionService();
rs.Credentials = System.Net.CredentialCache.DefaultCredentials;
rs.Url = "http://MyServer/reportserver/ReportExecution2005.asmx";
/* Render arguments */
byte[] result = null;
string reportPath = "/MyFolder/MyReport";
string format = "PDF";
string historyID = null;
string devInfo = @"<DeviceInfo><Toolbar>False</Toolbar></DeviceInfo>";
/* Prepare report parameter.*/
ParameterValue[] parameters = new ParameterValue[1];
parameters[0] = new ParameterValue();
parameters[0].Name = "SomeParameter";
parameters[0].Value = "SomeValue";
DataSourceCredentials[] credentials = null;
string showHideToggle = null;
string encoding;
string mimeType;
string extension;
Warning[] warnings = null;
ParameterValue[] reportHistoryParameters = null;
string[] streamIDs = null;
ExecutionInfo execInfo = new ExecutionInfo();
ExecutionHeader execHeader = new ExecutionHeader();
rs.ExecutionHeaderValue = execHeader;
/*Load and Render Report*/
execInfo = rs.LoadReport(reportPath, historyID);
rs.SetExecutionParameters(parameters, "en-us");
String SessionId = rs.ExecutionHeaderValue.ExecutionID;
result = rs.Render(format, devInfo, out extension, out encoding,
out mimeType, out warnings, out streamIDs);
execInfo = rs.GetExecutionInfo();
/*Save File*/
System.IO.File.WriteAllBytes(@"d:\report.pdf", result);
答案 1 :(得分:0)
我在Reporting 2012中使用了ReportingService2005 Web服务,它运行正常。
简而言之 - 您使用PDF添加对Web Service,Bind Params,Call Render()的引用,并将ByteStream保存为本地文件。
令人困惑的是2个Web服务(报告服务和报告执行服务)
我认为您只需使用报告执行服务就可以逃脱。
要检查的第一件事是您可以在SSRS页面上看到.asmx文件 (http://...ReportExecution2005.asmx)