Module voor het zoeken naar artikels in de omschrijving op basis van meerdere criteria

0000002747     -      07-02-2023

Met deze module kan men artikels zoeken op basis van diverse criteria die te vergelijken zijn met de omschrijving.

In het hier beschreven voorbeeld kan men, bijvoorbeeld in een verkoopdocument, een reeks criteria invoeren die van elkaar gescheiden worden met behulp van "+"-tekens. De gebruiker krijgt de artikels te zien waarvan de omschrijving al deze criteria omvat, in eender welke volgorde.

Bijvoorbeeld: BUI+PVC+32 laat toe de volgende artikels te vinden:

  • buis pvc 32 mm
  • bocht diam. 32 voor buizen in pvc
  • pvc-mof voor buis 32 mm

Vervolgens moet u deze code, die de interface MercatorUi.ICustomizers.ISigCreated gebruikt, in een customizer SigStock plaatsen. Deze customizer gebruikt het BeforeSearch-event.

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);
        }

        // Laat toe om een opzoeking te doen op
        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('+');
                string desiredWhereClause = "";
                bool first = true;
                foreach (string split in splits)
                {
                    if (!first)
                        desiredWhereClause += " and ";

                    desiredWhereClause += string.Format("(s_modele like '%{0}%')", Api.UnquoteSql(split));
                    first = false;
                }
                e.DesiredWhereClause = desiredWhereClause;
            }
        }
    }
}

De module kan uiteraard vrij aangepast worden om het zoekgedrag te wijzigen.