Cet exemple montre comment, à partir d'un rapport basé sur les articles, récupérer une information provenant de la fiche client en cours.
Concrètement, l'utilisateur voudrait avoir la liste des articles liés à la fiche client en cours de consultation. Il faut pouvoir également tenir compte du filtre placé sur les articles.
La propriété "Module" du rapport sera donc initialisée à "Articles". La requête SQL pourrait ressembler à ceci :
select cli.C_NOM, s_modele, s_cle1, s_cle2, s_prix_ht
from STOCK
inner join tarcli on stock.s_id = tarcli.ar_ref
inner join CLI on tarcli.ID_CLI = cli.C_ID
where FILTRE_STOCK and cli.C_ID = '%C_ID%'
Le code ci-dessous permet de récupérer l'identifiant de la fiche client en cours. L'exemple prévoit le fait que Mercator permet d'ouvrir plusieurs fiches clients. Dans notre exemple, il traite (de manière arbitraire) la première fichier trouvée.
Ce code doit être implémenté dans la propriété "Customizer" du rapport (selon le même que principe que cet exemple).
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Windows.Forms;
using MercatorApi;
using MercatorController;
namespace MercatorUi.Reporting
{
public class Customizer : MercatorUi.ICustomizers.IStringUpdater
{
public string StringUpdate(string reqSql)
{
string c_id = "??????????";
foreach (Form f in Application.OpenForms)
{
if (f is MercatorUi.Forms.Sig.SigForm)
{
MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)f;
if (sigForm.Sig.Module == MercatorUi.Sig._SigEnum.CLI)
{
c_id = sigForm.DataSourceRow["c_id"].ToString();
break;
}
}
}
return reqSql.Replace("%C_ID%", Api.UnquoteSql(c_id));
}
}
}