In de Datacollection Service is het mogelijk om voor de export een Extension te gebruiken. U kunt deze ook zelf ontwikkelen, u kunt zelf bepalen hoe u de output van het gekozen rapport wilt opslaan.
Dit artikel beschrijft de stappen hoe een extensie te maken.
Start Microsoft Visual Studio, maar een nieuw "Class Library" project
Voeg nu de onderstaande 2 referenties toe:
- "DataCollection.Agent.Core.Extensibility.Contracts.dll" dit bestand is te vinden in de folder van de DataCollector Windows Service.
- System.ComponentModel.Composition, dit is een .Net assembly
Decoreer je Class met onderstaande attribuut, de ingestelde naam zult u terug zien bij de te selecteren extensies in de DataCollection FrontEnd.
[Export("%SaveExtensionName%", typeof(ISaveExtension))]
Zorg ervoor dat je een Class hebt die "ISaveExtension" implementeert.
public class MySaveClass : ISaveExtension
{
public string GetLastError()
{
throw new NotImplementedException();
}
public List<string> GetParameters()
{
throw new NotImplementedException();
}
public bool Save(DataTable data, List<KeyValuePair<string, string>> parameters)
{
throw new NotImplementedException();
}
}
Wanneer het project klaar hebt kun je deze bouwen en de output dll plaatsen in de "Extensions" folder in de "DataCollection Windows Service" folder.
Belangrijk om te weten.
De Data collection service roept "GetParameters" aan om te bepalen welke parameters door een gebruiker ingesteld kunnen worden. Deze parameters komen terug in de interface van de Datacollector FrontEnd.
Wanneer door de DataCollection Service een Export wordt verwerkt en hier is een Extension geselecteerd wordt de "Save" methode aangeroepen. De ingestelde parameters komen als string's binnen. Deze zul je indien nodig zelf moeten casten naar het juiste type.
De data uit het rapport zit in de DataTable.
Voorbeeld
Hieronder een voorbeeld voor een Custom CSV extension.
using DataCollection.Agent.Core.Extensibility.Contracts;
using System;
using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
namespace DataCollection.Agent.Core.Extensibility.CSV
{
[Export("CustomToCSV", typeof(ISaveExtension))]
public class ToCSV : ISaveExtension
{
private List<String> m_Parameters = new List<string>();
private String m_LastError = String.Empty;
public List<string> GetParameters()
{
return m_Parameters;
}
public String GetLastError()
{
return m_LastError;
}
public String SaveLocation { get; set; }
public String Seperator { get; set; }
public Boolean EncloseWithQuotes { get; set; }
public ToCSV()
{
m_Parameters.Add("Save to file");
m_Parameters.Add("Seperator");
m_Parameters.Add("Enclose with quote");
}
public bool Save(DataTable data, List<KeyValuePair<string, string>> parameters)
{
Boolean MyResult = false;
if (ProcessParameters(parameters) == true)
{
String MyCSVFileContent = ConvertDatasourceCollectionToCSVString(data, Seperator, EncloseWithQuotes);
System.IO.StreamWriter MyFile = new System.IO.StreamWriter(SaveLocation);
MyFile.WriteLine(MyCSVFileContent);
MyFile.Close();
}
return MyResult;
}
private Boolean ProcessParameters(List<KeyValuePair<string, string>> parameters)
{
if (parameters.Any(x => x.Key == "Save Location") == true)
{
SaveLocation = parameters.Where(x => x.Key == "Save Location").FirstOrDefault().Value;
}
if (parameters.Any(x => x.Key == "Seperator") == true)
{
Seperator = parameters.Where(x => x.Key == "Seperator").FirstOrDefault().Value;
}
if (parameters.Any(x => x.Key == "Enclose with quote") == true)
{
String MyEncloseAsString = parameters.Where(x => x.Key == "Enclose with quote").FirstOrDefault().Value;
Boolean MyEncloseWithQuotes = true;
if (Boolean.TryParse(MyEncloseAsString, out MyEncloseWithQuotes) == true)
{
EncloseWithQuotes = MyEncloseWithQuotes;
}
}
return true;
}
private String ConvertDatasourceCollectionToCSVString(DataTable data, String seperator, Boolean encloseWithQuotes)
{
StringBuilder MyResult = new StringBuilder(String.Empty);
//Create Header!
for (Int32 i = 0; i < data.Columns.Count; i++)
{
if (i > 0)
{
MyResult.Append(seperator);
}
MyResult.Append(data.Columns[i]);
}
MyResult.Append(Environment.NewLine);
foreach (DataRow MyDataRow in data.Rows)
{
for (Int32 j = 0; j < data.Columns.Count; j++)
{
//Add delimiter
if (j > 0)
{
MyResult.Append(seperator);
}
String MyDataValueString = MyDataRow[j].ToString();
// Escape all quotes
MyDataValueString = MyDataValueString.Replace("\"", "\"\"");
// For simplicity always add quotes around the value
if (EncloseWithQuotes == true)
{
MyDataValueString = "\"" + MyDataValueString + "\"";
}
MyResult.Append(MyDataValueString);
}
MyResult.Append(Environment.NewLine);
}
return MyResult.ToString();
}
}
}
Opmerkingen
0 opmerkingen
U moet u aanmelden om een opmerking te plaatsen.