예제 #1
0
        private static byte[] GenerateReportingServicesOutput(IPoProvider poProvider, LocalReport localReport, out Warning[] warnings, out string fileNameExtension, out string mimeType)
        {
            string[] streams;
            string   encoding;

            return(localReport.Render(poProvider.OutputFormat.ToFormatName(), null, out mimeType, out encoding, out fileNameExtension, out streams, out warnings));
        }
예제 #2
0
        private static byte[] GenerateXmlOutput(IPoProvider poProvider, out string fileNameExtension, out string mimeType)
        {
            var xmlSerializer = new XmlSerializer(poProvider.DataSources.First().Value.GetType());

            using (var steam = new MemoryStream())
            {
                xmlSerializer.Serialize(steam, poProvider.DataSources.First().Value);
                mimeType          = "text/xml";
                fileNameExtension = "xml";
                return(steam.GetBuffer());
            }
        }
예제 #3
0
        public Report GenerateReport(IPoProvider poProvider)
        {
            Stopwatch stopwatch = new Stopwatch();

            stopwatch.Start();
            LocalReport localReport = new LocalReport();

            using (Stream reportDefinitionStreams = poProvider.OpenReportDefinitionStreams())
            {
                var subReportDefinitionStreams = poProvider.OpenSubReportDefinitionStreams();

                InitializeLocalReport(localReport, poProvider, reportDefinitionStreams, subReportDefinitionStreams);

                string    mimeType          = null;
                string    fileNameExtension = String.Empty;
                Warning[] warnings          = null;
                byte[]    renderedBytes     = new byte[0];

                if (poProvider.HasData)
                {
                    if (poProvider.OutputFormat == OutputFormat.Xml)
                    {
                        renderedBytes = GenerateXmlOutput(poProvider, out fileNameExtension, out mimeType);
                    }
                    else
                    {
                        renderedBytes = GenerateReportingServicesOutput(poProvider, localReport, out warnings, out fileNameExtension, out mimeType);
                    }
                }

                LogWarnings(warnings);

                if (poProvider.OutputFormat == OutputFormat.Png)
                {
                    renderedBytes = GeneratePngOutput(renderedBytes, out mimeType);
                }

                var report = new Report(poProvider.HasData, renderedBytes, poProvider.ReportFileName, fileNameExtension, mimeType, poProvider.MaxImagePreviewPageHeight, poProvider.MaxImagePreviewPageWidth);

                foreach (var subReportStream in subReportDefinitionStreams.Values)
                {
                    subReportStream.Dispose();
                }

                stopwatch.Stop();
                Loggers.PeformanceLogger.DebugFormat("Generated report: {0}({1}) in {2}", poProvider.ReportFileName, poProvider.OutputFormat, stopwatch.Elapsed);
                return(report);
            }
        }
예제 #4
0
        private static void InitializeLocalReport(LocalReport localReport, IPoProvider poProvider, Stream reportDefinitionStream, Dictionary <string, Stream> subReportDefinitionStreams)
        {
            localReport.SubreportProcessing += (sender, args) => poProvider.SubReportProcessingEventHandler(sender, new ServerSubReportProcessingEventArgs(args));

            localReport.LoadReportDefinition(reportDefinitionStream);
            localReport.EnableExternalImages = true;

            foreach (var subReportKeyValuePair in subReportDefinitionStreams)
            {
                localReport.LoadSubreportDefinition(subReportKeyValuePair.Key, subReportKeyValuePair.Value);
            }

            ReportDataSource.SetDataSources(new ServerReportDataSourceCollection(localReport.DataSources), poProvider.DataSources);
            localReport.SetParameters(poProvider.ReportParameters.Select(svp => svp.ReportParameter));
        }
예제 #5
0
        public IEmsgPoProviderBase CreateEmsgPoProvider <TEmsgReportParameter, TReportPo>(TEmsgReportParameter poProviderParameter, IPresentationObjectProcessor <TReportPo> presentationObjectProcessor)
            where TEmsgReportParameter : EmsgReportParameter
            where TReportPo : new()
        {
            IPoProvider poProvider = GetPoProvider(poProviderParameter);

            if (poProvider is IEmsgModeDependentPoProviderBase <TEmsgReportParameter, TReportPo> )
            {
                var emsgPoProvider = (IEmsgModeDependentPoProviderBase <TEmsgReportParameter, TReportPo>)poProvider;
                emsgPoProvider.SetPresentationObjectProcessor(presentationObjectProcessor);
            }

            poProvider.SetBaseParameter(poProviderParameter);
            poProvider.LoadDataSources(poProviderParameter);

            return((IEmsgPoProviderBase)poProvider);
        }