public CResultAErreur UpdateEOs(CReferenceObjetDonnee referenceObject) { CResultAErreur result = CResultAErreur.True; using (CContexteDonnee contexte = new CContexteDonnee(IdSession, true, false)) { CObjetDonnee objet = referenceObject.GetObjet(contexte); if (objet is IElementAEO) { result = CUtilElementAEO.UpdateEOSInCurrentContext((IElementAEO)objet); if (result) { result = contexte.SaveAll(true); } return(result); } } return(result); }
////////////////////////////////////////////////////////////////////// public override CResultAErreur TraitementAvantSauvegarde(CContexteDonnee contexte) { CResultAErreur result = base.TraitementAvantSauvegarde(contexte); if (!result) { return(result); } DataTable table = contexte.Tables[GetNomTable()]; if (table == null) { return(result); } ArrayList lst = new ArrayList(table.Rows); Dictionary <IElementAEO, bool> tableElementsToUpdate = new Dictionary <IElementAEO, bool>(); foreach (DataRow row in lst) { if ( row.RowState == DataRowState.Modified || row.RowState == DataRowState.Added) { CRelationElement_EO rel = new CRelationElement_EO(row); CObjetDonneeAIdNumerique objet = rel.ElementLie; if (objet != null) { if (objet is IElementAEO) { tableElementsToUpdate[(IElementAEO)objet] = true; // Vérifie les Exception de Type pour le Type d'EO if (rel.EntiteOrganisationnelle != null && rel.EntiteOrganisationnelle.TypeEntite != null && rel.EntiteOrganisationnelle.TypeEntite.HasExceptionForType(objet.GetType())) { result.EmpileErreur(I.T("@1 cannot be affected to Organizational Entity @2. There is an Exception on this Type|10011", ((IElementAEO)objet).DescriptionElement, rel.EntiteOrganisationnelle.Libelle)); return(result); } } } } else if (row.RowState == DataRowState.Deleted) { CRelationElement_EO rel = new CRelationElement_EO(row); rel.VersionToReturn = DataRowVersion.Original; CObjetDonneeAIdNumerique objet = rel.ElementLie; if (objet != null && objet.IsValide() && objet is IElementAEO && (!(rel.Row[CSc2iDataConst.c_champIsDeleted] is bool) || (bool)rel.Row[CSc2iDataConst.c_champIsDeleted] != true)) { tableElementsToUpdate[(IElementAEO)objet] = true; } } } //Met à jour les eos des éléments qui ont bougé foreach (IElementAEO element in tableElementsToUpdate.Keys) { result = CUtilElementAEO.UpdateEOSInCurrentContext(element); if (!result) { return(result); } } return(result); }
//---------------------------------------------------------------- /// <summary> /// Controle si les donnateurs d'EO ont changé, si oui, /// répercute les EOS du donnateur sur l'élément et ses héritiers /// </summary> /// <param name="elt"></param> /// <returns></returns> public static CResultAErreur OnChangementElementAEO(IElementAEO elt) { CResultAErreur result = CResultAErreur.True; if (elt == null) { return(result); } CObjetDonneeAIdNumerique objet = (CObjetDonneeAIdNumerique)elt; Hashtable tableParentsOld = new Hashtable(); Hashtable tableParentsNew = new Hashtable(); bool bHasChange = objet.Row.RowState == DataRowState.Added; if (!bHasChange || objet.Row.RowState == DataRowState.Modified) { DataRowVersion version = objet.VersionToReturn; objet.VersionToReturn = DataRowVersion.Original; IElementAEO[] donnateurs = elt.DonnateursEO; if (donnateurs != null) { foreach (IElementAEO donnateur in donnateurs) { if (donnateur != null) { tableParentsOld[donnateur] = true; } } } objet.VersionToReturn = version; donnateurs = elt.DonnateursEO; if (donnateurs != null) { foreach (IElementAEO donnateur in donnateurs) { if (donnateur != null) { if (!tableParentsOld.Contains(donnateur)) { bHasChange = true; break; } tableParentsNew[donnateur] = true; } } } //Vérifie que les anciens sont tous là foreach (IElementAEO old in tableParentsOld.Keys) { if (!tableParentsNew.Contains(old)) { bHasChange = true; break; } } } if (bHasChange) { //On est bon pour retravailler l'élément et tous ses fils CUtilElementAEO.UpdateEOSInCurrentContext(elt); } return(result); }