Cette programmation montre différents exemples d'intervention sur le processus de filtrage dans le signalétique des articles. Elle est construite sur base d'un customizer SigStock implémentant l'interface MercatorUi.ICustomizers.ISigCreated et exploitant l'évènement Filtering de la classe MercatorUi.Sig.Sig.
La principale fonctionnalité de l'évènement Filtering est de donner un accès en lecture et en écriture à la clause where (syntaxe SQL) qui sera utilisée pour effectuer le filtrage. Cette clause est disponible dans e.WhereClause.
Le code ci-dessous montre :
- comment accéder au contenu de cette clause where
- comment annuler le filtrage en cours
- comment retirer une partie du filtre encodé par l'utilisateur en modifiant la clause where
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) // Il faut redémarrer Mercator pour qu'il prenne en compte les modifications apportées au customizer via SigCreated.
{
Sig.Filtering += new MercatorUi.Sig.Sig.FilteringEventHandler(Sig_Filtering);
}
void Sig_Filtering(object sender, MercatorUi.Sig.Sig.FilteringEventArgs e)
{
// montrer le filtre
MercatorUi.Dialogs.Stop("Le filtre suivant va être appliqué : " + e.WhereClause);
// A voir aussi dans e :
// e.Mode : indique si on en filtrage sur expression ou pas
// e.SigForm : SigForm à partir de la quelle la filtrage a été démarré
// comment annuler le filtrage en cours ?
if (MercatorUi.Dialogs.AnswerYesNo("Voulez-vous annuler le filtrage ?"))
{
e.WhereClause = ""; // en remettant à blanc WhereClause, on annule le fitrage en cours
return;
}
// retirer le filtre sur S_ID_RAYON : cette partie de la clause where est de la forme " 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 + "')", "");
}
}
}
}
Note : sur le dernière ligne de code, l'espace avant and est obligatoire.