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)); } } } }
/// <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); }
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)); } } } }
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)); }
/// <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)); }
/// <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); } }