在(一)中,已经完成了一个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); } }}