2016-12-02 76 views
0

我正在研究在内存中生成SSRS报告以作为邮件附件之后附加的解决方案。我正在使用2010版本。在内存中生成SSRS报告

报告需要填充参数以使报告正确。

我发现了几个解决方案是如何做到这一点:

解决方案1 ​​

使用MS原生ReportViewer类。我们可以在内存中实例化对象,连接到服务器,并使用控制API

report.ServerReport.ReportServerCredentials = new MyCredentials(...); 
report.ServerReport.ReportServerUrl = new Uri("ssrs_url"); 
report.ServerReport.ReportPath = "path-to-report"; 

byte[] reportData = report.ServerReport.Render("excel"); 

该解决方案已经主要缺点渲染所需的格式报告 - 它需要显著相关性集合使用报告控制。所以很难在分层体系结构中使用,当较低层具有有限和预定义的一组依赖关系时,它们可以松散耦合,并且可以轻松移植到大范围的OS和云栈中。

所以不能采用这种解决方案在我的情况

解决方案2

使用报表服务器的公共API已经访问所需格式的数据。我发现这可以实现,MS确认这一点。这里是链接https://msdn.microsoft.com/en-us/library/ms154040.aspx

因此,我们可以只使用权配置的链路来访问数据:http://myrshost/ReportServer?/myreport&rs:Format=PDF

此解决方案最适合我的需要,但我不知道如何传递报表参数这份报告?还有如何首先针对SSRS报告服务器进行身份验证?

有人可以帮助我吗?

+0

是否正在使用ReportingServices webservice选项?根据您的SSRS版本(您可能会将其包含在您的文章中),您可以在此处找到服务asmx:http:// myrshost:80/ReportServer/ReportExecution2005.asmx。 –

+0

是的,我有所有需要的数据。如何将数据传递给特定的报告参数。我需要在渲染报告前填写属性 – VadimB

+0

现在预约,稍后会回来(如果没有其他人更快;))同时查看MSDN的服务。 https://msdn.microsoft.com/en-us/library/ms152787.aspx –

回答

2

于是,终于让它写出了答案。

首先:可悲的是我找不到任何方式来包含参数,当使用简单的URL访问报告。我还没有真正与之合作过。因此,对于您的具体情况可能会有另一种(更好的)解决方案。

关于您在第一个解决方案中陈述的限制: 实际上我没有看到您使用的是什么“Framework”,但如果您无法使用它,则无关紧要。

我建议你使用SSRS WebServices,正如我在评论中已经指出的那样。基本信息可以在here找到。基本上你只需要一些简单的步骤做:

  1. 消耗的WebService(这是一个SOAP服务),并让的Visual Studio(.NET)生成代理类为您服务。网络上有很多教程。例如this one。我在这里看不到任何依赖的问题,因为它只是一个WebService。

  2. 然后您就可以调用WebService。代理为您生成了所有必需的类。

以下示例演示调用以及参数如何传递给WebService(当然这很容易)。请注意,该示例是为ReportExecution2005.asmx编写的。最新版本可能存在差异。

var client = new ReportExecutionService(); 
client.Url = "UrlToReportExecutionASMXonYourServer"; 
client.Credentials = yourCredentials // (is of type System.Net.ICredentials) 

client.LoadReport2("RelativePathToYourReportOnServer", null); 

var parameters = new ParameterValue[amountOfYourParameters]; 
parameters[0] = new ParameterValue() { Name = "ParamNameInReport", Value = "Value" }; 
client.SetExecutionParameters(parameters, CultureInfo.CurrentCulture.Name.ToLowerInvariant()); 

string encoding, mimeType, extension, deviceInfo; 
Warning[] warnings; 
string[] streamIDs; 
var result = client.Render("ExportFormatOfDesiredResult", deviceInfo, out extension, out encoding, out mimeType, out warnings, out streamIDs); 

“ExportFormatOfDesiredResult” 可以与 “XML”, “PDF”, “字”,等等。例如代替。 i 您的结果将成为一个字节流,您可以返回给您的客户端,附加到邮件或任何您想要做的事情。

我希望这可以帮助你。请随时要求进一步的帮助或让我知道,如果这不适合您的需求,任何理由。 (请详细描述您的架构,然后对其进行限制,因为我目前不明白您需要什么以及您无法做什么。)