/////////////////////////////////////////////////// public override CResultAErreur TraitementAvantSauvegarde(CContexteDonnee contexte) { CResultAErreur result = base.TraitementAvantSauvegarde(contexte); CSessionClient session = CSessionClient.GetSessionForIdSession(IdSession); //Annule les modifications sur les champs interdits en modification DataTable table = contexte.Tables[GetNomTable()]; //Objet témoin pour vérifier les valeurs non affectées CRelationElementAChamp_ChampCustom relTemoin = null; if (IdVersionDeTravail != null) //Dans les versions, on ne stocke pas les créations de valeurs nulles { relTemoin = (CRelationElementAChamp_ChampCustom)contexte.GetNewObjetForTable(table); relTemoin.CreateNewInCurrentContexte(); } if (table != null && session != null) { IInfoUtilisateur user = session.GetInfoUtilisateur(); if (user != null) { ArrayList lst = new ArrayList(table.Rows); IElementAChamps lastElt = null; CRestrictionUtilisateurSurType restDeBase = null; CRestrictionUtilisateurSurType restAppliquee = null; foreach (DataRow row in lst) { CRelationElementAChamp_ChampCustom rel = (CRelationElementAChamp_ChampCustom)contexte.GetNewObjetForRow(row); if (row.RowState == DataRowState.Added && relTemoin != null) { if (relTemoin.Valeur != null && relTemoin.Valeur.Equals(rel.Valeur) || relTemoin.Valeur == null && relTemoin.Valeur == null) { rel.CancelCreate(); } } if (row.RowState == DataRowState.Modified || row.RowState == DataRowState.Added) { if (restDeBase == null) { Type tp = rel.ElementAChamps.GetType(); restDeBase = user.GetRestrictionsSur(tp, contexte.IdVersionDeTravail); } if (restDeBase != null && rel.ElementAChamps.Equals(lastElt)) { restAppliquee = restDeBase.Clone() as CRestrictionUtilisateurSurType; } //Vérifie qu'on a le droit if (!rel.ElementAChamps.Equals(lastElt) && restAppliquee != null) { restAppliquee.ApplyToObjet(rel.ElementAChamps); } lastElt = rel.ElementAChamps; if (restAppliquee != null) { ERestriction restChamp = restAppliquee.GetRestriction(rel.ChampCustom.CleRestriction); if ((restChamp & ERestriction.ReadOnly) == ERestriction.ReadOnly) { row.RejectChanges(); } } } } } } if (relTemoin != null) { relTemoin.CancelCreate(); } return(result); }