Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        //////////////////////////////////////////////////////////////////////
        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);
        }
Ejemplo n.º 3
0
        //----------------------------------------------------------------
        /// <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);
        }