Ce module permet de rechercher des articles sur base de plusieurs critères à comparer à la désignation.
L'exemple ici décrit permet de saisir, par exemple dans un document de vente, une série de critères séparés par des +. Les articles dont la désignation contiendra l'ensemble de ces critères, dans n'importe quel ordre, seront présentés à l'utilisateur.
Exemple : TUY+PVC+32 permettra de trouver tous ces articles :
- tuyau PVC 32 mm
- coude diam. 32 pour tuyaux en PVC
- PVC manchon pour tuy. 32 mm
Il faut placer ce code qui utilise l'interface
MercatorUi.ICustomizers.ISigCreated dans un customizer SigStock. Ce customizer utilise l'évènement
BeforeSearch.
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorUi;
using System.Drawing;
using System.Windows.Forms;
namespace SigStock
{
public class Customizer : MercatorUi.ICustomizers.ISigCreated
{
public void SigCreated(MercatorUi.Sig.Sig Sig)
{
Sig.BeforeSearch += new MercatorUi.Sig.SigClasses.BeforeSearchEventHandler(Sig_BeforeSearch);
}
// permet de faire une recherche sur le +
void Sig_BeforeSearch(object sender, MercatorUi.Sig.SigClasses.BeforeSearchEventArgs e)
{
if (e.Key.StartsWith(Api.Chr(20)) && (e.FormContext is MercatorUi.Forms.Billing.BillingForm))
e.Key = e.Key.Substring(1);
if (e.OriginalKey.Contains("+"))
{
string[] splits = e.OriginalKey.Split('+');
List<string> desiredWhereClauses = new List<string>(splits.Length);
foreach (string split in splits)
desiredWhereClauses.Add(string.Format("(s_modele like '%{0}%')", Api.UnquoteSql(split)));
e.DesiredWhereClause = string.Join(" AND ", desiredWhereClauses);
}
}
}
}
Le module peut, bien entendu, être adapté librement afin de modifier le comportement de recherche.