/// <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); } }
/// <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); } }