我正在研究解决方案,以便在内存中生成SSRS报告,以便作为邮件附件附加。我用的是2010年版。
报表具有应填写的参数,以使报表正确。
我几乎找不到解决办法--如何做到这一点:
解决方案1
使用MS本机ReportViewer类。我们可以在内存中实例化对象,连接到服务器,并使用control以所需的格式呈现报告。
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报表服务器上进行身份验证?
有人能帮我吗?
发布于 2016-12-05 08:38:23
所以,终于写了一个答案。
首先:遗憾的是,在使用报表的简单URL访问时,我找不到任何方法来包含参数。我还没真正处理过这件事。因此,可能会有另一个(更好的)解决方案为您的具体情况。
关于您在第一个解决方案中提到的限制:实际上我不知道您为此使用了什么“框架”,但是如果您无论如何都不能使用它,那就无关紧要了。
我建议您使用SSRS WebServices,正如我在评论中已经说过的那样。有关这方面的基本信息可以找到这里。基本上,您只需要做一些简单的步骤:
下面的示例演示了调用,以及参数如何传递给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”等。然后,您的结果将是一个字节流,您可以返回到您的客户端,附加到邮件或任何您想做的事情。
希望这能帮到你。如果这不符合你的需要,请随时寻求进一步的帮助,或者让我知道。(请详细描述一下您的体系结构及其限制,因为我目前不知道您到底需要什么和不能做什么。)
https://stackoverflow.com/questions/40932205
复制相似问题