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 : rapport consistant en l'exécution d'un module C-sharp

0000001950     -      13/05/2016

Il est possible de placer un code C# en lieu et place de la requête SQL dans le paramétrage de documents. Pour que Mercator détecte cela, il faut que le code placé dans l'éditeur commence par le mot "using". Lorsque l'on veut commencer un module C#, il suffit de cliquer droit dans l'éditeur de code et de choisir "Code-source C# minimum". Le bouton "Exécuter" exécutera alors le code C# placé dans l'éditeur.

Lors de l'appel de ce document par l'utilisateur, Mercator ne fera qu'appeler ce module. Il n'exécutera aucune sélection de données et n'effectuera aucune génération de rapport. Ces opérations doivent donc être assurées par le module C#.

Exemple de code C# :

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

namespace MercatorUi.Reporting
{
    public static class Script
    {

        public static void Exec()
        {
            // Sélection des dates
            DateTime[] Dates = MercatorUi.Dialogs.AskDates("Veuillez sélectionner les dates ?");
            if ((Dates != null) && (Dates[1] != new DateTime(1900, 1, 1)))
            {
                // Sélection des données
                string ReqSql = "select id_cli, cli.c_nom, c_adresse, c_codep, c_ville, " +
                    "        sum(tot_bas_fb) as tot_ca, count(pieds_v.id) as nombre, " +
                    "        cast(@Date_1 as DateTime) as Date_1, Cast(@Date_2 as DateTime) as Date_2 " +
                    "    from pieds_v inner join cli on pieds_v.ID_CLI = cli.C_ID " +
                    "    where (date >= @Date_1) and(date <= @Date_2) " +
                    "      and(type = 1) " +
                    "    group by id_cli, cli.c_nom, c_adresse, c_codep, c_ville, c_id " +
                    "    order by cli.c_nom ";
                DataSet ds = Api.Zselect(Api.RepData, ReqSql,
                    new MercatorSqlParam("@Date_1", Dates[0], SqlDbType.DateTime),
                    new MercatorSqlParam("@Date_2", Dates[1], SqlDbType.DateTime));
                //string reportFileName = Globals.MainDir + "RapportTest.repx";
                string reportFileName = @"<MainDir\RapportTest.repx";  // database
                MercatorUi.Reporting.ReportingStatic.FillDataset(ds, "CliRep");

                if (Api.Answer("Modifier le layout ?"))
                {
                    // Création / Modification du rapport
                    string reportLayout = MercatorUi.Reporting.ReportingStatic.Reporting.EditLayout(Api.JustStem(reportFileName), Api.FileToStr(reportFileName, Encoding.UTF8), ds);
                    Api.StrToFile(reportLayout, reportFileName, Encoding.UTF8);
                }

                // Aperçu du rapport
                List<MercatorUi.Reporting.OutputDescriptor> listOutputDescriptors = new List<MercatorUi.Reporting.OutputDescriptor>();
                listOutputDescriptors.Add(new MercatorUi.Reporting.OutputDescriptorPreview());
                MercatorUi.Reporting.ReportingStatic.Reporting.RunReport("CliRep", reportFileName, ds, listOutputDescriptors);
            }
        }
    }
}

Notez que dans ce cas, le customizer associé au rapport n'a plus de raison d'être et ne peut plus être utilisé.