Het scherm van de overschrijvingen afhankelijk van de gebruiker in "Alleen-lezen" zetten

0000002102     -      07-11-2013

Deze programmering laat zien hoe u het scherm van de overschrijvingen afhankelijk van de gebruiker in "Alleen-lezen" zet. In het voorbeeld zijn de gegevens in dit scherm bewerkbaar als de naam van de gebruiker Guy is. Deze voorwaarde kan uiteraard makkelijk worden gewijzigd in de code.

De code moet in een Main-customizer worden geplaatst die de volgende interface implementeert: MercatorUi.ICustomizers.IExec

De werking van deze code is als volgt:

  • We gebruiken het event Globals.Main.BaseFormCreating om controle te krijgen over de creatie van het overschrijvingenvenster, dat van het type MercatorUi.Forms.Accounting.AccountingBankVirementForm is.
    • Dit event wordt ingeschreven tijdens de actie DossierOpen.
    • Het wordt uitgeschreven tijdens de actie DossierClose.
  • In dit event gaan we een Shown-event voor dit venster inschrijven. Daardoor zal de code die erin geplaatst wordt, worden uitgevoerd zodra dit venser volledig opgemaakt en weergegeven is.
  • In deze code gaan we:
    • de knop "Registreren" deactiveren;
    • de subknop "Fiche" deactiveren;
    • de combobox verbeteren waarmee een klanten-/leveranciers-/algemene rekening kan worden opgeroepen;
    • alle daartoe geschikte controles in read-only zetten;
    • een bericht weergeven waarin gemeld wordt dat het verboden is om de gegevens te wijzigen.

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 Main
{
    public class Customizer : MercatorUi.ICustomizers.IExec
    {

        public void Main(MercatorUi.ICustomizers.ExecAction Action)
        {
            if (Action == MercatorUi.ICustomizers.ExecAction.DossierOpen)
            {
                Globals.Main.BaseFormCreating += new MercatorUi.Main.BaseFormCreatingEventHandler(Main_BaseFormCreating);
            }
            else if (Action == MercatorUi.ICustomizers.ExecAction.DossierClose)
            {
                Globals.Main.BaseFormCreating -= new MercatorUi.Main.BaseFormCreatingEventHandler(Main_BaseFormCreating);
            }
        }

        void Main_BaseFormCreating(object sender, MercatorUi.Main.BaseFormCreatingEventArgs e)
        {
            if ((e.Form.GetType() == typeof(MercatorUi.Forms.Accounting.AccountingBankVirementForm))
                && (Globals.CurrentUser != null)
                && (Globals.CurrentUser["naam"].ToString() != "Guy")) // Als de gebruiker niet Guy is, gaan we de event invoeren. Anders doen we niets.
            {
                e.Form.Shown += new EventHandler(Form_Shown);
            }
        }

        void Form_Shown(object sender, EventArgs e)
        {
            // De knop "Registreren" deactiveren
            MercatorUi.Forms.Accounting.AccountingBankVirementForm accountingBankVirementForm = (MercatorUi.Forms.Accounting.AccountingBankVirementForm)sender;
            accountingBankVirementForm.Shown -= new EventHandler(Form_Shown); // Het event uitschrijven
            MercatorUi.BoutonsPro.BleuPro bleuPro1 = (MercatorUi.BoutonsPro.BleuPro)accountingBankVirementForm.Controls["bleuPro1"];
            MercatorUi.BoutonsPro.ButtonXPro buttonXProSave = (MercatorUi.BoutonsPro.ButtonXPro)bleuPro1.Controls["buttonXProSave"];
            buttonXProSave.Enabled = false;
            
            // De subknop "Fiche" deactiveren
            MercatorUi.BoutonsPro.ButtonXPro buttonBrowsePieceliees = (MercatorUi.BoutonsPro.ButtonXPro)bleuPro1.Controls["buttonBrowsePieceliees"];
            buttonBrowsePieceliees.SubItems[0].Enabled = false;

            // Het aanvinkvakje "Eigen rekening" verbergen
            Control checkBoxProper = accountingBankVirementForm.Controls["checkBoxProper"];
            checkBoxProper.Visible = false;

            // De combobox voor het oproepen van een klanten-/leveranciers-/algemene rekening verbergen
            Control comboAppelSig = accountingBankVirementForm.Controls["comboAppelSig"];
            comboAppelSig.Visible = false;

            // Alle controles in read-only zetten
            // Om de eigenschap ReadOnly van iedere controle van dit form makkelijker te kunnen instellen op true, gaan we de Reflection gebruiken
            foreach (Control c in accountingBankVirementForm.Controls)
            {
                PropertyInfo pi = c.GetType().GetProperty("ReadOnly");
                if (pi != null) // Bestaat er een ReadOnly-eigenschap voor deze controle?
                    pi.SetValue(c, true, null);
            }
            MercatorUi.Dialogs.Stop("U bent niet gemachtigd om de gegevens van dit scherm te wijzigen!");
        }

    }
}