//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); }
//------------------------------------- /// <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); }