Filtering in de dossierlijst van Mercator

0000001917     -      26-08-2017

Dit voorbeeld is bedoeld om een filter te plaatsen op de dossierlijst die Mercator bij het opstarten weergeeft, in functie van een omgevingsvariabele. Op die manier kan toegang worden verleend aan verschillende klanten, die elk alleen hun eigen dossier kunnen openen, zonder dat ze de andere dossiers uit de Mercator-multidossierconfiguratie te zien krijgen.

Om deze module opnieuw te compileren, volstaat het een project te creëren, genaamd AskDossiers, bestaande uit één enkele klasse Customizer en met als toegevoegde referentie MercatorUi.dll. Dit steunt op de interface MercatorUi.ICustomizers.IStringUpdater waarmee u de 2 SQL-opdrachten van het dossierselectievenster kunt bewerken.

Het voorbeeld vereist een omgevingsvariabele mercatordossiers.

  • Als deze variabele ontbreekt of blanco is, worden alle dossiers om veiligheidsredenen gemaskeerd.
  • Vermeldt de variabele all_dossiers, dan zullen alle dossiers zichtbaar zijn.
  • Vermeldt de variabele een dossier-ID of een lijst van ID's in de vorm van ID1&ID2&ID3, dan is (zijn) enkel dat (die) dossier(s) zichtbaar.

Broncode:

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using MercatorUi;

namespace AskDossiers
{
     public class Customizer : MercatorUi.ICustomizers. IStringUpdater
    {
         /*
          * Deze klasse implementeert de interface IStringUpdater.
          * Hierdoor kunnen de 2 standaard SQL-opdrachten van Mercator worden gewijzigd.
          * Wordt gebruikt voor de dossierselectie
          */

         public string StringUpdate( string ReqSql)
        {
             // ReqSql zal een van deze 2 opdrachten bevatten
             // 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( "De omgevingsvariabele \"mercatordossiers\" is niet geïnstalleerd. Om veiligheidsredenen wordt de toegang tot de Mercator-dossiers gedeactiveerd." );
                whereclause = "(1=0)" ;
            }
             else if (mercatordossiers == "all_dossiers" ) // in dit geval zijn alle dossiers toegankelijk
            {
                whereclause = "" ;
            }
             else // de geautoriseerde dossiers worden vermeld in een lijst, gescheiden door het teken | (geen | in het begin en aan het eind van de lijst)
            {
                 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;
        }
    }
}