Vous consultez une page technique concernant le logiciel de gestion Mercator. Celle-ci contient des informations spécifiques destinées aux professionnels de Mercator. Souhaitez-vous être redirigés vers des informations plus générales ?


   Ne plus poser cette question

Filtrage dans la liste des dossiers de Mercator

0000001917     -      26/08/2017

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 :

Zoom
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;
        }
    }
}