Hoe kunnen berichten van de PeppolBox van de ene Mercator naar die van een andere Mercator worden overgedragen?

0000003297     -      01-06-2025

De onderstaande configuratie toont hoe u in de Peppol Box een knop kunt toevoegen waarmee een bericht kan worden overgedragen naar een andere Mercator waarvan de database zich op dezelfde SQL-server bevindt.

Ga naar "Tools / Setup / Rasters-Customizers" en selecteer in de keuzelijst PeppolBox. 

  • Vink AutoAddCustomColumns aan
  • Plaats deze StringUpdater : 
    • links : as isnew
    • rechts : as isnew,'TransferPeppolMessage' as UserDefinedButtonColumnCustom
  • Voeg daarna een kolomregel toe in de eigenschap CustomRules:
    • Name : UserDefinedButtonColumnCustom
    • Width : 80
    • ButtonText :Overdragen

En plaats ten slotte deze code in de 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;

            // Lijst die de verschillende vennootschappen bevat waarnaar het Peppol-bericht kan worden overgedragen. De tweede parameter is de naam van de database.
            List<MercatorUi._BaseClasses.MercatorComboItem> l = new List<MercatorUi._BaseClasses.MercatorComboItem>
            {
                new MercatorUi._BaseClasses.MercatorComboItem("Company sa""MERCATORFIDUDEPEND"),
                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);
                }
            }
        }
    }
}

Deze code vereist een export van de toegangsrechten. (Via "Tools / Geavanceerd tools / SQL Database / Toegangsrechten exporteren" van de Mercator waar deze code geplaatst is).

De tabellen PEPPOL_RECEIVED_MESSAGES van de verschillende Mercators moeten identieke kolommen bevatten.



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)