예제 #1
0
        /// <summary>
        /// Méthode permettant de réaliser la modification d'un membre privé par le biais du set d'une propriété publique correspondant à un champ particulier de l'entité
        /// </summary>
        /// <typeparam name="T">Type de données du membre privé (et donc de cette propriété publique)</typeparam>
        /// <typeparam name="U">Type de données de la propriété publique exposant la valeur de ce membre privé</typeparam>
        /// <param name="ChampConcerne">Valeur enumérée représentant le champ géré par ce membre privé et cette propriété publique</param>
        /// <param name="MembrePrive">Membre privé à modifier</param>
        /// <param name="NouvelleValeur">Nouvelle valeur à attribuer à ce membre privé</param>
        /// <param name="TransformationMembreVersPropriete">Méthode optionelle permettant de réaliser la transformation d'une valeur type "membre privé" en une valeur type "propriété publique"</param>
        /// <returns>Vrai si la modification a été acceptée et réalisée, sinon faux</returns>
        protected bool ModifierChamp <T, U>(TChamp ChampConcerne, ref T MembrePrive, T NouvelleValeur, Func <T, U> TransformationMembreVersPropriete = null)
        {
            bool ModificationAcceptee = true;

            if (MethodeAttacheeA_AvantChangement)
            {
                AccumulateurErreur AccumulateurErreur = new AccumulateurErreur();
                if (TransformationMembreVersPropriete != null)
                {
                    Declencher_AvantChangement(this as TEntite, ChampConcerne, TransformationMembreVersPropriete(MembrePrive), TransformationMembreVersPropriete(NouvelleValeur), AccumulateurErreur);
                }
                else
                {
                    Declencher_AvantChangement(this as TEntite, ChampConcerne, MembrePrive, NouvelleValeur, AccumulateurErreur);
                }
                ModificationAcceptee = AccumulateurErreur.Accepte;
                if (!ModificationAcceptee)
                {
                    Declencher_SurErreur(this as TEntite, ChampConcerne, AccumulateurErreur.MessageErreur);
                }
            }
            if (ModificationAcceptee)
            {
                if (MethodeAttacheeA_ApresChangement)
                {
                    T ValeurPrecedente = MembrePrive;
                    MembrePrive = NouvelleValeur;
                    if (TransformationMembreVersPropriete != null)
                    {
                        Declencher_ApresChangement(this as TEntite, ChampConcerne, TransformationMembreVersPropriete(ValeurPrecedente), TransformationMembreVersPropriete(MembrePrive));
                    }
                    else
                    {
                        Declencher_ApresChangement(this as TEntite, ChampConcerne, ValeurPrecedente, MembrePrive);
                    }
                }
                else
                {
                    MembrePrive = NouvelleValeur;
                }
                ChampEstValide(ChampConcerne, true);
                return(true);
            }
            else
            {
                return(false);
            }
        }
예제 #2
0
 /// <summary>
 /// Méthode pouvant être attachée à l'événement AvantChangement
 /// </summary>
 /// <param name="Entite">Entité concernée par le changement</param>
 /// <param name="Champ">Champ concerné par le changement</param>
 /// <param name="ValeurActuelle">Valeur actuelle du champ concerné par le changement</param>
 /// <param name="NouvelleValeur">Nouvelle valeur à affecter au champ concerné par le changement</param>
 /// <param name="AccumulateurErreur">Accumulateur de notification d'erreur servant à refuser le changement</param>
 protected void Declencher_AvantChangement(TEntite Entite, TChamp Champ, object ValeurActuelle, object NouvelleValeur, AccumulateurErreur AccumulateurErreur)
 {
     if (AvantChangement != null)
     {
         AvantChangement(Entite, Champ, ValeurActuelle, NouvelleValeur, AccumulateurErreur);
     }
 }