Een extern rapport oproepen via een knop van een informatiebestandfiche

0000001942     -      13-05-2016

Het hier beschreven voorbeeld laat toe om vanuit een informatiebestandfiche een extern rapport te genereren, waarvoor de gegevens van de actieve informatiebestandfiche worden gebruikt. Het gegeven voorbeeld betreft een artikelfiche.

De eerste stap bestaat erin het rapport te creëren en te wijzigen, waarbij men ervoor zorgt dat dit rapport wel degelijk gelinkt is aan de gegevens van deze informatiebestandfiche. Dat is mogelijk via deze module, die rechtstreeks wordt uitgevoerd in een tabblad C# van de code-editor van 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" ; // Naam van het rapport dat u wenst te genereren/wijzigen 
             string reportFileName = @"<MainDir\MonRapport.repx" ; // Naam van het rapport dat u wenst te genereren/wijzigen

             MercatorUi.Sig. Sig sig = MercatorUi.Sig. _SigsStatic .SigByModule(MercatorUi.Sig. _SigEnum .STOCK);
             MercatorUi.Forms.Sig. SigForm sigForm = sig.SelectSigForm(); // Eerst moet u nagaan of er een artikelfiche geopend is 
             if (sigForm == null )
                 return

             DataSet ds = sigForm.DataSource.DataSet.Copy(); // U verwijst naar de gegevens van de actieve fiche, maar maakt er een kopie van, want op de volgende lijn dient u de dataset te wijzigen
             MercatorUi.Reporting. ReportingStatic .FillDataset(ds, Api .JustStem(reportFileName)); // U voegt interessante informatie toe voor gebruik in de report designer 

             string reportLayout = MercatorUi.Reporting. ReportingStatic .Reporting.EditLayout( Api .JustStem(reportFileName), Api .FileToStr(reportFileName, Encoding.UTF8), ds); 
             Api .StrToFile(reportLayout, reportFileName, Encoding.UTF8);
        }
    }
}

Vervolgens moet u in de parameterinstelling van de artikelfiche een knop toevoegen met de volgende code:

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(); // U verwijst naar de gegevens van de actieve fiche, maar maakt er een kopie van, want op de volgende lijn dient u de dataset te wijzigen
     MercatorUi.Reporting. ReportingStatic .FillDataset(ds, "MonRapport" ); // U voegt interessante informatie toe voor gebruik in de 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);
}

Merk op dat het essentieel is dat in deze 2 codes de tweede parameter van FillDataSet identiek is. (Opgelet: deze vergelijking is hoofdlettergevoelig)

Wij benadrukken ook de noodzaak om gebruik te maken van de methode Copy() voor de DataSet die de gegevens van de actieve fiche bevat. Want de hier geïllustreerde code wijzigt deze DataSet. Dus om ervoor te zorgen dat de DataSet van de actieve fiche behouden blijft, is het noodzakelijk om eerst een kopie te maken van deze DataSet. Dit om te vermijden dat de werking van Mercator later wordt verstoord.

Indien u het document wenst af te drukken, kunt u onder de lijn:

listOutputDescriptors.Add(new MercatorUi.Reporting.OutputDescriptorPreview());

de volgende lijn toevoegen:

listOutputDescriptors.Add(new MercatorUi.Reporting.OutputDescriptorPrint());

Wenst u de content van het rapport ook nog te exporteren (bv. een pdf-bestand genereren):

listOutputDescriptors.Add(new MercatorUi.Reporting.OutputDescriptorExport(MercatorUi.Reporting.ExportReportEnum.PDF);