public List <IChampPourVersion> GetChampsJournalisables(CObjetDonneeAIdNumerique objet)
        {
            List <IChampPourVersion> champs = null;

            if (!m_dicTypeToChamps.TryGetValue(objet.GetType(), out champs))
            {
                champs = new List <IChampPourVersion>();

                CStructureTable   structure = CStructureTable.GetStructure(objet.GetType());
                CInfoChampTable[] allchamps = structure.Champs;

                List <string> lstChampsSys = CSc2iDataConst.GetNomsChampsSysteme();
                foreach (CInfoChampTable c in allchamps)
                {
                    if (c.m_bIsInDB && !lstChampsSys.Contains(c.NomChamp))
                    {
                        champs.Add(new CChampPourVersionInDb(c.NomChamp, c.NomConvivial));
                    }
                }
                m_dicTypeToChamps[objet.GetType()] = champs;
            }
            return(champs);
        }
Beispiel #2
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);
        }
        //---------------------------------------------------------------------
        public CResultAErreur AppliqueValeur(int?nIdVersion, IChampPourVersion champ, CObjetDonneeAIdNumerique objet, object valeur)
        {
            CResultAErreur result = CResultAErreur.True;

            if (objet.Row.Table.Columns.Contains(champ.FieldKey))
            {
                try
                {
                    if (valeur is byte[])
                    {
                        CDonneeBinaireInRow data = new CDonneeBinaireInRow(objet.ContexteDonnee.IdSession, objet.Row.Row, champ.FieldKey);
                        data.Donnees = (byte[])valeur;
                        objet.Row[champ.FieldKey] = data;
                    }
                    else if (valeur is IDifferencesBlob)
                    {
                        CContexteDonnee ctx = new CContexteDonnee(objet.ContexteDonnee.IdSession, true, false);

                        result = ctx.SetVersionDeTravail(nIdVersion, false);
                        if (!result)
                        {
                            return(result);
                        }
                        CObjetDonneeAIdNumerique objetDansVersion = (CObjetDonneeAIdNumerique)Activator.CreateInstance(objet.GetType(), new object[] { ctx });
                        if (objetDansVersion.ReadIfExists(objet.Id))
                        {
                            CDonneeBinaireInRow dataInVersion = new CDonneeBinaireInRow(ctx.IdSession, objetDansVersion.Row.Row, champ.FieldKey);

                            CDonneeBinaireInRow data = new CDonneeBinaireInRow(objet.ContexteDonnee.IdSession, objet.Row.Row, champ.FieldKey);
                            data.Donnees = dataInVersion.Donnees;
                            objet.Row[champ.FieldKey] = data;
                        }
                        else
                        {
                            throw new Exception(I.T("Error|199"));
                        }
                    }
                    else
                    {
                        objet.Row[champ.FieldKey] = valeur == null ? DBNull.Value : valeur;
                    }
                }
                catch
                {
                    try
                    {
                        bool bOldEnforce = objet.ContexteDonnee.EnforceConstraints;
                        objet.ContexteDonnee.EnforceConstraints = false;
                        objet.Row[champ.FieldKey] = valeur == null ? DBNull.Value : valeur;
                        objet.ContexteDonnee.AssureParents(objet.Row.Row);
                    }
                    catch (Exception e)
                    {
                        result.EmpileErreur(new CErreurException(e));
                        result.EmpileErreur(I.T("Error while applying value for field @1|189", champ.NomConvivial));
                    }
                }
            }
            return(result);
        }
        /// <summary>
        /// Retourne vrai si l'objet est utilisé dans une version future
        /// </summary>
        /// <param name="objet"></param>
        /// <returns></returns>
        public bool IsUtiliseDansVersionFuture(CObjetDonneeAIdNumerique objet)
        {
            CListeObjetsDonnees liste = new CListeObjetsDonnees(objet.ContexteDonnee, objet.GetType(), false);

            liste.Filtre = new CFiltreData(objet.GetChampId() + "=@1", objet.Id);
            liste.InterditLectureInDB = true;
            return(IsUtiliseDansVersionFuture(liste, objet.Id.ToString()));
        }