L'exemple de programmation effectuée ici permet de produire un rapport externe, à partir d'une fiche signalétique, ce rapport exploitant les données de la fiche signalétique en cours. L'exemple est donné pour une fiche article.
La première étape consiste à créer et modifier le rapport, en veillant à ce que ce rapport soit bien lié aux données de cette fiche signalétique. Cela peut se faire par ce module, à exécuter directement dans un onglet C# de l'éditeur de code de Mercator.
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorUi;
namespace MyNameSpace
{
public class Class1 : MercatorUi.Interfaces. IExec
{
public void Main()
{
//string reportFileName = Globals.MainDir + "MonRapport.repx" ; // nom du rapport que l'on veut produire / modifier
string reportFileName = @"<MainDir\MonRapport.repx" ; // nom du rapport que l'on veut produire / modifier
MercatorUi.Sig. Sig sig = MercatorUi.Sig. _SigsStatic .SigByModule(MercatorUi.Sig. _SigEnum .STOCK);
MercatorUi.Forms.Sig. SigForm sigForm = sig.SelectSigForm(); // on regarde d'abord si une fiche article est ouverte
if (sigForm == null )
return ;
DataSet ds = sigForm.DataSource.DataSet.Copy(); // on pointe vers les données de la fiche en cours mais on fait un copy car on va modifier le dataset sur la ligne suivante
MercatorUi.Reporting. ReportingStatic .FillDataset(ds, Api .JustStem(reportFileName)); // on ajoute des infos utiles pour utilisation dans le report designer
string reportLayout = MercatorUi.Reporting. ReportingStatic .Reporting.EditLayout( Api .JustStem(reportFileName), Api .FileToStr(reportFileName, Encoding.UTF8), ds);
Api .StrToFile(reportLayout, reportFileName, Encoding.UTF8);
}
}
}
Ensuite, il faut ajouter dans le paramétrage de la fiche articles un bouton, dont le code est le suivant :
public static void Exec(MercatorUi.MovableControls. MovableButton clickedButton)
{
// enter your customized code here
MercatorUi.Forms.Sig. SigForm sigForm = (MercatorUi.Forms.Sig. SigForm )clickedButton.Form;
DataSet ds = sigForm.DataSource.DataSet.Copy(); // on pointe vers les données de la fiche en cours mais on fait un copy car on va modifier le dataset sur la ligne suivante
MercatorUi.Reporting. ReportingStatic .FillDataset(ds, "MonRapport" ); // on ajoute des infos utiles pour utilisation dans le report designer
List <MercatorUi.Reporting. OutputDescriptor > listOutputDescriptors = new List <MercatorUi.Reporting. OutputDescriptor >();
listOutputDescriptors.Add( new MercatorUi.Reporting. OutputDescriptorPreview ());
//MercatorUi.Reporting. ReportingStatic .Reporting.RunReport( "MonRapport" , Globals.MainDir + "MonRapport.repx" , ds, listOutputDescriptors);
MercatorUi.Reporting. ReportingStatic .Reporting.RunReport( "MonRapport" , @"<MainDir\MonRapport.repx" , ds, listOutputDescriptors);
}
Notez qu'il est essentiel que, dans ces 2 codes, le second paramètre de FillDataSet soit identique. (Attention : cette égalité est case-sensitive)
Nous insistons aussi sur la nécessité d'utiliser la méthode Copy() sur le DataSet qui maintient les données de la fiche en cours. En effet, le code illustré ici modifie ce DataSet. Afin de laisser tel quel le DataSet de la fiche en cours, il est bien nécessaire de procéder au préalable à une copie de ce DataSet. Ceci afin de ne pas perturber le fonctionnement ultérieur de Mercator.
Si on souhaite imprimer le document, on peut ajouter sous la ligne :
listOutputDescriptors.Add(new MercatorUi.Reporting.OutputDescriptorPreview()); cette ligne :
listOutputDescriptors.Add(new MercatorUi.Reporting.OutputDescriptorPrint()); Si on souhaite encore faire un export du contenu du rapport (par exemple, produire un fichier PDF) :
listOutputDescriptors.Add(new MercatorUi.Reporting.OutputDescriptorExport(MercatorUi.Reporting.ExportReportEnum.PDF);