Cette programmation montre comment intervenir sur les données qui vont être importées dans un signalétique par la fonctionnalité d'import (Excel, XML, ...) Elle exploite l'évènement Importing de la classe Sig.
Dans cet exemple, qui s'applique au signalétique des articles, 2 contrôles sont effectués :
- le fichier importé contient la colonne S_ID
- le fichier importé ne contient pas de lignes où s_id='BBBA'
Le code s'établit comme suit :
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorUi;
namespace SigStock
{
public class Customizer : MercatorUi.ICustomizers.ISigCreated
{
public void SigCreated(MercatorUi.Sig.Sig sig)
{
sig.Importing += new MercatorUi.Sig.SigClasses.ImportingEventHandler(sig_Importing);
}
private void sig_Importing(object sender, MercatorUi.Sig.SigClasses.ImportingEventArgs e)
{
if (e.ForExternalFile)
return; // en import interactif, on ne fait rien
// Vérifier que la colonne S_ID existe
if (!e.DataTableImport.Columns.Contains("S_ID"))
{
Dialogs.Stop("La colonne S_ID n'existe pas !");
e.CancelImport = true;
return;
}
// Vérifier que sur aucune ligne s_id='BBBA'
DataRow[] foundRows = e.DataTableImport.Select("s_id='BBBA'");
if (foundRows.Length > 0)
{
if (!Dialogs.AnswerYesNo("Vous ne pouvez pas importer un fichier avec une ou plusieurs lignes où S_ID vaut BBBA !\r\nSupprimer cette/ces ligne(s) ?"))
{
e.CancelImport = true;
}
else
{
foreach (DataRow dr in foundRows)
e.DataTableImport.Rows.Remove(dr);
if (e.DataTableImport.Rows.Count == 0)
{
Dialogs.Stop("Il n'y a plus aucune ligne à importer !");
e.CancelImport = true;
}
}
}
}
}
}
Dans le code, on remarque que la commande suivante permet d'arrêter les processus d'import :
e.CancelImport = true
Remarque :
Il faut noter que l'événement Importing est levé après que Mercator ait déjà apporté certaines modifications dans les données à importer. Il est levé juste avant l'import effectif.