/// <summary> /// Render this report as HTML /// </summary> /// <param name="reportDefinition">The report definition being rendered</param> /// <param name="viewName">The name of the view being rendered</param> /// <param name="parameters">The parameters to the report</param> /// <returns>The report stream in HTML format</returns> public Stream Render(BiReportDefinition reportDefinition, string viewName, IDictionary <string, object> parameters) { foreach (var pol in reportDefinition.MetaData.Demands ?? new List <string>()) { ApplicationServiceContext.Current.GetService <IPolicyEnforcementService>().Demand(pol); } // Get the view var view = string.IsNullOrEmpty(viewName) ? reportDefinition.Views.First() : reportDefinition.Views.FirstOrDefault(o => o.Name == viewName); if (view == null) { throw new KeyNotFoundException($"Report view {viewName} does not exist in {reportDefinition.Id}"); } // Demand permission to render // Start a new root context var context = new RootRenderContext(reportDefinition, viewName, parameters, this.m_configuration?.MaxBiResultSetSize); var retVal = new MemoryStream(); using (var xw = XmlWriter.Create(retVal, new XmlWriterSettings() { CloseOutput = false, #if DEBUG Indent = true, NewLineOnAttributes = true #else Indent = false, OmitXmlDeclaration = true #endif }))
/// <summary> /// Cretaes a new root rendering context /// </summary> /// <param name="report">The report being rendered</param> /// <param name="viewName">The view being rendered</param> /// <param name="parameters">The parameters to the renderer</param> public RootRenderContext(BiReportDefinition report, String viewName, IDictionary <String, object> parameters, int?maxResultSetSize) { this.Parameters = parameters; this.m_viewName = viewName; this.m_report = report; this.Tags = new Dictionary <String, Object>(); this.m_maxResultSetSize = maxResultSetSize; }
/// <summary> /// Render the specified report definition with the specified view /// </summary> public virtual Stream Render(BiReportDefinition reportDefinition, string viewName, IDictionary <string, object> parameters) { foreach (var pol in reportDefinition.MetaData.Demands ?? new List <string>()) { ApplicationServiceContext.Current.GetService <IPolicyEnforcementService>().Demand(pol); } // Get the view var view = string.IsNullOrEmpty(viewName) ? reportDefinition.Views.First() : reportDefinition.Views.FirstOrDefault(o => o.Name == viewName); if (view == null) { throw new KeyNotFoundException($"Report view {viewName} does not exist in {reportDefinition.Id}"); } // Demand permission to render // Start a new root context var context = new RootRenderContext(reportDefinition, viewName, parameters, this.m_configuration?.MaxBiResultSetSize); try { using (var tempMs = new MemoryStream()) { using (var xw = XmlWriter.Create(tempMs, new XmlWriterSettings() { CloseOutput = false, #if DEBUG Indent = true, NewLineOnAttributes = true #else Indent = false, OmitXmlDeclaration = true #endif })) ReportViewUtil.Write(xw, view.Body, context); tempMs.Seek(0, SeekOrigin.Begin); var retVal = new MemoryStream(); XsltArgumentList args = new XsltArgumentList(); args.AddParam("current-date", String.Empty, DateTime.Now.ToString("o")); using (var xr = XmlReader.Create(tempMs)) { if (this.m_isText) { using (var xw = new StreamWriter(retVal, Encoding.UTF8, 1024, true)) this.m_xsl.Transform(xr, null, xw); } else { using (var xw = XmlWriter.Create(retVal, new XmlWriterSettings() { Indent = true, OmitXmlDeclaration = false })) this.m_xsl.Transform(xr, xw); } } retVal.Seek(0, SeekOrigin.Begin); return(retVal); }