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.

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())