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

Filtrer le contenu de la PeppolBox en fonction d'un déroulant listant différentes sociétés destinatrices

0000003416     -      30/12/2025

Le code décrit ci-dessus permet de filtrer le contenu de la PeppolBox pour masquer les messages en fonction du PeppolId du destinataire. Cette solution est particulièrement adaptée pour les configurations où une même PeppolBox reçoit des messages pour différentes sociétés. Le code se fonde sur un customizer PeppolBox qui implémente l'interface MercatorUi.ICustomizers.IPeppolBoxHelperCreated. Un déroulant est placé dans le haut de la PeppolBox afin de pouvoir sélectionner la société pour laquelle on désire voir les messages.

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Linq;
using MercatorApi;
using MercatorExtensions;
using MercatorUi;
using MercatorDatabase;
using System.Xml;
using MercatorUi.Forms.Other.OtherClasses;

// <CompileWithRoslyn />

namespace PeppolBox
{
    public class Customizer : MercatorUi.ICustomizers.IPeppolBoxHelperCreated, MercatorUi.ICustomizers.IPeppolBoxHelperClosed
    {
        private MercatorUi._BaseClasses.ComboBoxExReadOnly comboFilter;

        public void PeppolBoxHelperCreated(PeppolBoxHelper peppolBoxHelper)
        {
            peppolBoxHelper.Downloading += PeppolBoxHelper_Downloading;
            if (peppolBoxHelper.PeppolBoxForm != null)
            {
                List<MercatorUi._BaseClasses.MercatorComboItem> l = new List<MercatorUi._BaseClasses.MercatorComboItem>
                {
                    new MercatorUi._BaseClasses.MercatorComboItem("Company A", "0453917888"),
                    new MercatorUi._BaseClasses.MercatorComboItem("Company B", "0453917999"),
                };
                comboFilter = new MercatorUi._BaseClasses.ComboBoxExReadOnly
                {
                    DisplayMember = "Description",
                    ValueMember = "Id",
                    DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed,
                    DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList,
                    FormattingEnabled = true,
                    ItemHeight = 14,
                    Location = new System.Drawing.Point(10, 5),
                    Name = "comboFilter",
                    Size = new System.Drawing.Size(100, 20),
                    Style = DevComponents.DotNetBar.eDotNetBarStyle.StyleManagerControlled,
                    TabIndex = 0,
                    Tag = peppolBoxHelper
                };
                comboFilter.DataSource = l;
                comboFilter.SelectedValueChanged += ComboFilter_SelectedValueChanged;

                peppolBoxHelper.PeppolBoxForm.DrawLineBelowCaption = true;
                peppolBoxHelper.PeppolBoxForm.PanelTop.Height = 30;
                peppolBoxHelper.PeppolBoxForm.PanelTop.Visible = true;
                peppolBoxHelper.PeppolBoxForm.PanelTop.Controls.Add(comboFilter);
            }
            FilterMessages(peppolBoxHelper);
        }

        public void PeppolBoxHelperClosed(PeppolBoxHelper peppolBoxHelper)
        {
            peppolBoxHelper.Downloading -= PeppolBoxHelper_Downloading;
            if (comboFilter != null)
            {
                comboFilter.SelectedValueChanged -= ComboFilter_SelectedValueChanged;
                comboFilter.Dispose();
            }
        }

        private void ComboFilter_SelectedValueChanged(object sender, EventArgs e)
        {
            PeppolBoxHelper peppolBoxHelper = (PeppolBoxHelper)comboFilter.Tag;
            FilterMessages(peppolBoxHelper);
        }

        private void PeppolBoxHelper_Downloading(object sender, PeppolBoxHelper.DownloadingEventArgs e)
        {
            PeppolBoxHelper peppolBoxHelper = (PeppolBoxHelper)sender;
            FilterMessages(peppolBoxHelper);
        }

        private bool filterApplied;

        private void FilterMessages(PeppolBoxHelper peppolBoxHelper)
        {
            if (comboFilter?.SelectedValue != null)
            {
                if (filterApplied)
                {
                    peppolBoxHelper.Messages.RestoreAllMessages();
                    filterApplied = false;
                }
                foreach (PeppolBoxHelper.PeppolMessage message in peppolBoxHelper.Messages.Where(m => !string.IsNullOrEmpty(m.PeppolId)).ToArray())
                {
                    if (!message.PeppolId.Contains(comboFilter.SelectedValue.ToString()))
                    {
                        peppolBoxHelper.Messages.Remove(message);
                        filterApplied = true;
                    }
                }
            }
        }
    }
}

 

Notez que dans la liste du déroulant, on place en tant qu'ID les chiffres du numéro de TVA. Cela permet, via la syntaxe suivante d'inclure dans le filtre tant les préfixe 9925: que 0208:

message.PeppolId.Contains(comboFilter.SelectedValue.ToString())



Cookies fonctionnels : Cookies nécessaires à l'utilisation du site et cookies de préférence. Ils ne contiennent aucune donnée à caractère personnel. (En savoir plus)

Cookies statistiques : Captation de statistiques liées aux comportements des internautes. (En savoir plus)

Cookies marketing : Pour effectuer le suivi des visiteurs au travers des sites web, à des fins publicitaires. (En savoir plus)