using System;
using System.Collections.Generic;
using System.Text;
using MercatorUi;
using MercatorApi;
using System.Linq;
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 (tab 1)
// select id, nom from DOSSIERS where (nom like '%'+@PARAM+'%') order by ID (tab 2)
string whereclause;
string mercatordossiers = 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 |
{
string[] array_dossiers = mercatordossiers.Split('|');
whereclause = string.Format("(id in '{0}')", string.Join("','", array_dossiers.Where(d => !string.IsNullOrWhiteSpace(d)).Select(d => Api.UnquoteSql(d))));
}
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;
}
}
}