Using the SystemWeaver Script Language, it's possible to include data coming from a SWExtension in Document or report generation. This article provides an example of how to do this, and which support is offered.
Example Code
using RemObjects.Hydra; using System; using System.ComponentModel; using System.IO; using System.Xml.Linq; using SystemWeaver.ExtensionsAPI; namespace SWExtension.ReportExtension { [Plugin, NonVisualPlugin] public partial class TagWriter : NonVisualPlugin, IswTagWriter { public TagWriter() { InitializeComponent(); } public TagWriter(IContainer container) { container.Add(this); InitializeComponent(); } public string GetTagWriterName() { return "SWExtension.ReportExtension"; } public void Write(IswTagWriterWrapper tagWriterWrapper, IswObj obj) { // If you want to access information on an item var item = obj as IswItem; if (item == null) return; var tagNodeXml = tagWriterWrapper.GetTagNodeXML(); // Get custom attributes int numberOfPictures = GetIntAttribute(tagNodeXml, "numberOfPictures"); int numberOfRandomRows = GetIntAttribute(tagNodeXml, "numberOfRandomRows"); for (int i = 0; i < numberOfPictures; i++) { // Add an image tagWriterWrapper.AddPngImage(ImageToByteArray(System.Drawing.Image.FromFile("GoodStuff.PNG"))); } Random rnd = new Random(); string[,] data; data = new string[numberOfRandomRows, 3]; for (int i = 0; i < numberOfRandomRows; i++) { data[i, 0] = (i + 1).ToString(); data[i, 1] = rnd.Next(100).ToString(); data[i, 2] = rnd.Next(100000).ToString(); } // Add a table tagWriterWrapper.AddTable(new string[] { "Header 1", "Header 2", "Header 3" }, data, new int[] { 20, 30, 40 }); } private int GetIntAttribute(string tagNodeXml, string attributeName) { try { var doc = XDocument.Parse(tagNodeXml); var attr = doc.Root.Attribute(attributeName); return (attr == null || !int.TryParse(attr.Value, out int value)) ? -1 : value; } catch { return -1; } } public byte[] ImageToByteArray(System.Drawing.Image imageIn) { using (var ms = new MemoryStream()) { imageIn.Save(ms, imageIn.RawFormat); return ms.ToArray(); } } } }
Example Report Configuration
A view Extension may define an <Extension> tag to be used for report generation. The report tag typically follows the pattern:
<Extension name="SWExtension.ExtensionName" />
<Report> <Section title="Introduction"> </Section> <Section title="Chapter 1" no="5"> <Section title="This is a section"> </Section> <Section title="This is another section"> </Section> </Section> <Description/> <ForEach select="/ITAP"> <Extension name="SWExtension.ReportExtension" numberOfPictures="3" numberOfRandomRows="5"/> </ForEach> </Report>
The generated report content, as defined by the specific extension, will be included into the generated report.