Mercator dispose d'une fonctionnalité qui permet, dans un signalétique, de chercher dans toutes les clés. Voir le point 1 de cette page : Recherche sur tous les critères.
Le code repris ci-dessous montre comment effectuer cette recherche aussi sur d'autres colonnes, appartenant éventuellement à d'autres tables.
A cet endroit du programme, Mercator produit une clause where qui, par exemple pour les articles, est semblable à celle-ci :
(S_MODELE like '{0}%') or (S_CLE1 like '{0}%') or (S_CLE2 like '{0}%') or (S_ID like '{0}%')
or exists(SELECT * from ARTFOU (NOLOCK) where (artfou.id_art=stock.s_id) and (REF_FOU like '{0}%'))
or exists(SELECT * from NUMSERIES (NOLOCK) where (numseries.id_art=stock.s_id) and (numseries.NUM_SERIE like '{0}%'))Cette clause est modifiable via l'événement SearchingAll de la classe MercatorUi.Sig.Sig.
Le code repris ci-dessous étend la recherche à
- S_MODELEN de la table STOCK,
- au nom du rayon.
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.SearchingAll += Sig_SearchingAll;
}
private void Sig_SearchingAll(object sender, MercatorUi.Sig.Sig.SearchingAllEventArgs e)
{
e.WhereClause += " or (S_MODELEN like '{0}%')"
+ " or exists(SELECT * from RAYONS (NOLOCK) where (rayons.id=stock.s_id_rayon) and (rayons.nom like '{0}%'))";
}
}
}
On notera dans ce code la présence de {0} qui sera substitué par la clé de recherche. Cette notation doit être respectée.