Le code illustré ci-dessous montre comment ajouter une colonne dans la PeppolBox montrant un bouton permettant de zoomer vers la fiche du fournisseur correspondant à cette facture / note de crédit. Le code se fonde sur un customizer PeppolBox qui implémente l'interface MercatorUi.ICustomizers.IPeppolBoxHelperCreated. Il exploite l'affichage de boutons de zoom (UserDefinedButtonColumnShowSigFou). Il est exécuté lors de l'ouverture de la PeppolBox.
Pour que la colonne UserDefinedButtonColumnShowSigFou apparaissent automatiquement dans la PeppolBox, il faut activer l'ajout de colonnes libres.
Le code est le suivant :
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;
// <CompileWithRoslyn />
namespace PeppolBox
{
public class Customizer : MercatorUi.ICustomizers.IPeppolBoxHelperCreated, MercatorUi.ICustomizers.IPeppolBoxHelperClosed
{
public void PeppolBoxHelperCreated(MercatorUi.Forms.Other.OtherClasses.PeppolBoxHelper peppolBoxHelper)
{
peppolBoxHelper.DataTable.Columns.Add("UserDefinedButtonColumnShowSigFou", typeof(string));
foreach (var message in peppolBoxHelper.Messages.Where(m => m.IsInvoiceOrCreditNote).ToArray())
{
var parsedContent = message.ReceivedDoc.ParseContent(Globals.Langue, MercatorPeppol.ReceivedDoc.ParseContentEnum.WithSupplierName);
if (!string.IsNullOrEmpty(parsedContent.Error))
continue; // impossible de lire le message
XmlNode nodeNumTva = parsedContent.XmlSelectNodes("cac:AccountingSupplierParty/cac:Party/cac:PartyTaxScheme/cbc:CompanyID").FirstOrDefault();
if (string.IsNullOrEmpty(nodeNumTva?.InnerText))
continue; // le message ne contient pas le numéro de TVA du fournisseur
List<string> fou = Api.Zselect<string>(Globals.RepData, "select f_id from FOU where f_num_tva=@num_tva", new MercatorSqlParam("@num_tva", nodeNumTva.InnerText, SqlDbType.Char));
if ((fou == null) || !fou.Any())
continue; // Erreur SQL ou fournisseur non trouvé
message.DataRow["UserDefinedButtonColumnShowSigFou"] = fou.First();
}
}
}
}