Filters aanpassen in het informatiebestand van de artikels

0000002146     -      30-10-2013

Deze programmering toont verschillende voorbeelden van aanpassingen aan het filterproces in het informatiebestand van de artikels. Deze is gebaseerd op een customizer SigStock die de interface MercatorUi.ICustomizers.ISigCreated implementeert en gebruik maakt van het event Filtering van de klasse MercatorUi.Sig.Sig.

De voornaamste functie van het Filtering-event is toegang verlenen tot het lezen en schrijven in de where clause (SQL syntax) die gebruikt zal worden om de filter uit te voeren. Deze clause is beschikbaar in e.WhereClause.

Onderstaande code toont:

  • hoe u de content van deze where clause kan openen
  • hoe u de huidige filters kan annuleren
  • hoe u een deel van de door de gebruiker gecodeerde filter kan verwijderen door de clause where te wijzigen
Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorUi;
using System.Windows.Forms;
using System.Reflection;

namespace SigStock
{
    public class Customizer : MercatorUi.ICustomizers.ISigCreated
    {

        public void SigCreated(MercatorUi.Sig.Sig Sig) // Mercator moet opnieuw worden opgestart opdat het programma rekening zou houden met de wijzigingen die via SigCreated aan de customizer werden aangebracht.
        {
            Sig.Filtering += new MercatorUi.Sig.Sig.FilteringEventHandler(Sig_Filtering);
        }

        void Sig_Filtering(object sender, MercatorUi.Sig.Sig.FilteringEventArgs e)
        {
            // filter tonen
            MercatorUi.Dialogs.Stop("De volgende filter zal worden toegepast: " + e.WhereClause);
            // Ook te zien in e:
            //     e.Mode: geeft aan of er al dan niet op expression wordt gefilterd
            //     e.SigForm : SigForm vanaf waar de filtering werd opgestart

            // hoe de huidige filter annuleren?
            if (MercatorUi.Dialogs.AnswerYesNo("Wenst u de filter te annuleren?"))
            {
                e.WhereClause = ""; // door de WhereClause opnieuw leeg te plaatsen, wordt de huidige filter geannuleerd
                return;
            }

            // de filter op S_ID_RAYON annuleren: dit gedeelte van de clause heeft de vorm " and (STOCK.S_ID_RAYON='ABCDEFGHIJ')"
            if (e.WhereClause.Contains("STOCK.S_ID_RAYON"))
            {
                string s_id_rayon = Api.StrExtract(e.WhereClause, "STOCK.S_ID_RAYON='", "')");
                e.WhereClause = e.WhereClause.Replace(" and (STOCK.S_ID_RAYON='" + s_id_rayon + "')", "");
            }
        }
    }
}

Opmerking: op de laatste codelijn, is de spatie voor and verplicht.