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

Référencer une DLL externe et des méthodes externes dans l'éditeur de rapports

0000002393     -      02/09/2016

L'éditeur de rapports peut utiliser des méthodes se trouvant dans des DLL externes. Ces DLL doivent être présentes dans le répertoire principal de Mercator. Avant de charger une méthode externe, il faut référencer l'assembly externe pour l'éditeur de rapports. Cela se fait à l'aide d'un customizer Main qui va implémenter l'interface MercatorUi.ICustomizers.IInitReport. Ce référencement est effectué via cette ligne de commande : 

fastReport.ReferencedAssemblies = Api.StringArrayAdd(fastReport.ReferencedAssemblies, "CustomClassLibrary.dll");

A partir de ce moment, toutes les classes de cet assembly peuvent être utilisées dans l'éditeur de code propre à l'éditeur de rapports.

Si on le souhaite, il est aussi possible d'ajouter des méthodes dans l'arborescence des fonctions présentes dans l'éditeur de rapports. Cela se fait en manipulant les FastReport.Utils.RegisteredObjects. Le code ci-dessous montre comment intégrer les méthodes d'une classe CustomClassLibrary.Custom qui contient ces 3 méthodes :

  • public static int MyMethod1(int i, int j)
  • public static int MyMethod1(int i, int j, int k)
  • public static string MyMethod2(string s)

 

Le code de ce customizer Main s'établit comme suit : 

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorUi;

// <ReferenceInclude>"CustomClassLibrary.dll"</ReferenceInclude>


namespace Main
{
    public class Customizer : MercatorUi.ICustomizers.IInitReport
    {

        private static bool customFunctionsAdded = false; // static : voir commentaire plus bas (les registeredObjects sont statiques)

        public void InitReport(object report) // the real type of report is FastReport.Report
        {
            FastReport.Report fastReport = (FastReport.Report)report;
            if (!Api.StringArrayContains(fastReport.ReferencedAssemblies, "CustomClassLibrary.dll"))
                fastReport.ReferencedAssemblies = Api.StringArrayAdd(fastReport.ReferencedAssemblies, "CustomClassLibrary.dll");
            if (!customFunctionsAdded) // les registeredObjects sont statiques -> on ne doit donc exécuter qu'une seule fois ce code par instance de Mercator.
            {
                Type custom = typeof(CustomClassLibrary.Custom);
                FastReport.Utils.RegisteredObjects.AddFunctionCategory("Custom", "Custom");
                // la méthode MyMethod1 offre 2 signatures : il faut donc spécifier les types
                FastReport.Utils.RegisteredObjects.AddFunction(custom.GetMethod("MyMethod1", new Type[2] { typeof(int), typeof(int) }), "Custom");
                FastReport.Utils.RegisteredObjects.AddFunction(custom.GetMethod("MyMethod1", new Type[3] { typeof(int), typeof(int), typeof(int) }), "Custom");
                // la méthode MyMethod2 offre une seule signature -> on ne doit pas spécifier les types
                FastReport.Utils.RegisteredObjects.AddFunction(custom.GetMethod("MyMethod2"), "Custom");
                customFunctionsAdded = true;
            }
        }

    }
}

 

Le fichier zip ci-joint contient les sources de CustomClassLibrary.dll.



A télécharger : 0000002393.zip (3 Kb - 07/01/2015)