Le module documenté ici permet d'ajouter une colonne dans l'écran de sélection des bons de livraison affichés dans le processus de facturation automatique clients. Cette programmation s'effectue en 2 étapes :
- modifier la requête SQL de sélection des bons de livraison, via l'interface MercatorUi.ICustomizers.IStringUpdater
- ajouter la colonne dans la grille de l'écran en question, via l'interface MercatorUi.ICustomizers.IDialogLoadCustomizer
Au niveau de la modification de la requête SQL, une difficulté réside dans le fait que le nom de la table SQL temporaire varie lors de chaque exécution. Dans le code, la chaîne "tmp" permet de récupérer cette partie variable.
L'exemple est donné ici pour l'ajout du champ ID_CLI_LIV de pieds_v. Toute autre adaptation est bien entendu possible.
Le code s'établit comme suit :
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";
}
}
}
}
}