예제 #1
0
        private void ExportSection(TextWriter writer, IReportTemplateSection section, IGenerationContext context)
        {
            /* This searches for the first occurrence of a multiple rows producer.
             * CSV format is very limited and it makes no sense to export more tables or just a single value.
             */

            IMultipleRowsProducer producer = section.RootElement.FindFirstMultipleRowsProducer();

            if (producer != null)
            {
                DataRow[] rows = producer.GetValue(context).ToArray();

                if (rows.Length > 0)
                {
                    /* Write header row.
                     */
                    writer.WriteLine(string.Join(";", rows.First().Table.Columns.Cast<DataColumn>().Select(_ => _.ColumnName)));

                    /* Write data.
                     */
                    foreach (DataRow row in rows)
                    {
                        writer.WriteLine(string.Join(";", row.ItemArray));
                    }
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Overridden.
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        protected override Stream Export(IGenerationContext context)
        {
            IReportTemplateSection sd = context.Template.Sections.GetSection(SectionType.Detail);

            XDocument doc = new XDocument();

            doc.Add(new XElement("html"));

            XElement elmHead = new XElement("head");

            doc.Root.Add(elmHead);
            elmHead.Add(new XElement("title", context.Template.Description.Name));

            XElement elmBody = new XElement("body");

            doc.Root.Add(elmBody);

            string css = GetCssContent();

            if (!string.IsNullOrWhiteSpace(css))
            {
                XElement elmStyle = new XElement("style");
                elmBody.Add(elmStyle);
                elmStyle.Add(new XText(css));
            }

            WriteElement(sd.RootElement, elmBody, context);

            MemoryStream ms = new MemoryStream();

            doc.Save(ms);

            return(ms);
        }
예제 #3
0
        private void ExportSection(TextWriter writer, IReportTemplateSection section, IGenerationContext context)
        {
            /* This searches for the first occurrence of a multiple rows producer.
             * CSV format is very limited and it makes no sense to export more tables or just a single value.
             */

            IMultipleRowsProducer producer = section.RootElement.FindFirstMultipleRowsProducer();

            if (producer != null)
            {
                DataRow[] rows = producer.GetValue(context).ToArray();

                if (rows.Length > 0)
                {
                    /* Write header row.
                     */
                    writer.WriteLine(string.Join(";", rows.First().Table.Columns.Cast <DataColumn>().Select(_ => _.ColumnName)));

                    /* Write data.
                     */
                    foreach (DataRow row in rows)
                    {
                        writer.WriteLine(string.Join(";", row.ItemArray));
                    }
                }
            }
        }
예제 #4
0
        public JsonResult Create(CreateReportModel model)
        {
            IReportTemplate template = _templateFactory.Create(new DescriptionMetadata()
            {
                Name = model.Name, Author = model.CreatedBy
            });

            template.DataSources.Set(new DataSource("", new StaticDataProvider().Set("test", 4711).Set("switch", true)));

            // Un-comment this to add a data provider which returns a DataSet with data filled by a custom script written in C#.
            //template.DataSources.Set(new DataSource("scr1", new ScriptDataProvider()
            //{
            //    ScriptTypeKey = "cs",
            //    ScriptText = @"DataSet result = new DataSet(""Created from code""); result.Tables.Add(""Hello world""); return result;"
            //}));

            IReportTemplateSection section = template.Sections.GetSection(SectionType.Detail);

            ICompositionElement rootElement = new VerticalContainerElement();

            rootElement.Set("data-source", "");
            rootElement.AddChild(new StaticLabelElement()
            {
                Value = "Hello, world!"
            });
            rootElement.AddChild(new TableElement()
            {
                DataSource = "ours"
            });
            section.RootElement = rootElement;

            string definition = null;

            using (StreamReader reader = new StreamReader(_templateFactory.Save(template)))
            {
                definition = reader.ReadToEnd();
            }

            ReportData rd = new ReportData()
            {
                Name       = model.Name,
                Guid       = Guid.NewGuid(),
                CreatedAt  = DateTimeOffset.Now,
                CreatedBy  = model.CreatedBy,
                Definition = definition
            };

            using (IDataRepository repository = GetRepository())
            {
                repository.Add(rd);
            }

            return(Json(new { success = true, name = rd.Name, guid = rd.Guid }, JsonRequestBehavior.AllowGet));
        }
예제 #5
0
        /// <summary>
        /// Exports the provided report template to an ODT document.
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        protected override Stream Export(IGenerationContext context)
        {
            IReportTemplateSection sdet = context.Template.Sections.GetSection(SectionType.Detail);

            TextDocument doc = new TextDocument();

            doc.New();

            doc.DocumentConfigurations2 = null;

            doc.DocumentMetadata.Creator = context.Template.Description.Author;
            doc.DocumentMetadata.Title   = context.Template.Description.Name;

            WriteElement(sdet.RootElement, context, doc);

            return(CreateStream(doc));
        }
예제 #6
0
        /// <summary>
        /// Exports the provided report template to an ODS document.
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        protected override Stream Export(IGenerationContext context)
        {
            IReportTemplateSection sdet = context.Template.Sections.GetSection(SectionType.Detail);

            SpreadsheetDocument doc = new SpreadsheetDocument();

            doc.New();

            IMultipleRowsProducer producer = sdet.RootElement.FindFirstMultipleRowsProducer();

            if (producer != null)
            {
                Table table = TableBuilder.CreateSpreadsheetTable(doc, "Table", string.Empty);
                doc.Content.Add(table);

                WriteTable(producer, table, context);
            }

            return(CreateStream(doc));
        }
        private static void ParseLayoutSectionsInto(IDependencyResolver dependencyResolver, XElement node, ReportTemplate rep)
        {
            foreach (XElement elmSection in node.Elements("section"))
            {
                SectionType type = SectionType.Invalid;
                if (!Enum.TryParse(GetAttribute(elmSection, "name", ""), true, out type))
                {
                    continue;
                }

                IReportTemplateSection section = rep.Sections.GetSection(type);

                string rootElementAlias = GetAttribute(elmSection, "rootContainer", string.Empty);
                if (string.IsNullOrWhiteSpace(rootElementAlias))
                {
                    continue;
                }

                ICompositionElement rootElement = TryCreateInstance <ICompositionElement>(dependencyResolver, rootElementAlias);
                section.RootElement = rootElement;

                CreateElementsRecursive(dependencyResolver, elmSection, rootElement);
            }
        }