De hier afgebeelde customizer laat zien hoe u de XML-inhoud van een bank-bestand kan wijzigen juist voor het gegenereerd wordt. Het geldt hier op de afschrijvingen, maar hetzelfde principe kan worden toegepast op overdrachten.
Bijvoorbeeld, het doel van de customizer is het vervangen van het PmtInfId element van het type
<PmtInfId>MERCATOR-F4F07B2F-C4AF-E1F3-4E</PmtInfId>
Door de laatstgenoemde:
<PmtInfId>M002566-F4F07B2F-C4AF-E1F3-4E</PmtInfId>
Dat wil zeggen door de referentie van het dossier, hetzij in dit voorbeeld 2566
De customizer buit het evenement BeforeCreateFile uit van de MercatorUi.Forms.Accounting.AccountingBankDomicilForm. Dit evenement passeert een BeforeCreateFileEventArgs, waarvan de Xml-eigenschap (dat een StringBuilder is) de inhoud van het Xml-bestand neemt.
Voor een verzoek tot overdracht moet AccountingBankDomicilForm vervangen worden door AccountingBankVirementForm.
De code van deze customizer is als volgt:
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorUi;
using System.Windows.Forms;
// <CompileWithRoslyn />
namespace Main
{
public class Customizer : MercatorUi.ICustomizers.IExec
{
public void Main(MercatorUi.ICustomizers.ExecAction Action)
{
if (Action == MercatorUi.ICustomizers.ExecAction.DossierOpen)
{
Globals.Main.BaseFormCreating += Main_BaseFormCreating;
}
else if (Action == MercatorUi.ICustomizers.ExecAction.DossierClose)
{
Globals.Main.BaseFormCreating -= Main_BaseFormCreating;
}
}
void Main_BaseFormCreating(object sender, MercatorUi.Main.BaseFormCreatingEventArgs e)
{
if (e.Form is MercatorUi.Forms.Accounting.AccountingBankDomicilForm accountingBankDomicilForm)
{
accountingBankDomicilForm.BeforeCreateFile += AccountingBankDomicilForm_BeforeCreateFile;
accountingBankDomicilForm.FormClosed += AccountingBankDomicilForm_FormClosed;
}
}
private void AccountingBankDomicilForm_FormClosed(object sender, FormClosedEventArgs e)
{
MercatorUi.Forms.Accounting.AccountingBankDomicilForm accountingBankDomicilForm = (MercatorUi.Forms.Accounting.AccountingBankDomicilForm)sender;
accountingBankDomicilForm.BeforeCreateFile -= AccountingBankDomicilForm_BeforeCreateFile;
accountingBankDomicilForm.FormClosed -= AccountingBankDomicilForm_FormClosed;
}
void AccountingBankDomicilForm_BeforeCreateFile(object sender, MercatorUi.Forms.Accounting.AccountingBankDomicilForm.BeforeCreateFileEventArgs e)
{
MercatorUi.Forms.Accounting.AccountingBankDomicilForm accountingBankDomicilForm = (MercatorUi.Forms.Accounting.AccountingBankDomicilForm)sender;
string reference = Api.JustStem(e.Fichier);
e.Xml.Replace("<PmtInfId>MERCATOR-", "<PmtInfId>M" + Api.Right(reference, 7) + "-");
}
}
} Zoals voor alle onderschepte events met een logic, beginnen ze bij (Action == MercatorUi.ICustomizers.ExecAction.DossierOpen), Het is noodzakelijk om Mercator te herstarten op dat deze code gebruikt kan worden.
Waarschuwing: Deze code hoort zorgvuldig uitgevoerd te worden, omdat het de inhoud van het bankbestand verandert. In het ergste geval kan een programmeerfout doorgegeven worden aan de correct uitgevoerde bankbestanden, ondanks het feit dat het fouten bevat.
Gegroepeerde overschrijvingen
Standaard verstuurt Mercator de overschrijvingen binnen eenzelfde bestand als afzonderlijke overschrijvingen. Het is mogelijk om deze te groeperen tot één globale betaling. Dit kan nuttig zijn wanneer er maximumbedragen gekoppeld zijn aan verschillende handtekeningen. In dat geval kan men ervoor zorgen dat ofwel het volledige bestand wordt aanvaard, ofwel het volledige bestand wordt geweigerd. Hiervoor moet de tag BtchBookg op true worden ingesteld.
void AccountingBankVirementForm_BeforeCreateFile(object sender, MercatorUi.Forms.Accounting.AccountingBankVirementForm.BeforeCreateFileEventArgs e)
{
MercatorUi.Forms.Accounting.AccountingBankVirementForm accountingBankVirementForm = (MercatorUi.Forms.Accounting.AccountingBankVirementForm)sender;
e.Xml.Replace("<BtchBookg>false", "<BtchBookg>true");
}