Vous consultez une page technique concernant le logiciel de gestion Mercator. Celle-ci contient des informations spécifiques destinées aux professionnels de Mercator. Souhaitez-vous être redirigés vers des informations plus générales ?


   Ne plus poser cette question

Appeler un rapport externe à partir d'un bouton d'une fiche signalétique

0000001942     -      13/05/2016

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.

Zoom
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 :

Zoom
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);