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