Bij het importeren van een Peppol-factuur in commercieel Beheer de artikelen identificeren op basis van eender welke informatie uit de node cac:InvoiceLine

0000003406     -      14-12-2025

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 .

Zoom
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.



Functionele cookies: Cookies die nodig zijn voor het gebruik van de website en voorkeurscookies. Ze bevatten geen persoonsgegevens. (Meer informatie)

Analytische cookies: Verzamelen van statistieken met betrekking tot het gedrag van internetgebruikers. (Meer informatie)

Marketingcookies: Om bezoekers op verschillende websites te volgen voor advertentiedoeleinden. (Meer informatie)