Hoe kan je gegevens samenvoegen die betrekking hebben op 2 fiches in een informatiebestand?

0000002424     -      24-08-2016

Mercator laat ons eenvoudig 2 fiches samenvoegen uit een informatiebestand. Dit heeft betrekking tot alle informatiebestanden van Mercator, behalve de algemene rekeningen, die beschikken reeds over de functie veranderen van boekhoudplan, die gebruikt moet worden voor dit doel.

Om deze fusie uit te voeren, moet men gebruik maken van de functie MergeCode uit de klasse MercatorUi.Sig.Sig, die verschillende parameters kan ontvangen:

Zoom
public void MergeCode()

public void MergeCode(string sourceCode)

public void MergeCode(string sourceCode, string targetCode)

public void MergeCode(string sourceCode, string targetCode, Delegates.GenericDelegateString1String stringUpdate)

De parameters zijn:

  • SourceCode : ID van het informatiebestand dat opgenomen zal worden bij het fusioneren (en die dus vernietigd zal worden)
  • TargetCode: ID van het informatiebestand dat de elementen zal ontvangen uit SourceCode.

Indien deze methode wordt opgeroepen zonder dat de soureCode en targetCode gedefinieerd zijn, zal er een dialoogvenster weergegeven worden, waar deze waarden ingevuld moeten worden.

Deze methode houdt rekening met de specifieke kenmerken van de database waarin deze draait:

  • identificatie van vreemde sleutels, met hierbij de relaties van toegevoegde tabellen
  • rekening houden met optionele velden, cross-links tussen informatiebestanden, koppelingen tussen documentvoet (pieds) en informatiebestanden,....

Het ondersteunt ook de overdracht van SQL en DISK-bestanden.

De SQL-query is wijzigbaar via een StringUpdate in de customizer van een informatiebestand, op deze query, waarvan het ID MERGECODE_XXX, en waarbij XXX moet vervangen worden door (FOU, STOCK, CLI,..)

Om de code te assembleren, bij zowel het aanroepen van MergeCode en het wijzigen van de query, is het mogelijk om een delegate mee te geven zoals in het voorbeeld hieronder (knop in klantenfiche):

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

namespace MercatorUi.MovableControls.ButtonsCodes
{
    public static class Script
    {

        public static void Exec(MercatorUi.MovableControls.MovableButton clickedButton)
        {
            // enter your customized code here
            MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)clickedButton.Form;
            string c_id = sigForm.DataSourceRow["c_id"].ToString().Trim();
            if (c_id == "") // nouvelle fiche non encore sauvegardée
                return;

            string c_id2 = Dialogs.AskTargetSig("Samenvoegen met welke klant?", Sig._SigEnum.CLI);
            if (string.IsNullOrEmpty(c_id2))
                return;

            if (!MercatorUi.Dialogs.AnswerYesNo(string.Format("Klanten samenvoegen \"{0}\" et \"{1}\" ? Het informatiebestand van \"{1}\" zal definitief vernietigd worden.", c_id, c_id2)))
                return;

            sigForm.Sig.MergeCode(c_id2, c_id, new Delegates.GenericDelegateString1String(stringUpdate));
        }

        private static string stringUpdate(string reqSql)
        {
            return reqSql + "\r\n\r\n"
                          + "update table_perso_sans_fk set id_cli=@new_code where id_cli=@old_code";
        }
    }
}