Comment transférer des messages de la PeppolBox d'un Mercator vers celle d'un autre Mercator ?

0000003297     -      01/06/2025

Le paramétrage ci-dessous montre comment ajouter dans la Peppol Box un bouton permettant de transférer un message vers un autre Mercator dont la base de données se trouve sur le même serveur SQL.

Il faut se rendre dans "Outils / Paramètres / Customizers de Grilles" et sélectionner dans le déroulant PeppolBox. 

  • Y cocher AutoAddCustomColumns
  • Placer ce StringUpdater : 
    • à gauche : as isnew
    • à droite : as isnew,'TransferPeppolMessage' as UserDefinedButtonColumnCustom
  • Ensuite, on ajoute une règle de colonne dans la propriété CustomRules :
    • Name : UserDefinedButtonColumnCustom
    • Width : 70
    • ButtonText :Transférer

Et enfin placer ce code dans le customizer PeppolBox :

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.Data.SqlClient;

// <CompileWithRoslyn />

namespace PeppolBox
{
    public class Customizer
    {
        public void TransferPeppolMessage(MercatorUi.GridPro.DataGridViewXPro grid, System.Windows.Forms.DataGridViewCellEventArgs e)
        {
            MercatorUi.Forms.Other.PeppolBoxForm peppolBoxForm = (MercatorUi.Forms.Other.PeppolBoxForm)grid.FindForm();
            Guid guid = (Guid)grid.Rows[e.RowIndex].Cells["id"].Value;

            // Liste qui va contenir les différentes sociétés vers lesquelles on peut transférer le message Peppol. Le second paramètre est le nom de la base de données.
            List<MercatorUi._BaseClasses.MercatorComboItem> l = new List<MercatorUi._BaseClasses.MercatorComboItem>
            {
                new MercatorUi._BaseClasses.MercatorComboItem("Company sa""MERCATORABC"),
                new MercatorUi._BaseClasses.MercatorComboItem("Company srl""MERCATORXYZ")
            };

            MercatorUi._Dialogs.DialogAskComboRet r = Dialogs.AskCombo("Transférer le message Peppol vers quel dossier ?", l, "Id");
            if (r == null)
                return;

            string reqSql = $@"
                declare @sql nvarchar(MAX) = replace(replace(dbo.LIST_COLUMNS('PEPPPOL_RECEIVED_MESSSAGES'),'dbo.',''),',IMPORTED_IN','')
                set @sql = 'insert into {r.Id}.dbo.PEPPPOL_RECEIVED_MESSSAGES (' + @sql + ') select ' + @sql + ' from PEPPPOL_RECEIVED_MESSSAGES where id=@id'
                EXECUTE sp_executesql @sql, N'@id UNIQUEIDENTIFIER', @id = @id
                delete from PEPPPOL_RECEIVED_MESSSAGES where id=@id".UnIndent(4);

            using (MercatorSqlConnection conn = new MercatorSqlConnection(Globals.RepData, true))
            {
                if (conn.Connection == null)
                    return;
                using (SqlTransaction transac = conn.Connection.BeginTransaction())
                using (SqlCommand cmd = new SqlCommand(reqSql, conn.Connection, transac))
                {
                    cmd.Parameters.AddWithValue("@id", guid);
                    if (!Api.SqlExec(cmd))
                    {
                        Api.SafeRollback(transac);
                        return;
                    }
                    transac.Commit();
                    grid.CurrentCell = null;
                    DataRow dataRowToRemove = peppolBoxForm.DataTable.RowsEnumerable().First(dr => dr["id"].Equals(guid));
                    peppolBoxForm.DataTable.Rows.Remove(dataRowToRemove);
                }
            }
        }
    }
}

Ce code requiert un export des droits d'accès. (Via le menu "Outils / Outils Avancés / Base de données SQL / Exporter droits d'accès" du Mercator où est placé ce code).

Les tables PEPPPOL_RECEIVED_MESSSAGES des différents Mercators doivent avoir des colonnes identiques.



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)