是否可以将SSRS报告与Webform集成

时间:2020-03-06 14:24:09  来源:igfitidea点击:

是否可以将SSRS报告集成到网络表单中。一个示例足以使我动起来。

解决方案

这是一篇知识库文章,描述了如何将报告输出呈现为特定文件格式的aspx页面。

http://support.microsoft.com/kb/875447/en-us

绝对是。

我们正在寻找的是位于Microsoft.Reporting.WebForms程序集中的ReportViewer控件。它将允许我们在Web表单上放置控件权限,该控件将为人们提供用于设置报告参数和获取报告的界面。

或者,我们可以自己设置所有参数,并以所需的任何格式输出报告。我们在应用程序中使用它来输出PDF。

例如,这就是我们为其中一个报告设置一个reportviewer对象并获取PDF,然后将其发送回用户的方式。特定的代码块是Web处理程序。

public void ProcessRequest(HttpContext context)
{
    string report = null;
    int managerId = -1;
    int planId = -1;
    GetParametersFromSession(context.Session, out report, out managerId, out planId);
    if (report == null || managerId == -1 || planId == -1)
    {
        return;
    }

    CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture;

    List<ReportParameter> parameters = new List<ReportParameter>();
    parameters.Add(new ReportParameter("Prefix", report));
    parameters.Add(new ReportParameter("ManagerId", managerId.ToString()));
    parameters.Add(new ReportParameter("ActionPlanId", planId.ToString()));
    string language = Thread.CurrentThread.CurrentCulture.Name;
    language = String.Format("{0}_{1}", language.Substring(0, 2), language.Substring(3, 2).ToLower());
    parameters.Add(new ReportParameter("Lang", language));

    ReportViewer rv = new ReportViewer();
    rv.ProcessingMode = ProcessingMode.Remote;
    rv.ServerReport.ReportServerUrl = new Uri(ConfigurationManager.AppSettings["ReportServer"]);
    if (ConfigurationManager.AppSettings["DbYear"] == "2007")
    {
        rv.ServerReport.ReportPath = "/ActionPlanning/Plan";
    }
    else
    {
        rv.ServerReport.ReportPath = String.Format("/ActionPlanning{0}/Plan", ConfigurationManager.AppSettings["DbYear"]);
    }
    rv.ServerReport.SetParameters(parameters);

    string mimeType = null;
    string encoding = null;
    string extension = null;
    string[] streamIds = null;
    Warning[] warnings = null;
    byte[] output = rv.ServerReport.Render("pdf", null, out mimeType, out encoding, out extension, out streamIds, out warnings);

    context.Response.ContentType = mimeType;
    context.Response.BinaryWrite(output);
}

请注意,当我们不使用URL访问方法时,我们将失去某些功能,例如参数选择之类的东西。

Report server URL access supports HTML Viewer and the extended functionality of the report toolbar. The SOAP API does not support this type of rendered report. You need to design and develop your own report toolbar, if you render reports using SOAP.

http://msdn.microsoft.com/en-us/library/ms155089.aspx