Esempio n. 1
0
        /// <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>
        /// 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);
                }