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