Pas de inhoud van een bankbestand aan met code

0000002353     -      29-11-2016

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:
 
Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorUi;
using System.Windows.Forms;


namespace Main
{
    public class Customizer : MercatorUi.ICustomizers.IExec
    {

        public void Main(MercatorUi.ICustomizers.ExecAction Action)
        {
            if (Action == MercatorUi.ICustomizers.ExecAction.DossierOpen)
            {
                Globals.Main.BaseFormCreating += new MercatorUi.Main.BaseFormCreatingEventHandler(Main_BaseFormCreating);
            }
            else if (Action == MercatorUi.ICustomizers.ExecAction.DossierClose)
            {
                Globals.Main.BaseFormCreating -= new MercatorUi.Main.BaseFormCreatingEventHandler(Main_BaseFormCreating);
            }
        }

        void Main_BaseFormCreating(object sender, MercatorUi.Main.BaseFormCreatingEventArgs e)
        {
            if (e.Form.GetType() == typeof(MercatorUi.Forms.Accounting.AccountingBankDomicilForm))
            {
                e.Form.Shown += new EventHandler(Form_Shown);
                e.Form.FormClosed += new FormClosedEventHandler(Form_FormClosed);
            }
        }

        void Form_Shown(object sender, EventArgs e)
        {
            MercatorUi.Forms.Accounting.AccountingBankDomicilForm accountingBankDomicilForm = (MercatorUi.Forms.Accounting.AccountingBankDomicilForm)sender;
            accountingBankDomicilForm.BeforeCreateFile += new MercatorUi.Forms.Accounting.AccountingBankDomicilForm.BeforeCreateFileEventHandler(accountingBankDomicilForm_BeforeCreateFile);
            accountingBankDomicilForm.Shown -= new EventHandler(Form_Shown); // désinscrire l'évènement
        }

        void Form_FormClosed(object sender, FormClosedEventArgs e)
        {
            MercatorUi.Forms.Accounting.AccountingBankDomicilForm accountingBankDomicilForm = (MercatorUi.Forms.Accounting.AccountingBankDomicilForm)sender;
            accountingBankDomicilForm.FormClosed -= new FormClosedEventHandler(Form_FormClosed);
            accountingBankDomicilForm.BeforeCreateFile -= new MercatorUi.Forms.Accounting.AccountingBankDomicilForm.BeforeCreateFileEventHandler(accountingBankDomicilForm_BeforeCreateFile);
        }

        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.