Vanaf de versie Aruba laat Mercator het gebruik toe van Crystal Reports als rapporteditor. Bijgevoegd vindt u de nodige inlichtingen.
Installatie
- Installeer Crystal Reports (op de werkposten waarop de lay-outs zullen worden gewijzigd).
- Kopieer Crystal.dll (zie bijgevoegd zip-bestand) in de hoofddirectory van Mercator.
Indien u de geleverde code wilt openen/wijzigen is Visual Studio 2010 noodzakelijk.
Gebruik
- Maak de query aan en kopieer de customizer (zie bijgevoegd zip-bestand).
- Voer de query uit om het bestand id_du_doc.xlm aan te maken (waarbij id_du_doc overeenkomt met het veld ID van CurrentDocum).
Vanaf dan beschikt u over een subdirectory \Data\Crystal\ met daarin het bestand id_du_doc.xml. Dit door Mercator geproduceerde xml-bestand bevat de DataSet die door het Crystal Reports rapport gebruikt kan worden. - In Crystal Reports:
- maak een nieuw rapport aan
- koppel het hierboven gegenereerde xml-bestand als database van het rpt bestand
- maak de Crystal Reports lay-out aan.
- sla op onder de naam id_du_doc.rpt in de subdirectory \Data\Crystal\.
- U kunt het rapport nu rechtstreeks wijzigen via "Tools / Parametrering Documenten" of het bekijken via de gebruikelijke methodes ("Beheer / Documenten - Reporting" of de knop "Documenten" in het overeenkomstige informatiebestand).
Werking
De koppeling tussen Mercator en Crystal Reports wordt tot stand gebracht door een rapport customizer. De code van deze customizer moet vermeld worden in de eigenschap "Customizer" van elk rapport dat gekoppeld moet worden aan Crystal Reports. De code, aanwezig in het bestand customizer.txt, luidt als volgt:
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");
// Ophalen van het id van het rapport in de tabel CurrentDocum
string ID = ds.Tables["CurrentDocum"].Rows[0]["id"].ToString();
// Declaratie van de variabele die de naam van de layout .rpt bevat
rapportcrystal = MercatorUi.Globals.RepData + "Crystal\\" + ID + ".rpt";
// Aanmaak van het XML-bestand dat als database voor het rapport dient
Api.DataSetToXmlFile(ds, MercatorUi.Globals.RepData + "Crystal\\" + ID + ".xml");
// Eigenschap StopProcess op True geplaatst om de voorvertoning van de Layout in Mercator te blokkeren
customizerInfo.StopProcess = true;
// Switch waarmee een verschillend commando uitgevoerd kan worden naargelang de gewenste actie
if (customizerInfo.Info == MercatorUi.Reporting.CustomizerInfoEnum.RunReport)
{
// Aanmaak en weergave van de form volgens de klasse gedefinieerd in de dll CrystalForms
Crystal.CrystalForm CrystalForm = new Crystal.CrystalForm(rapportcrystal);
CrystalForm.Show(MercatorUi.Globals.iw);
}
}
public bool ReportDesignBlock(DataRow dr_docum, DataSet ds)
{ // Test op de mogelijkheid om Crystal te starten
try
{// Opstarten van CrystalReport met de juiste layout
// Ophalen van het id van het rapport in de tabel CurrentDocum
string ID = ds.Tables["CurrentDocum"].Rows[0]["id"].ToString();
// Declaratie van de variabele die de naam van de layout .rpt bevat
rapportcrystal = MercatorUi.Globals.RepData + "Crystal\\" + ID + ".rpt";
if (!System.IO.File.Exists(rapportcrystal))
{
Api.Stop("Om deze actie te kunnen uitvoeren, gelieve een bestand ID_du_doc.rpt aan te maken en te koppelen aan het overeenkomstige .Xml-bestand");
}
else
{
System.Diagnostics.Process processus = new System.Diagnostics.Process();
processus.StartInfo.FileName = rapportcrystal;
processus.Start();
processus.Close();
}
}
catch (Exception e)
{
Dialogs.Stop(e.Message);
}
// We geven True terug om het normale proces van Mercator te blokkeren (pagina 1952 van de site)
return true;
}
}
}
We merken op dat deze code 2 interfaces implementeert:
- MercatorUi.ICustomizers.IDataSetForReportUpdater: deze wordt gebruikt om de DataSet te onderscheppen die Mercator produceert bij het ontwerpen of bewerken van een rapport. Ze laat ook toe te detecteren dat het proces overeenkomt met een rapportuitvoering (RunReport), en roept in dat geval het venster op dat de voorvertoning van het Crystal Report rapport mogelijk maakt.
- MercatorUi.ICustomizers.IReportDesignBlocker: deze wordt gebruikt om Crystal Reports te starten in "design"-modus. Ze onderbreekt ook het normale proces van Mercator om te voorkomen dat de editor van Mercator Aruba geopend wordt.
Belangrijke opmerking: Mercator verzekert geen enkele ondersteuning aangaande de functionaliteiten van Crystal Reports. Deze ontwikkeling wordt "as is" geleverd, zonder enige vorm van ondersteuning noch mogelijke evolutie in het kader van de standaardondersteuning van Mercator. Wij moedigen het gebruik van Crystal Reports met Mercator niet aan, aangezien alle functionaliteiten die beschikbaar zijn in Crystal Reports ook beschikbaar zijn in de rapporteditor van Mercator Aruba.
Crystal Reports® is een gedeponeerd handelsmerk van SAP en is dus geen eigendom van Mercator.
Te laden :
0000001955.zip (14 Kb - 10-10-2011)