Mercator peut exécuter du code sur mesure lors des échanges avec McdServerService. Cela se fait en utilisant ces évènements statiques disponibles sur MercatorUi.McdClient.McdClientStatic :
- BeforeExport
- AfterExport
- BeforeImport
- AfterImport
Ces évènements passent un eventArgs qui contient ces propriétés :
- Dictionary<McdClientClasses.McdBaseDicoKeyEnum, McdClientClasses.McdItemDescriptor> DicoBase : liste des éléments exportables/importables
- StringBuilder SbErr : messages d'erreurs éventuels
- Boolean Cancel (uniquement pour les évènements Before) : à mettre à true si on souhaite interrompre le processus.
Ils s'exécutent dans le Mercator qui effectuent les échanges (pas dans McdServerService).
L'exemple ci-dessous est un point de départ pour un développement plus réaliste. Il illustre simplement ces deux fonctionnalités :
- On retire simplement la possibilité d'exporter les représentants.
- Si on a sélectionné l'export des magasins, on interrompt le processus.
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)
{
MercatorUi.McdClient.McdClientStatic.BeforeExport += new MercatorUi.McdClient.McdClientStatic.BeforeExportEventHandler(McdClientStatic_BeforeExport);
}
else if (Action == MercatorUi.ICustomizers.ExecAction.DossierClose)
{
MercatorUi.McdClient.McdClientStatic.BeforeExport -= new MercatorUi.McdClient.McdClientStatic.BeforeExportEventHandler(McdClientStatic_BeforeExport);
}
}
void McdClientStatic_BeforeExport(MercatorUi.McdClient.McdClientStatic.BeforeExportEventArgs e)
{
if (e.DicoBase.ContainsKey(MercatorUi.McdClient.McdClientClasses.McdBaseDicoKeyEnum.OutReps))
{
e.DicoBase.Remove(MercatorUi.McdClient.McdClientClasses.McdBaseDicoKeyEnum.OutReps);
}
if (e.DicoBase.ContainsKey(MercatorUi.McdClient.McdClientClasses.McdBaseDicoKeyEnum.OutMagasins) && e.DicoBase[MercatorUi.McdClient.McdClientClasses.McdBaseDicoKeyEnum.OutMagasins].Selected)
{
e.SbErr.AppendLine("Les magasins ne peuvent être exportés !!!");
e.Cancel = true;
}
}
}
}
Autres liens concernant la configuration des échanges via MCDServerService :