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