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

Reporting : utilisation de Crystal Reports

0000001955     -      20/10/2017

A partir de la version Aruba, Mercator permet l'utilisation de Crystal Reports comme éditeur de rapports. Vous trouverez ci-joint les informations nécessaires.

Installation

  1. Installer Crystal Reports (sur les postes sur lesquels les mises en page seront modifiées).
  2. Copier Crystal.dll (voir fichier zip ci-joint) dans le répertoire principal de Mercator.
    Si vous désirez ouvrir/modifier le code fourni, Visual Studio 2010 est nécessaire.

 

Utilisation

  1. Créer la requête et copier le customizer (voir fichier zip ci-joint).
  2. Exécuter la requête pour créer le fichier id_du_doc.xlm (où id_du_doc est repris dans le champ ID de CurrentDocum).
    Dès lors, vous disposez d'un sous-répertoire \Data\Crystal\ contenant le fichier id_du_doc.xml. Ce fichier xml produit par Mercator contient le DataSet qui pourra être exploité par le rapport Crystal Reports.
  3. Dans Crystal Reports :
    • créer un nouveau rapport 
    • attacher le fichier xml généré ci-dessus comme base de données du ficher rpt
    • créer la mise en page Crystal Reports.
    • enregistrer sous le nom id_du_doc.rpt dans le sous-répertoire \Data\Crystal\.
  4. Vous pouvez maintenant aller modifier le rapport directement par "Outils / Paramétrage documents" ou le visualiser par les procédés habituels ("Gestion / Documents - Reporting" ou bouton "Documents" dans le signalétique correspondant).

Mécanique

La mécanique de liaison entre Mercator et Crystal Reports est assurée par un customizer de rapport. Le code de ce customizer doit être indiqué dans la propriété "Customizer" de chaque rapport qui doit être lié à Crystal Reports. Le code, présent dans le fichier customizer.txt, s'écrit comme suit :

Zoom
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'exécuter 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'exécution 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 exé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;
        }
    }
}

Nous remarquons que ce code implémente 2 interfaces :

  • MercatorUi.ICustomizers.IDataSetForReportUpdater : elle est utilisée pour intercepter le DataSet produit par Mercator lors de la conception ou de l'édition d'un rapport. Elle permet aussi de détecter que le processus correspond à une exécution de rapport (RunReport) et dans ce cas, appeler la fenêtre permettant l'aperçu du rapport Crystal Reports.
     
  • MercatorUi.ICustomizers.IReportDesignBlocker : elle est utilisée pour lancer Crystal Reports en mode "design". Elle va aussi interrompre le processus normal de Mercator pour empêcher l'éditeur de Mercator Aruba de s'ouvrir.
     

 

Remarque importante : Mercator n'assure aucun support quant aux fonctionnalités de Crystal Reports. Ce développement est fourni "as is", sans autre forme de support ni de possibilité d'évolution dans le cadre du support standard de Mercator. Nous n'encourageons pas l'utilisation de Crystal Reports avec Mercator, puisque toutes les fonctionnalités disponibles dans Crystal Reports sont disponibles dans l'éditeur de rapports de Mercator Aruba.

Crystal Reports® est une marque déposée de SAP, et n'appartient donc pas à Mercator.



A télécharger : 0000001955.zip (14 Kb - 10/10/2011)