Vous consultez une page technique concernant le logiciel de gestion Mercator. Celle-ci contient des informations spécifiques destinées aux professionnels de Mercator. Souhaitez-vous être redirigés vers des informations plus générales ?


   Ne plus poser cette question

Module de recherche articles dans la désignation sur base de plusieurs critères

0000002747     -      07/02/2023

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.

 

Zoom
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.