De hierbeschreven module laat ons toe om een kolom toe te voegen in het selectievenster van leverbonnen weergegeven in het automatische facturatieproces van klanten. Deze programmatie wordt uitgevoerd in 2 stappen:
- SQL-query wijzigen die de selectie van leverbonnen regelt, via de interface MercatorUi.ICustomizers.IStringUpdater
- Een kolom toevoegen in de grid van het gevraagde scherm, via de interface MercatorUi.ICustomizers.IDialogLoadCustomizer
Op niveau van SQL-query wijziging, bestaat de moeilijkheid uit het feit dat de naam van de SQL-tabel varieert bij elke uitvoering. In de code, laat de string "tmp" ons toe om een deel van deze variabele te recupereren.
Het gegeven voorbeeld voegt een veld ID_CLI_LIV toe in de PIEDS_V. Elke andere wijziging is uiteraard mogelijk:
De code gaat als volgt:
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorUi;
using System.Windows.Forms;
namespace Gescom
{
public class Customizer : MercatorUi.ICustomizers.IStringUpdater, MercatorUi.ICustomizers.IDialogLoadCustomizer
{
// modifier la requête SQL pour obtenir une colonne supplémentaire
public string StringUpdate(string StringToModify)
{
string id = Api.StrExtract(StringToModify, "<ID>", "</ID>");
if ((id == "SEL_DOC_DELIVERIES_INVOICING") && StringToModify.Contains("id_cli"))
{
string tmp = Api.StrExtract(StringToModify, "tempdb..##pieds_auto_", "')"); // obtenir la partie variable du nom de la table ##pieds_auto
StringToModify = StringToModify.Replace(string.Format("##pieds_auto_{0}.id,", tmp), string.Format("##pieds_auto_{0}.id,##pieds_auto_{0}.id_cli_liv,", tmp));
}
return StringToModify;
}
// ajouter une colonne dans l'écran de sélection des BL
public void DialogLoadCustomize(System.Windows.Forms.Form WindowsForm)
{
if (WindowsForm is MercatorUi.Forms.Gescom.GescomDialogs.GescomAutomaticProceduresSelectDocs)
{
MercatorUi.Forms.Gescom.GescomDialogs.GescomAutomaticProceduresSelectDocs gescomAutomaticProceduresSelectDocs = (MercatorUi.Forms.Gescom.GescomDialogs.GescomAutomaticProceduresSelectDocs)WindowsForm;
DataTable dt = (DataTable)gescomAutomaticProceduresSelectDocs.Grid.DataSource;
if (dt.Columns.Contains("id_cli_liv")) // est-on bien dans le cas "facturation des livraisons clients" ?
{
gescomAutomaticProceduresSelectDocs.Grid.Columns.Add("id_cli_liv", "Id Client Livr.");
gescomAutomaticProceduresSelectDocs.Grid.Columns["id_cli_liv"].Width = 75;
gescomAutomaticProceduresSelectDocs.Grid.Columns["id_cli_liv"].DataPropertyName = "id_cli_liv";
}
}
}
}
}