Verwijzen naar een externe DLL en haar externe methoden vanuit de Report-editor

0000002393     -      02-09-2016

De report-editor kan methods gebruiken die zich in een externe DLL bevinden. Deze DLL bevindt zich in de hoofddirectory van Mercator. Alvorens men de methode kan aanroepen, moet men verwijzen naar de externe assembly voor de report editor. Dit kan gedaan worden met behulp van de Main-customizer die de interface MercatorUi.ICustomizers.IInitReport. Deze verwijzing wordt uitgevoerd via volgend commando:

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

Vanaf dit moment kunnen alle klassen uit deze assembly gebruikt worden in de code-editor van de report-editor.

Indien men wenst is het ook mogelijk om methods toe te voegen aan de functies die beschikbaar zijn in de report-editor. Dit kan gedaan worden door FastReport.Utils.RegisteredObjects te manipuleren. De code hieronder toont hoe methods kan toevoegen aan de klasse CustomClassLibrary.Custom, die volgende 3 functies zal bevatten:

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

 

De Main-customizer gaat als volgt:

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 : zie commentaar beneden (De geregistreerde objecten zijn statisch)

        public void InitReport(object report) // Het echte report type 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) // De geregistreerde objecten zijn statisch -> daarom moet deze code maar 1x uitgevoerd worden per instance van Mercator.
            {
                Type custom = typeof(CustomClassLibrary.Custom);
                FastReport.Utils.RegisteredObjects.AddFunctionCategory("Custom", "Custom");
                //de methode MyMethod1 biedt 2 mogelijkheden: men moet dus de types specifiëren
                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");
                // MyMethod2 biedt maar 1 mogelijkheid-> type moet men dus niet specifiëren
                FastReport.Utils.RegisteredObjects.AddFunction(custom.GetMethod("MyMethod2"), "Custom");
                customFunctionsAdded = true;
            }
        }

    }
}

 

Bijgevoegd zip-bestand bevat de bronnen CustomClassLibrary.dll



Te laden : 0000002393.zip (3 Kb - 07-01-2015)