首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在内存中生成SSRS报告

在内存中生成SSRS报告
EN

Stack Overflow用户
提问于 2016-12-02 12:24:51
回答 1查看 1.4K关注 0票数 0

我正在研究解决方案,以便在内存中生成SSRS报告,以便作为邮件附件附加。我用的是2010年版。

报表具有应填写的参数,以使报表正确。

我几乎找不到解决办法--如何做到这一点:

解决方案1

使用MS本机ReportViewer类。我们可以在内存中实例化对象,连接到服务器,并使用control以所需的格式呈现报告。

代码语言:javascript
复制
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报表服务器上进行身份验证?

有人能帮我吗?

EN

回答 1

Stack Overflow用户

发布于 2016-12-05 08:38:23

所以,终于写了一个答案。

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

关于您在第一个解决方案中提到的限制:实际上我不知道您为此使用了什么“框架”,但是如果您无论如何都不能使用它,那就无关紧要了。

我建议您使用SSRS WebServices,正如我在评论中已经说过的那样。有关这方面的基本信息可以找到这里。基本上,您只需要做一些简单的步骤:

  1. 使用WebService (它是SOAP服务),让Visual (.NET)为您生成代理类。有一个广泛的教程为这在网上。例如,这一个。我在这里没有看到依赖关系的任何问题,因为它只是一个WebService。
  2. 那么您已经能够调用WebService了。代理为您生成了所有必需的类。

下面的示例演示了调用,以及参数如何传递给WebService (当然,这很容易实现)。请注意,该示例是为ReportExecution2005.asmx编写的。最新版本可能有不同之处。

代码语言:javascript
复制
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”等。然后,您的结果将是一个字节流,您可以返回到您的客户端,附加到邮件或任何您想做的事情。

希望这能帮到你。如果这不符合你的需要,请随时寻求进一步的帮助,或者让我知道。(请详细描述一下您的体系结构及其限制,因为我目前不知道您到底需要什么和不能做什么。)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40932205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档