Bij het importeren van Peppol-facturen in commercieel beheer is het mogelijk om de SQL-query te wijzigen die toelaat de artikelen te identificeren die in deze factuur voorkomen. Dit gebeurt via een Gescom-customizer die IStringUpdater implementeert. De id van de aan te passen query is EINVOICE_IMPORT_ITEM. Deze ontvangt de parameters: @cle1, @cle2, @cle3, @modele, @f_id en @c_id. Deze laatste twee kunnen leeg zijn indien de leverancier (of de klant in geval van self-billing) vooraf niet kon worden geïdentificeerd.
De query ontvangt ook de parameter @InvoiceLineXml waarvan het SQL-type XML is. Deze komt overeen met de XML-node cac:InvoiceLine waarvoor Mercator probeert het artikel te herkennen.
De onderstaande code toont hoe een SQL-parameter @name kan worden gevuld met de waarde van cac:InvoiceLine/cac:Item/cbc:Name .
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Linq;
using MercatorApi;
using MercatorExtensions;
using MercatorUi;
using MercatorDatabase;
namespace Gescom
{
public class Customizer : MercatorUi.ICustomizers.IStringUpdater
{
public string StringUpdate(string stringToModify)
{
string id = Api.StrExtract(stringToModify, "<ID>", "</ID>");
if (id == "EINVOICE_IMPORT_ITEM")
{
stringToModify = stringToModify.Replace("/*search on s_modele*/",
@"declare @name varchar(100)
select @name = @InvoiceLineXml.value(
'declare namespace cac=""urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"";
declare namespace cbc=""urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"";
(/cac:InvoiceLine/cac:Item/cbc:Name/text())[1]', 'varchar(100)')
if (@name is not null) and exists (select * from STOCK (NOLOCK) where s_cle1=@name)
begin
select top 1 * from STOCK (NOLOCK) where s_cle1=@name
return
end
/*search on s_modele*/".UnIndent(5));
}
return stringToModify;
}
}
}
✅ Zelfs als het ontvangen bestand niet de gebruikelijke namespaces (cac: en cbc:) gebruikt, blijft deze code geldig omdat deze namespaces correct gedefinieerd zijn in de XQuery.