//Journalise les données d'un élement
        public CVersionDonneesObjet JournaliseDonnees(System.Data.DataRow row, CVersionDonnees version)
        {
            CVersionDonneesObjet versionObjet = null;

            if (row.RowState != DataRowState.Added &&
                row.RowState != DataRowState.Modified &&
                row.RowState != DataRowState.Deleted)
            {
                return(null);
            }
            Type typeElement = CContexteDonnee.GetTypeForTable(row.Table.TableName);

            versionObjet = version.GetVersionObjetAvecCreation(row);
            if (versionObjet == null)
            {
                return(null);
            }
            if (row.HasVersion(DataRowVersion.Original))
            {
                CStructureTable structure = CStructureTable.GetStructure(typeElement);

                foreach (CInfoChampTable info in structure.Champs)
                {
                    if (info.m_bIsInDB)
                    {
                        new CJournaliseurChampDb().JournaliseDonneeInContexte(versionObjet, info.NomChamp, row);
                    }
                }
            }
            return(versionObjet);
        }
        /// <summary>
        /// Retourne vrai si l'un des objets est utilisé dans une version future
        /// </summary>
        /// <param name="objet"></param>
        /// <returns></returns>
        public static bool IsUtiliseDansVersionFuture(CListeObjetsDonnees liste, string strListeIds)
        {
            CResultAErreur result       = CResultAErreur.True;
            Type           typeElements = liste.TypeObjets;

            if (!typeof(IObjetSansVersion).IsAssignableFrom(typeElements))
            {
                //Cet élément n'est-il pas utilisé dans une version future dependant de celle-ci
                int?nIdVersion = liste.ContexteDonnee.IdVersionDeTravail;
                if (nIdVersion == null)
                {
                    //L'élément est-il présent dans une version future
                    CListeObjetsDonnees listeFuturs = new CListeObjetsDonnees(liste.ContexteDonnee, liste.TypeObjets, false);
                    listeFuturs.Filtre = new CFiltreData(
                        CSc2iDataConst.c_champOriginalId + " in (" + strListeIds + ")");
                    listeFuturs.Filtre.IgnorerVersionDeContexte = true;
                    if (listeFuturs.CountNoLoad != 0)
                    {
                        return(true);
                    }
                }
                else
                {
                    CVersionDonnees version = new CVersionDonnees(liste.ContexteDonnee);
                    if (version.ReadIfExists((int)nIdVersion))
                    {
                        int[]         lstIds = version.IdsVersionsDependantes;
                        StringBuilder bl     = new StringBuilder();
                        foreach (int nId in lstIds)
                        {
                            bl.Append(nId);
                            bl.Append(',');
                        }
                        if (bl.Length > 0)
                        {
                            bl.Remove(bl.Length - 1, 1);
                            CListeObjetsDonnees listeFuturs = new CListeObjetsDonnees(liste.ContexteDonnee, liste.TypeObjets, false);
                            listeFuturs.Filtre = new CFiltreData(
                                CSc2iDataConst.c_champOriginalId + " in (" + strListeIds + ") and " +
                                CSc2iDataConst.c_champIdVersion + " in (" + bl.ToString() + ")");
                            listeFuturs.Filtre.IgnorerVersionDeContexte = true;
                            if (listeFuturs.CountNoLoad != 0)
                            {
                                return(true);
                            }
                        }
                    }
                }
            }
            return(false);
        }
Esempio n. 3
0
        //-------------------------------------
        /// <summary>
        /// Retourne toutes les valeurs qui ont été modifiées
        /// </summary>
        /// <param name="objet"></param>
        /// <returns></returns>
        public CValeursHistorique GetValeursModifiees(CObjetDonneeAIdNumerique objet, CVersionDonnees versionButoire)
        {
            CListeObjetsDonnees listeVersions = new CListeObjetsDonnees(objet.ContexteDonnee, typeof(CVersionDonneesObjet));
            CValeursHistorique  listeValeurs  = new CValeursHistorique();

            if (TypeVersion.Code != CTypeVersion.TypeVersion.Previsionnelle)
            {
                listeVersions.Filtre = new CFiltreDataAvance(
                    CVersionDonneesObjet.c_nomTable,
                    CVersionDonneesObjet.c_champIdElement + "=@1 and " +
                    CVersionDonneesObjet.c_champTypeElement + "=@2 and " +
                    CVersionDonnees.c_nomTable + "." +
                    CVersionDonnees.c_champTypeVersion + "=@3 and " +
                    CVersionDonnees.c_champId + ">=@4",
                    objet.Id,
                    objet.GetType().ToString(),
                    (int)CTypeVersion.TypeVersion.Archive,
                    Id);
                listeVersions.Tri = CVersionDonneesObjet.c_champId + " desc";
            }
            else
            {
                CVersionDonnees versionDerivee = this;
                if (versionButoire != null)
                {
                    if (versionButoire.Id > versionDerivee.Id)
                    {
                        CVersionDonnees versionTmp = versionButoire;
                        versionButoire = versionDerivee;
                        versionDerivee = versionTmp;
                    }
                }
                StringBuilder blIds = new StringBuilder();
                blIds.Append(versionDerivee.Id);
                CVersionDonnees versionParente = versionDerivee.VersionParente;
                while (VersionParente != null && versionButoire != null && !versionParente.Equals(versionButoire))
                {
                    blIds.Append(",");
                    blIds.Append(versionParente.Id);
                    versionParente = versionParente.VersionParente;
                }
                listeVersions.Filtre = new CFiltreData(
                    CVersionDonnees.c_champId + " in (" + blIds + ") and " +
                    CVersionDonneesObjet.c_champIdElement + "=@1 and " +
                    CVersionDonneesObjet.c_champTypeElement + "=@2",
                    objet.Id,
                    objet.GetType().ToString());
                listeVersions.Tri = CVersionDonnees.c_champId + " asc";
            }

            foreach (CVersionDonneesObjet version in listeVersions)
            {
                foreach (CVersionDonneesObjetOperation data in version.Modifications)
                {
                    IChampPourVersion champ = data.Champ;
                    if (champ != null)
                    {
                        listeValeurs[champ] = data.GetValeur();
                    }
                }
            }
            return(listeValeurs);
        }