Een voorbehandeling uitvoeren op data tijdens het importeren in een signalitiek

0000002452     -      02-01-2019

Deze programmatie toont hoe tussen te komen op de gegevens die zullen worden geïmporteerd in een signaletiek door middel van de import functie (Excel, XML, ...). Ze maakt gebruikt van het event Importing van de klasse Sig.

In dit voorbeeld, die is toegepast op de signaletiek Artikels, worden 2 controles uitgevoerd:

  • het geïmporteerde bestand bevat de kolom S_ID
  • het geïmporteerde bestand bevat geen lijnen waar s_id='BBBA'

De code ziet er als volgt uit:

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)
        {
            sig.Importing += new MercatorUi.Sig.SigClasses.ImportingEventHandler(sig_Importing);
        }

        private void sig_Importing(object sender, MercatorUi.Sig.SigClasses.ImportingEventArgs e)
        {
            if (e.ForExternalFile)
                return; // bij interactieve import, niets doen

            // Nakijken of de kolom S_ID bestaat
            if (!e.DataTableImport.Columns.Contains("S_ID"))
            {
                Dialogs.Stop("De kolom S_ID bestaat niet!");
                e.CancelImport = true;
                return;
            }
            // Nakijken of er geen enkele lijn s_id='BBBA' bevat
            DataRow[] foundRows = e.DataTableImport.Select("s_id='BBBA'");
            if (foundRows.Length > 0)
            {
                if (!Dialogs.AnswerYesNo("Een bestand met één of meerdere lijnen waar S_ID de waarde BBBA bevat kan niet worden geïmporteerd!\r\nDeze lijn(en) verwijderen ?"))
                {
                    e.CancelImport = true;
                }
                else
                {
                    foreach (DataRow dr in foundRows)
                        e.DataTableImport.Rows.Remove(dr);

                    if (e.DataTableImport.Rows.Count == 0)
                    {
                        Dialogs.Stop("Er is geen enkele lijn meer te importeren !");
                        e.CancelImport = true;
                    }
                }
            }
        }
    }
}

 

In deze code stelt men vast dat het volgende commando de import procedure kan stoppen: 

e.CancelImport = true

Opmerking :

Het event Importing wordt gelanceerd nadat Mercator reeds bepaalde wijzigingen in de te importeren gegevens heeft aangebracht. Het event is gelanceerd net vóór de werkelijke import.