L'objet de cet exemple est d'effectuer un filtrage sur la liste des dossiers que présente Mercator lors de son démarrage, en fonction d'une variable d'environnement. Ceci rend ainsi possible l'accès à différents clients qui ne peuvent chacun accèder qu'à leur propre dossier sans voir apparaître les autres dossiers de la configuration "multi-dossiers" de Mercator.
Pour recompiler ce module, il suffit de créer un projet dont le nom est AskDossiers, qui contient une seule classe Customizer et qui a comme référence ajoutée MercatorUi.dll. Ceci repose sur l'interface MercatorUi.ICustomizers.IStringUpdater qui va vous permettre d'agir sur les 2 requêtes SQL de la fenêtre de sélection de dossiers.
L'exemple requiert une variable d'environnement mercatordossiers.
- Si celle-ci est manquante ou si elle est vide, par sécurité, tous les dossiers seront masqués.
- Si elle contient all_dossiers, alors tous les dossiers seront visibles.
- Si elle contient un ID de dossier ou une liste d'ID sous la forme ID1&ID2&ID3, alors seul(s) ce(s) dossier(s) est(sont) visible(s).
Source du code :
using System;
using System.Collections.Generic;
using System.Text;
using MercatorUi;
namespace AskDossiers
{
public class Customizer : MercatorUi.ICustomizers. IStringUpdater
{
/*
* Cette classe implémente l'interface IStringUpdater.
* Ceci permettra de modifier les 2 requêtes SQL standards de Mercator,
* utilisée pour la sélection des dossiers
*/
public string StringUpdate( string ReqSql)
{
// ReqSql va contenir une de ces 2 requêtes
// select id,nom,tri,isnew from DOSSIERS (NOLOCK) order by tri,id (premier onglet)
// select id, nom from DOSSIERS where (nom like '%'+@PARAM+'%') order by ID (second onglet)
string whereclause = "" ;
string mercatordossiers = System. Environment .GetEnvironmentVariable( "mercatordossiers" );
if ( string .IsNullOrEmpty(mercatordossiers))
{
Dialogs .Stop( "La variable d'environnement \"mercatordossiers\" n'est pas installée. Pour des raisons de sécurité, l'accès aux dossiers de Mercator est désactivé." );
whereclause = "(1=0)" ;
}
else if (mercatordossiers == "all_dossiers" ) // dans ce cas, on autorise l'accès à tous les dossiers
{
whereclause = "" ;
}
else // les dossiers autorisés sont repris dans une liste dont le séparateur est | (pas de | aux extrémités de la liste)
{
string [] array_dossiers = mercatordossiers.Split( '|' );
foreach ( string dossier in array_dossiers)
{
whereclause += (whereclause != "" ? " or " : "" ) + "(ID='" + dossier.Replace( "'" , "''" ) + "')" ;
}
}
if (whereclause != "" )
{
if (ReqSql.Contains( "where" ))
ReqSql = ReqSql.Replace( "where" , "where " + whereclause + " and" );
else
ReqSql = ReqSql.Replace( "order by" , "where " + whereclause + " order by" );
}
return ReqSql;
}
}
}