Vous consultez une page technique concernant le logiciel de gestion Mercator. Celle-ci contient des informations spécifiques destinées aux professionnels de Mercator. Souhaitez-vous être redirigés vers des informations plus générales ?


   Ne plus poser cette question

Effectuer un prétraitement sur les données lors de l'import dans un signalétique

0000002452     -      23/08/2016

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 :

Zoom
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)
        {
            if (sig.Module == MercatorUi.Sig._SigEnum.STOCK)
                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.