您的位置:首页 > 数据库

开发自己的SQL2005报表查看SharePoint WebPart(二)

2007-02-26 12:20 417 查看
在(一)中,已经完成了一个sharepoint Web part的开发和部署。但是我们的web part还没有任何功能。现在,我们要开始将SQL reporting的报表显示功能加进来了。
访问SQL reporting报表有很多方法,这里我们选用的是调用Web service的方式。
在工程中增加对SQL reporting service的引用, http://ctc-bar:81/ReportServer/reportservice.asmx(ctc-bar:81是报表服务器名称和段口号)
为了简化对报表服务器的调用,我们新建一个ReportAdapter类负责对web service的调用。
using System;
using System.Collections.Generic;
using System.Text;

namespace BARreportWebPart
{
public class ReportAdapter
{
ReportingServer.ReportingService ReportSvr = null;
string reportServerURL = null;
string reportPath = null;
string format = "HTML4.0";
string zoom = "100";
string deviceInfo = "<DeviceInfo></DeviceInfo>";
string encoding = null;
string mimeType = null;
ReportingServer.ParameterValue[] outParameters = null;
ReportingServer.Warning[] warnings = null;
string[] streamIDs = null;

public ReportAdapter(string serverURL,string path)
{
reportServerURL = serverURL;
reportPath = path;
ReportSvr = new ReportingServer.ReportingService();
ReportSvr.Url = reportServerURL;
ReportSvr.Credentials = System.Net.CredentialCache.DefaultCredentials;
}

public ReportingServer.ReportParameter[] GetParameters()
{
return ReportSvr.GetReportParameters(reportPath, null, false, null, null);
}

public byte[] RenderReport(ReportingServer.ParameterValue[] parameterValues)
{
return ReportSvr.Render(reportPath, format, null, deviceInfo, parameterValues, null, null, out encoding, out mimeType, out outParameters, out warnings, out streamIDs);
}
}
}

这个类的构造函数用来指定要访问的报表serverURL是服务器的地址,path是报表的路径
GetParameters()可以返回报表的参数,我们可以自己构造参数输入的UI控件。
RenderReport用来返回查询报表的结果。

然后,我们在web part的render方法中调用ReportAdapter来查询报表
using System;
using System.Collections.Generic;
using System.Text;
using System.Web.UI;
using System.Web.UI.WebControls.WebParts;

namespace BARreportWebPart
{
public class BARreportWebPart : WebPart
{
public BARreportWebPart()
{
}

protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
string reportServerURL = "http://ctc-bar:81/ReportServer/ReportService.asmx";
string reportPath = "/BARreports/EBCdetailList";

ReportAdapter rsAdapter = new ReportAdapter(reportServerURL, reportPath);
ReportingServer.ReportParameter[] parameters = rsAdapter.GetParameters();
ReportingServer.ParameterValue[] parameterValues = null;
if (parameters.Length > 0)
{
parameterValues = new ReportingServer.ParameterValue[parameters.Length];
for (int i = 0; i < parameters.Length; i++)
{
parameterValues[i] = new ReportingServer.ParameterValue();
parameterValues[i].Name = parameters[i].Name;
parameterValues[i].Label = parameters[i].Prompt;
}
parameterValues[0].Value = "2007-1-1";
parameterValues[1].Value = "2007-3-1";
}
System.Text.Encoding enc = System.Text.Encoding.UTF8;
byte[] result = rsAdapter.RenderReport(parameterValues);
string htmlResult = enc.GetString(result);
//htmlResult = htmlResult.Replace(reportServerURL.Replace("/ReportService.asmx", "?"), "http://" & Request("SERVER_NAME") & Request("SCRIPT_NAME") & "?Report=");
writer.Write(htmlResult);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: