using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorController;
// <ReferenceInclude>"Crystal.dll"</ReferenceInclude>
using Crystal;
namespace MercatorUi.Reporting
{
public class Customizer : MercatorUi.ICustomizers.IDataSetForReportUpdater, MercatorUi.ICustomizers.IReportDesignBlocker
{
private string rapportcrystal;
public void DataSetForReportUpdate(DataSet ds, MercatorUi.Reporting.CustomizerInfo customizerInfo)
{
if (!System.IO.Directory.Exists(MercatorUi.Globals.RepData + "Crystal"))
System.IO.Directory.CreateDirectory(MercatorUi.Globals.RepData + "Crystal");
// Ophalen van het id van het rapport in de tabel CurrentDocum
string ID = ds.Tables["CurrentDocum"].Rows[0]["id"].ToString();
// Declaratie van de variabele die de naam van de layout .rpt bevat
rapportcrystal = MercatorUi.Globals.RepData + "Crystal\\" + ID + ".rpt";
// Aanmaak van het XML-bestand dat als database voor het rapport dient
Api.DataSetToXmlFile(ds, MercatorUi.Globals.RepData + "Crystal\\" + ID + ".xml");
// Eigenschap StopProcess op True geplaatst om de voorvertoning van de Layout in Mercator te blokkeren
customizerInfo.StopProcess = true;
// Switch waarmee een verschillend commando uitgevoerd kan worden naargelang de gewenste actie
if (customizerInfo.Info == MercatorUi.Reporting.CustomizerInfoEnum.RunReport)
{
// Aanmaak en weergave van de form volgens de klasse gedefinieerd in de dll CrystalForms
Crystal.CrystalForm CrystalForm = new Crystal.CrystalForm(rapportcrystal);
CrystalForm.Show(MercatorUi.Globals.iw);
}
}
public bool ReportDesignBlock(DataRow dr_docum, DataSet ds)
{ // Test op de mogelijkheid om Crystal te starten
try
{// Opstarten van CrystalReport met de juiste layout
// Ophalen van het id van het rapport in de tabel CurrentDocum
string ID = ds.Tables["CurrentDocum"].Rows[0]["id"].ToString();
// Declaratie van de variabele die de naam van de layout .rpt bevat
rapportcrystal = MercatorUi.Globals.RepData + "Crystal\\" + ID + ".rpt";
if (!System.IO.File.Exists(rapportcrystal))
{
Api.Stop("Om deze actie te kunnen uitvoeren, gelieve een bestand ID_du_doc.rpt aan te maken en te koppelen aan het overeenkomstige .Xml-bestand");
}
else
{
System.Diagnostics.Process processus = new System.Diagnostics.Process();
processus.StartInfo.FileName = rapportcrystal;
processus.Start();
processus.Close();
}
}
catch (Exception e)
{
Dialogs.Stop(e.Message);
}
// We geven True terug om het normale proces van Mercator te blokkeren (pagina 1952 van de site)
return true;
}
}
}