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:
public void MergeCode()
public void MergeCode(bool setSommeilOnly)
public void MergeCode(string sourceCode)
public void MergeCode(string sourceCode, bool setSommeilOnly)
public void MergeCode(string sourceCode, string targetCode)
public void MergeCode(string sourceCode, string targetCode, bool setSommeilOnly)
public void MergeCode(string sourceCode, string targetCode, Delegates.GenericDelegateString1String stringUpdate)
public void MergeCode(string sourceCode, string targetCode, Delegates.GenericDelegateString1String stringUpdate, bool setSommeilOnly)
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
- setSommeilOnly : als de waarde true is, is de fiche die wordt vernietigd alleen in slapende staat gezet (min. versie = 11.0)
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):
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";
}
}
}