Het schrappen van een informatiebestandfiche blokkeren als er acties aan verbonden zijn

0000002108     -      07-11-2013

Dit voorbeeld toont hoe u het schrappen van een informatiebestandfiche blokkeert als er acties aan verbonden zijn. Het voorbeeld geldt voor het 4e informatiebestand (SigDest) en kan makkelijk worden aangepast aan alle informatiebestanden van Mercator. Het implementeert de interface MercatorUi.ICustomizers.ISigCreated.

Er wordt gebruikgemaakt van het event BeforeRecordDelete van MercatorUi.Sig.Sig, waarmee het mogelijk is om tussen te komen voorafgaand aan het proces voor het schrappen van een record.

De code ziet er als volgt uit:

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorUi;
using System.Windows.Forms;
using System.Reflection;

namespace SigDest
{
    public class Customizer : MercatorUi.ICustomizers.ISigCreated
    {

        public void SigCreated(MercatorUi.Sig.Sig Sig)
        {
            Sig.BeforeRecordDelete += new MercatorUi.Sig.Sig.BeforeRecordDeleteEventHandler(Sig_BeforeRecordDelete);
        }

        void Sig_BeforeRecordDelete(object sender, MercatorUi.Sig.Sig.BeforeRecordDeleteEventArgs e)
        {
            string reqSql = "declare @ret bit \r\n"
                          + "if exists(select * from ACTIONS (NOLOCK) where (module='DEST') and (id_sig=@id)) \r\n"
                          + "    set @ret=1 \r\n"
                          + "else \r\n"
                          + "    set @ret=0 \r\n"
                          + "select @ret as ret";
            DataSet ds = Api.Zselect(Globals.RepData, reqSql, new MercatorSqlParam("@id", e.Record["d_id"], SqlDbType.Char));
            if (ds == null) // Er is een SQL-fout vastgesteld.
            {
                e.Cancel = true;
            }
            else if (Convert.ToBoolean(ds.Tables[0].Rows[0]["ret"]))
            {
                MercatorUi.Dialogs.Stop("U kunt deze fiche niet schrappen, want er zijn acties aan verbonden!");
                e.Cancel = true;
            }
        }

    }
}