繁体   English   中英

在内存中生成SSRS报告

[英]Generate SSRS report in memory

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

报告具有必须填写的必要参数,以使报告正确。

我发现很少的解决方案如何做到这一点:

解决方案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报表服务器进行身份验证?

有人可以帮我弄这个吗?

于是,终于写出答案了。

首先:遗憾的是,在使用报表的简单URL访问时,我找不到任何包含参数的方法。 我还没有真正使用它。 因此,针对您的具体情况,可能还有另一个(更好的)解决方案。

关于您在第一个解决方案中提出的限制:实际上,我看不到您使用的“框架”是什么,但是如果您仍然不能使用它,那就没有关系了。

正如我已经在我的评论中所述,我建议您使用SSRS Web服务。 关于此的基本信息可以在这里找到。 基本上,您只需要执行一些简单的步骤:

  1. 使用WebService(它是SOAP服务),并让Visual Studio(.NET)为您生成代理类。 网络上有各种各样的教程。 例如这个 我在这里看不到依赖项的任何问题,因为它只是一个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”,“ Word”等。 i然后,您的结果将是一个字节流,您可以将其返回给客户端,附加到邮件或您要执行的任何操作。

我希望这可以帮助你。 如果这出于任何原因都不适合您的需求,请随时寻求进一步的帮助或让我知道。 (请添加有关您的体系结构及其限制的详细说明,因为我目前不了解您到底需要什么,您不能做什么。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM