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");
// Récupération de l'id du rapport dans la table CurrentDocum
string ID = ds.Tables["CurrentDocum"].Rows[0]["id"].ToString();
//Déclaration de la variable contenant le nom du layout .rpt
rapportcrystal = MercatorUi.Globals.RepData + "Crystal\\" + ID + ".rpt";
//Création du fichier XML servant de base de données au rapport
Api.DataSetToXmlFile(ds, MercatorUi.Globals.RepData + "Crystal\\" + ID + ".xml");
// Propriétés StopProcess placé à True pour bloquer la prévisualisation du Layout dans Mercator
customizerInfo.StopProcess = true;
// Switch permettant d'éxucuter une commande différent selon l'action voulue
if (customizerInfo.Info == MercatorUi.Reporting.CustomizerInfoEnum.RunReport)
{
// Création et affichage de la form selon la classe définie dans la dll CrystalForms
Crystal.CrystalForm CrystalForm = new Crystal.CrystalForm(rapportcrystal);
CrystalForm.Show(MercatorUi.Globals.iw);
}
}
public bool ReportDesignBlock(DataRow dr_docum, DataSet ds)
{ //Test sur la possibilité d'éxecution de lancement de crystal
try
{//Lancement de CrystalReport avec le bon layout
// Récupération de l'id du rapport dans la table CurrentDocum
string ID = ds.Tables["CurrentDocum"].Rows[0]["id"].ToString();
//Déclaration de la variable contenant le nom du layout .rpt
rapportcrystal = MercatorUi.Globals.RepData + "Crystal\\" + ID + ".rpt";
if (!System.IO.File.Exists(rapportcrystal))
{
Api.Stop("Pour pouvoir éxécuter cette action, veuillez créer un fichier ID_du_doc.rpt et le lier au fichier .Xml correspondant");
}
else
{
System.Diagnostics.Process processus = new System.Diagnostics.Process();
processus.StartInfo.FileName = rapportcrystal;
processus.Start();
processus.Close();
}
}
catch (Exception e)
{
Dialogs.Stop(e.Message);
}
// On renvoie True pour bloquer le processus normal de Mercator (page 1952 du site)
return true;
}
}
}