Reporting Service Programatik Report Rendering Render Metodu
publicbyte[] Render(
string Format,
string DeviceInfo,
PageCountMode PaginationMode,
out string Extension,
out string MimeType,
out string Encoding,
out Warning[] Warnings,
out string[] StreamIds
)
Dikkat : Bu fonksiyon ReportExecutionService isimli sınıfa ait olduğu için bu sınıfa ilişkin asmx dosyası da referanse edilmiş olmalıdır.
http://host/ReportServer/ReportExecutionXXXX.asmx
Bu fonksiyon output parametrelerine geçilen değişkenlere çalışması bittiğinde belirli değerler set etmekte olduğu için pratik kullanımda çoğu zaman null geçilerek çağrım yapılmaktadır. Ayrıca Reporting Service’in 2005 versiyonunda fonksiyonun ilk parametresi raporun path’ini alırken, 2008’de bu durum değiştirilmiş, dolayısıyla aynı işlem artık ExecutionInfo sınıfının LoadReport() fonksiyonuyla yapılır hale getirilmiştir.
Aşağıdaki kodda bir ASP.NET uygulamasının bu servisi ve Render() metodunu kullanarak sunucudaki raporu nasıl render edip bir pdf dosyası haline getirdiği örneklenmektedir.
using rsServiceExec;
using System.Net;
using System.Web.Services.Protocols;
using System.IO;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
ReportExecutionService rs = new ReportExecutionService();
rs.Credentials = CredentialCache.DefaultCredentials;
rs.Url =
“http://127.0.0.1/ReportServer/ReportExecution2005.asmx”;
// Render argümanları
byte[] result = null;
string path = “/Ornek_2.1/DrDnPersonelPuanMatris”;
string format = “PDF”;
string devInfo =
@”<DeviceInfo><Toolbar>False</Toolbar></DeviceInfo>”;
string encoding;
string mimeType;
string extension;
Warning[] warnings = null;
string[] streamIDs = null;
ExecutionInfo execInfo = new ExecutionInfo();
ExecutionHeader execHeader = new ExecutionHeader();
rs.ExecutionHeaderValue = execHeader;
execInfo = rs.LoadReport(path, null);
// Raporun render edilişi
try
{
result = rs.Render(format, devInfo,
out extension, out encoding,
out mimeType, out warnings, out streamIDs);
execInfo = rs.GetExecutionInfo();
}
catch (SoapException exc)
{
Response.Write(exc.Detail.OuterXml);
}
// Raporun dosyaya kaydedilişi
try
{
FileStream fs = File.Create
(Server.MapPath(“report.pdf”),result.Length);
fs.Write(result, 0, result.Length);
Response.Write(“Rapor oluştu”);
fs.Close();
}
catch (Exception exc)
{
Response.Write(exc.Message);
}
}
}
Aykut TAŞDELEN
aykuttasdelen@csystem.org
C Ve Sistem Programcıları Derneği Eğitmeni