private void ShowDetail() { if (m_panelListe.ElementSelectionne is CVersionDonneesObjet) { CVersionDonneesObjet version = (CVersionDonneesObjet)m_panelListe.ElementSelectionne; CFormDetailVersion.ShowDetail(m_objet, version.VersionDonnees); } }
//---------------------------------------------------------- public CResultAErreur AnnuleModificationPrevisionnelle(CVersionDonneesObjet versionObjet) { CContexteDonnee contexte = versionObjet.ContexteDonnee; CResultAErreur result = CResultAErreur.True; int nIdObjet = versionObjet.IdElement; Type typeObjet = versionObjet.TypeElement; CVersionDonnees versionPrev = versionObjet.VersionDonnees; int nIdVersion = versionPrev.Id; //Vérifie que l'utilisateur peut travailler avec cette version result = versionPrev.EnregistreEvenement(CVersionDonnees.c_eventBeforeUtiliser, true); if (!result) { return(result); } contexte.SetVersionDeTravail(-1, false); //Suppression de l'objet associé string strPrimKey = contexte.GetTableSafe(CContexteDonnee.GetNomTableForType(typeObjet)).PrimaryKey[0].ColumnName; CListeObjetsDonnees listeTmp = new CListeObjetsDonnees(contexte, typeObjet); listeTmp.Filtre = new CFiltreData( CSc2iDataConst.c_champIdVersion + "=@1 and " + "(" + CSc2iDataConst.c_champOriginalId + "=@2 or " + strPrimKey + "=@2)", nIdVersion, nIdObjet); listeTmp.Filtre.IgnorerVersionDeContexte = true; result = CObjetDonneeAIdNumerique.Delete(listeTmp); if (!result) { return(result); } //Suppression de la version objet result = versionObjet.Delete(); if (!result) { return(result); } //Force la modification de l'objet pour mettre à jour les versions suivantes CObjetDonneeAIdNumerique objet = (CObjetDonneeAIdNumerique)Activator.CreateInstance(typeObjet, new object[] { contexte }); if (objet.ReadIfExists(nIdObjet)) { //Passe dans la version de l'objet result = contexte.SetVersionDeTravail(objet.IdVersionDatabase, false); if (!result) { return(result); } objet.Row.Row.SetModified(); } return(result); }
//------------------------------------------------------------------------------- public override CResultAErreur SaveAll(CContexteSauvegardeObjetsDonnees contexteSauvegarde, DataRowState etatsAPrendreEnCompte) { CResultAErreur result = CResultAErreur.True; DataTable table = contexteSauvegarde.ContexteDonnee.Tables[GetNomTable()]; if (table != null) { ArrayList lstRows = new ArrayList(table.Rows); foreach (DataRow row in lstRows) { if (row.RowState == DataRowState.Modified) { CVersionDonneesObjet version = new CVersionDonneesObjet(row); version.CancelCreate(); } if (row.RowState == DataRowState.Added || row.RowState == DataRowState.Modified) { CVersionDonneesObjet versionObjet = new CVersionDonneesObjet(row); if (versionObjet.CodeTypeOperation == (int)CTypeOperationSurObjet.TypeOperation.Ajout || versionObjet.CodeTypeOperation == (int)CTypeOperationSurObjet.TypeOperation.Suppression) { CListeObjetsDonnees datas = versionObjet.ToutesLesOperations; /*CListeObjetsDonnees datas = new CListeObjetsDonnees(versionObjet.ContexteDonnee, typeof(CVersionDonneesObjetOperation)); * datas.Filtre = new CFiltreData(CVersionDonneesObjet.c_champId + "=@1 and " + * CVersionDonneesObjetOperation.c_champOperation += "@2", * versionObjet.Id, * (int)versionObjet.CodeTypeOperation); * datas.InterditLectureInDB = true;*/ datas.Filtre = new CFiltreData(CVersionDonneesObjetOperation.c_champOperation + "=@1", versionObjet.CodeTypeOperation); if (datas.Count == 0) { //Création du data. pour les ajouts et les suppressions, //il doit y avoir un data indiquant l'opération CVersionDonneesObjetOperation data = new CVersionDonneesObjetOperation(contexteSauvegarde.ContexteDonnee); data.CreateNewInCurrentContexte(); data.VersionObjet = versionObjet; data.CodeTypeOperation = versionObjet.CodeTypeOperation; data.Champ = null; } } } } } return(base.SaveAll(contexteSauvegarde, etatsAPrendreEnCompte)); }
//------------------------------------------------------------------------------- public override CResultAErreur TraitementAvantSauvegarde(CContexteDonnee contexte) { CResultAErreur result = base.TraitementAvantSauvegarde(contexte); if (!result) { return(result); } DataTable table = contexte.Tables[GetNomTable()]; if (table != null) { ArrayList lstRows = new ArrayList(table.Rows); foreach (DataRow row in lstRows) { if (row.RowState == DataRowState.Added || row.RowState == DataRowState.Modified) { CVersionDonneesObjet versionObjet = new CVersionDonneesObjet(row); if (versionObjet.CodeTypeOperation == (int)CTypeOperationSurObjet.TypeOperation.Ajout || versionObjet.CodeTypeOperation == (int)CTypeOperationSurObjet.TypeOperation.Suppression) { CListeObjetsDonnees datas = versionObjet.Modifications; datas.Filtre = new CFiltreData(CVersionDonneesObjetOperation.c_champOperation + "=@1", versionObjet.CodeTypeOperation); if (datas.Count == 0) { //Création du data. pour les ajouts et les suppressions, //il doit y avoir un data indiquant l'opération CVersionDonneesObjetOperation data = new CVersionDonneesObjetOperation(contexte); data.CreateNewInCurrentContexte(); data.VersionObjet = versionObjet; data.CodeTypeOperation = versionObjet.CodeTypeOperation; data.Champ = null; } } } } } return(result); }
//------------------------------------------------------------------------------- //Annule les modifications réalisées sur l'objet public CResultAErreur AnnuleModificationsPrevisionnelles(int nIdVersionObjet) { CResultAErreur result = CResultAErreur.True; using (CContexteDonnee contexte = new CContexteDonnee(IdSession, true, false)) { CSessionClient session = CSessionClient.GetSessionForIdSession(IdSession); result = session.BeginTrans(); if (!result) { return(result); } CVersionDonneesObjet versionObjet = new CVersionDonneesObjet(contexte); if (!versionObjet.ReadIfExists(nIdVersionObjet)) { return(result); //Rien à annuler } CVersionDonnees versionPrev = versionObjet.VersionDonnees; if (versionPrev.TypeVersion.Code != CTypeVersion.TypeVersion.Previsionnelle) { result.EmpileErreur(I.T("Cannot cancel archive operation|220")); return(result); } result = AnnuleModificationPrevisionnelle(versionObjet); if (result) { result = contexte.SaveAll(true); if (result) { result = session.CommitTrans(); } else { result = session.RollbackTrans(); } } } return(result); }
//------------------------------------------------------------------------- public CVersionDonneesObjet JournaliseDonnees(System.Data.DataRow row, CVersionDonnees version) { if (row.RowState == DataRowState.Modified || row.RowState == DataRowState.Added || row.RowState == DataRowState.Deleted) { Type tp = CContexteDonnee.GetTypeForTable(row.Table.TableName); if (!typeof(CRelationElementAChamp_ChampCustom).IsAssignableFrom(tp)) { return(null); } //Récupère l'objet associé DataRowVersion rowVersion = DataRowVersion.Current; if (row.RowState == DataRowState.Deleted) { if (row.HasVersion(DataRowVersion.Original)) { rowVersion = DataRowVersion.Original; } else { return(null); } } CRelationElementAChamp_ChampCustom rel = (CRelationElementAChamp_ChampCustom)Activator.CreateInstance(tp, new object[] { row }); rel.VersionToReturn = rowVersion; try { IElementAChamps objet = rel.ElementAChamps; //Si l'objet est ajouté, on n'archive pas ! if (objet is CObjetDonneeAIdNumerique && ((CObjetDonneeAIdNumerique)objet).Row.RowState != DataRowState.Added) { CObjetDonneeAIdNumerique objetAId = (CObjetDonneeAIdNumerique)objet; if (objetAId != null) { //Récupère un version pour l'objet CVersionDonneesObjet versionObjet = version.GetVersionObjetAvecCreation(objetAId.Row.Row); if (versionObjet == null) { return(null); } //Stef 14082008 : en cas d'ajout, on ne fait rien. le datarow de l'objet n'est pas added //car l'objet a déjà été sauvé quand on passe par là ! if (versionObjet.CodeTypeOperation == (int)CTypeOperationSurObjet.TypeOperation.Ajout) { return(null); } new CJournaliseurValeurChampCustom().JournaliseDonneeInContexte(versionObjet, rel.ChampCustom, row); return(versionObjet); } } } catch { return(null); } } return(null); }
//---------------------------------- public CResultAErreur FillFromVersion(CVersionDonneesObjet vo, CContexteDonnee contexteEnVersion, Dictionary <CObjetDonneeAIdNumerique, CMacroObjet> dicObjetToMacro) { CStructureTable structure = CStructureTable.GetStructure(vo.TypeElement); List <CDefinitionProprieteDynamique> lstChampsDotNet = new List <CDefinitionProprieteDynamique>(); lstChampsDotNet.AddRange(new CFournisseurProprietesDynamiqueDynamicField().GetDefinitionsChamps(vo.TypeElement, null)); List <CDefinitionProprieteDynamique> lstChampsCustom = new List <CDefinitionProprieteDynamique>(); lstChampsCustom.AddRange(new CFournisseurProprietesDynamiqueChampCustom().GetDefinitionsChamps(vo.TypeElement, null)); CResultAErreur result = CResultAErreur.True; CObjetDonneeAIdNumerique objet = Activator.CreateInstance(vo.TypeElement, new object[] { contexteEnVersion }) as CObjetDonneeAIdNumerique; if (!objet.ReadIfExists(vo.IdElement)) { objet = null; } else { DesignationObjet = objet.DescriptionElement; } switch (vo.TypeOperation.Code) { case CTypeOperationSurObjet.TypeOperation.Ajout: if (objet != null && objet.IsValide()) { foreach (CDefinitionProprieteDynamique def in lstChampsDotNet) { string strNom = def.NomProprieteSansCleTypeChamp; if (strNom != "IsDeleted" && strNom != "Id" && strNom != "ContexteDeModification" && strNom != "IdVersionDatabase") { bool bAdd = !def.IsReadOnly; if (def.IsReadOnly) { //Si readonly mais a l'attribut ForceSetOnMacro, on l'ajoute quand même PropertyInfo info = vo.TypeElement.GetProperty(strNom); if (info != null && info.GetCustomAttributes(typeof(TiagRelationAttribute), true).Length != 0) { bAdd = true; } } if (bAdd) { CResultAErreur resultVal = CInterpreteurProprieteDynamique.GetValue(objet, def); if (resultVal) { object data = resultVal.Data; CMacroObjetValeur mv = new CMacroObjetValeur(this); mv.Champ = def; if (FillMacroValeurWithValue(mv, data, dicObjetToMacro)) { AddValeur(mv); } else { result.EmpileErreur(new CErreurValidation(I.T("#Can not use field @1 of type @2 in macro", def.Nom, DynamicClassAttribute.GetNomConvivial(vo.TypeElement)), true)); } } } } } if (objet is IObjetDonneeAChamps) { foreach (CRelationElementAChamp_ChampCustom rel in ((IObjetDonneeAChamps)objet).RelationsChampsCustom) { object data = rel.Valeur; if (data != null) { CDefinitionProprieteDynamique defCust = lstChampsCustom.FirstOrDefault(c => ((CDefinitionProprieteDynamiqueChampCustom)c).DbKeyChamp == rel.ChampCustom.DbKey); if (defCust != null) { CMacroObjetValeur mv = new CMacroObjetValeur(this); mv.Champ = defCust; mv.Champ = defCust; if (FillMacroValeurWithValue(mv, data, dicObjetToMacro)) { this.AddValeur(mv); } else { result.EmpileErreur(new CErreurValidation(I.T("#Can not use field @1 of type @2 in macro", rel.ChampCustom.Nom, DynamicClassAttribute.GetNomConvivial(vo.TypeElement)), true)); } } } } } } break; case CTypeOperationSurObjet.TypeOperation.Suppression: break; case CTypeOperationSurObjet.TypeOperation.Modification: CStructureTable structureObjet = CStructureTable.GetStructure(vo.TypeElement); foreach (CVersionDonneesObjetOperation valeur in vo.ToutesLesOperations) { CDefinitionProprieteDynamique def = null; IChampPourVersion champ = valeur.Champ; if (champ is CChampPourVersionInDb) { string strNomChamp = ((CChampPourVersionInDb)champ).NomPropriete; CInfoChampTable infoChamp = structureObjet.Champs.FirstOrDefault(c => c.NomChamp == strNomChamp); if (infoChamp != null && infoChamp.NomChamp != CSc2iDataConst.c_champIdVersion && infoChamp.NomChamp != CSc2iDataConst.c_champIsDeleted && infoChamp.NomChamp != CObjetDonnee.c_champContexteModification) { string strNomPropriete = infoChamp.Propriete; def = lstChampsDotNet.FirstOrDefault(c => c.NomProprieteSansCleTypeChamp == strNomPropriete); } if (def == null) { CInfoRelation relation = structureObjet.RelationsParentes.FirstOrDefault(i => i.ChampsFille.Length == 1 && i.ChampsFille[0] == strNomChamp); if (relation != null) { def = lstChampsDotNet.FirstOrDefault(c => c.NomProprieteSansCleTypeChamp == relation.Propriete); } } } else if (champ is CChampCustomPourVersion) { CChampCustom champCustom = ((CChampCustomPourVersion)champ).ChampCustom; if (champCustom != null) { def = lstChampsCustom.FirstOrDefault(c => c is CDefinitionProprieteDynamiqueChampCustom && ((CDefinitionProprieteDynamiqueChampCustom)c).DbKeyChamp == champCustom.DbKey); } } if (def != null) { bool bAdd = !def.IsReadOnly; if (def.IsReadOnly) { //Si readonly mais a l'attribut TiagRelation, on l'ajoute quand même PropertyInfo info = vo.TypeElement.GetProperty(def.NomProprieteSansCleTypeChamp); if (info != null && info.GetCustomAttributes(typeof(TiagRelationAttribute), true).Length > 0) { bAdd = true; } } if (bAdd) { CMacroObjetValeur mv = new CMacroObjetValeur(this); mv.Champ = def; object val = valeur.GetValeur(); if (val != null && typeof(CObjetDonneeAIdNumerique).IsAssignableFrom(def.TypeDonnee.TypeDotNetNatif) && valeur.TypeValeur == typeof(int)) { CObjetDonneeAIdNumerique objetParent = Activator.CreateInstance(def.TypeDonnee.TypeDotNetNatif, new object[] { objet.ContexteDonnee }) as CObjetDonneeAIdNumerique; if (objetParent.ReadIfExists((int)valeur.GetValeur())) { val = objetParent; } else { val = null; } } if (!FillMacroValeurWithValue(mv, val, dicObjetToMacro)) { result.EmpileErreur(new CErreurValidation(I.T("#Can not use field @1 of @2 in macro", valeur.NomChampConvivial, DynamicClassAttribute.GetNomConvivial(vo.TypeElement)), true)); } else { AddValeur(mv); } } } } break; } if (Valeurs.Count() == 0) { TypeOperation = new CTypeOperationSurObjet(CTypeOperationSurObjet.TypeOperation.Aucune); } return(result); }
//---------------------------------- public CResultAErreur FillFromVersion(CVersionDonneesObjet vo, CContexteDonnee contexteEnVersion, Dictionary <CObjetDonneeAIdNumerique, CMacroObjet> dicObjetToMacro) { List <CDefinitionProprieteDynamique> lstChampsDotNet = new List <CDefinitionProprieteDynamique>(); lstChampsDotNet.AddRange(new CFournisseurProprietesDynamiqueDynamicField().GetDefinitionsChamps(vo.TypeElement, null)); List <CDefinitionProprieteDynamique> lstChampsCustom = new List <CDefinitionProprieteDynamique>(); lstChampsCustom.AddRange(new CFournisseurProprietesDynamiqueChampCustom().GetDefinitionsChamps(vo.TypeElement, null)); CResultAErreur result = CResultAErreur.True; CObjetDonneeAIdNumerique objet = Activator.CreateInstance(vo.TypeElement, new object[] { contexteEnVersion }) as CObjetDonneeAIdNumerique; if (!objet.ReadIfExists(vo.IdElement)) { objet = null; } else { DesignationObjet = objet.DescriptionElement; } switch (vo.TypeOperation.Code) { case CTypeOperationSurObjet.TypeOperation.Ajout: if (objet != null && objet.IsValide()) { foreach (CDefinitionProprieteDynamique def in lstChampsDotNet) { string strNom = def.NomProprieteSansCleTypeChamp; if (!def.IsReadOnly && strNom != "IsDeleted" && strNom != "Id" && strNom != "ContexteDeModification" && strNom != "IdVersionDatabase") { CResultAErreur resultVal = CInterpreteurProprieteDynamique.GetValue(objet, def); if (resultVal) { object data = resultVal.Data; CMacroObjetValeur mv = new CMacroObjetValeur(this); mv.Champ = def; if (FillMacroValeurWithValue(mv, data, dicObjetToMacro)) { AddValeur(mv); } else { result.EmpileErreur(new CErreurValidation(I.T("Can not use field @1 in macro|20052", def.Nom), true)); } } } } if (objet is CElementAChamp) { foreach (CRelationElementAChamp_ChampCustom rel in ((CElementAChamp)objet).RelationsChampsCustom) { object data = rel.Valeur; if (data != null) { CDefinitionProprieteDynamique defCust = lstChampsCustom.FirstOrDefault(c => ((CDefinitionProprieteDynamiqueChampCustom)c).IdChamp == rel.ChampCustom.Id); if (defCust != null) { CMacroObjetValeur mv = new CMacroObjetValeur(this); mv.Champ = defCust; mv.Champ = defCust; this.AddValeur(mv); if (FillMacroValeurWithValue(mv, data, dicObjetToMacro)) { this.AddValeur(mv); } else { result.EmpileErreur(new CErreurValidation(I.T("Can not use field @1 in macro|20052", rel.ChampCustom.Nom), true)); } } } } } } break; case CTypeOperationSurObjet.TypeOperation.Suppression: break; case CTypeOperationSurObjet.TypeOperation.Modification: CStructureTable structureObjet = CStructureTable.GetStructure(vo.TypeElement); foreach (CVersionDonneesObjetOperation valeur in vo.ToutesLesOperations) { CDefinitionProprieteDynamique def = null; IChampPourVersion champ = valeur.Champ; if (champ is CChampPourVersionInDb) { string strNomChamp = ((CChampPourVersionInDb)champ).NomPropriete; CInfoChampTable infoChamp = structureObjet.Champs.FirstOrDefault(c => c.NomChamp == strNomChamp); if (infoChamp != null && infoChamp.NomChamp != CSc2iDataConst.c_champIdVersion && infoChamp.NomChamp != CSc2iDataConst.c_champIsDeleted && infoChamp.NomChamp != CObjetDonnee.c_champContexteModification) { string strNomPropriete = infoChamp.Propriete; def = lstChampsDotNet.FirstOrDefault(c => c.NomProprieteSansCleTypeChamp == strNomPropriete); } } else if (champ is CChampCustomPourVersion) { CChampCustom champCustom = ((CChampCustomPourVersion)champ).ChampCustom; if (champCustom != null) { def = lstChampsCustom.FirstOrDefault(c => c is CDefinitionProprieteDynamiqueChampCustom && ((CDefinitionProprieteDynamiqueChampCustom)c).IdChamp == champCustom.Id); } } if (def != null && !def.IsReadOnly) { CMacroObjetValeur mv = new CMacroObjetValeur(this); mv.Champ = def; if (!FillMacroValeurWithValue(mv, valeur.GetValeur(), dicObjetToMacro)) { result.EmpileErreur(new CErreurValidation(I.T("Can not use field @1 in macro|20052", valeur.NomChampConvivial), true)); } else { AddValeur(mv); } } } break; } if (Valeurs.Count() == 0) { TypeOperation = new CTypeOperationSurObjet(CTypeOperationSurObjet.TypeOperation.Aucune); } return(result); }
//--------------------------------------------------------------- public CVersionDonneesObjetOperation JournaliseDonneeInContexte(CVersionDonneesObjet version, CChampCustom champ, DataRow row) { if (row.RowState != DataRowState.Modified && row.RowState != DataRowState.Added && row.RowState != DataRowState.Deleted) { return(null); } Type tp = CContexteDonnee.GetTypeForTable(row.Table.TableName); if (!typeof(CRelationElementAChamp_ChampCustom).IsAssignableFrom(tp)) { return(null); } CRelationElementAChamp_ChampCustom rel = (CRelationElementAChamp_ChampCustom)Activator.CreateInstance(tp, new object[] { row }); object valeurAvant = DBNull.Value; object valeurApres = DBNull.Value; if (champ.TypeDonneeChamp.TypeDonnee == TypeDonnee.tObjetDonneeAIdNumeriqueAuto) { if (row.HasVersion(DataRowVersion.Original)) { rel.VersionToReturn = DataRowVersion.Original; valeurAvant = rel.ValeurInt; rel.VersionToReturn = DataRowVersion.Current; } if (row.HasVersion(DataRowVersion.Current)) { valeurApres = rel.ValeurInt; } } else { valeurAvant = DBNull.Value; if (row.HasVersion(DataRowVersion.Original)) { rel.VersionToReturn = DataRowVersion.Original; valeurAvant = rel.Valeur; rel.VersionToReturn = DataRowVersion.Current; } if (row.HasVersion(DataRowVersion.Current)) { valeurApres = rel.Valeur; } } CVersionDonneesObjetOperation verData = null; ///Stef optim 13082008 : ne passe plus par une liste pour trouver l'objet //Ancien code /* * CListeObjetsDonnees datas = version.Modifications; * datas.Filtre = new CFiltreData(CVersionDonneesObjetOperation.c_champTypeChamp + "=@1 and " + * CVersionDonneesObjetOperation.c_champChamp + "=@2", * CChampCustomPourVersion.c_typeChamp, * champ.Id.ToString()); * datas.InterditLectureInDB = true; * * if (datas.Count != 0) * verData = (CVersionDonneesObjetOperation)datas[0]; * */ //Nouveau code object dummy = null; if (!version.IsDependanceChargee(CVersionDonneesObjetOperation.c_nomTable, CVersionDonneesObjet.c_champId)) { dummy = version.Modifications; } DataTable table = version.ContexteDonnee.GetTableSafe(CVersionDonneesObjetOperation.c_nomTable); StringBuilder bl = new StringBuilder(); bl.Append(CVersionDonneesObjet.c_champId); bl.Append("="); bl.Append(version.Id); bl.Append(" and "); bl.Append(CVersionDonneesObjetOperation.c_champTypeChamp); bl.Append("='"); bl.Append(CChampCustomPourVersion.c_typeChamp); bl.Append("' and "); bl.Append(CVersionDonneesObjetOperation.c_champChamp); bl.Append("='"); bl.Append(champ.Id); bl.Append("'"); DataRow[] rows = table.Select(bl.ToString()); if (rows.Length > 0) { verData = new CVersionDonneesObjetOperation(rows[0]); } //fin du nouveau code else { verData = new CVersionDonneesObjetOperation(version.ContexteDonnee); verData.CreateNewInCurrentContexte(); verData.VersionObjet = version; verData.CodeTypeOperation = (int)CTypeOperationSurObjet.TypeOperation.Modification; } verData.FieldKey = champ.Id.ToString(); //Pour les prévisionnelles, stocke la nouvelle valeur if (version.VersionDonnees.TypeVersion.Code == CTypeVersion.TypeVersion.Previsionnelle) { verData.SetValeurStd(valeurApres); } else { //Pour les archives, stocke l'ancienne valeur verData.SetValeurStd(valeurAvant); } verData.TypeChamp = CChampCustomPourVersion.c_typeChamp; if (version != null && version.TypeOperation == CTypeOperationSurObjet.TypeOperation.Aucune) { version.CodeTypeOperation = (int)CTypeOperationSurObjet.TypeOperation.Modification; } return(verData); }
//------------------------------------------------------ private TreeNode CreateNodeObjet(TreeNodeCollection nodes, CObjetDonneeAIdNumerique objet) { if (objet == null) { TreeNode newNode = new TreeNode(I.T("No value|107")); newNode.Tag = null; newNode.ImageIndex = c_nImageUnchanged; newNode.SelectedImageIndex = c_nImageUnchanged; nodes.Add(newNode); return(newNode); } int nImage = c_nImageUnchanged; if (m_version.TypeVersion.Code == CTypeVersion.TypeVersion.Previsionnelle) { StringBuilder blIdsVersionsInteressantes = new StringBuilder(); blIdsVersionsInteressantes.Append(m_version.Id); foreach (int nId in m_nIdsVersionsSuccessives) { blIdsVersionsInteressantes.Append(";"); blIdsVersionsInteressantes.Append(nId); } //Version prévisionnelle //L'élément a-t-il été supprimé ? CFiltreData filtre = new CFiltreDataAvance( CVersionDonneesObjet.c_nomTable, CVersionDonneesObjet.c_champTypeOperation + "=@1 and " + CVersionDonneesObjet.c_champTypeElement + "=@2 and " + CVersionDonneesObjet.c_champIdElement + "=@3 and " + CVersionDonnees.c_champId + " in (" + blIdsVersionsInteressantes.ToString() + ")", (int)CTypeOperationSurObjet.TypeOperation.Suppression, objet.GetType().ToString(), objet.Id); //si prévisionnelle, y a t il une création depuis la version de référence ? CVersionDonneesObjet versionObjet = new CVersionDonneesObjet(m_contexteDonnees); if (versionObjet.ReadIfExists(filtre)) { nImage = c_nImageDelete; } else { //Y a t-il un ajout ? filtre.Parametres[0] = (int)CTypeOperationSurObjet.TypeOperation.Ajout; if (versionObjet.ReadIfExists(filtre)) { nImage = c_nImageAdd; } else { //Modification ? filtre.Parametres[0] = (int)CTypeOperationSurObjet.TypeOperation.Modification; if (versionObjet.ReadIfExists(filtre)) { nImage = c_nImageEdit; } } } } else //Version archive ou étiquette { if (objet.IdVersionDatabase != null) { //L'objet appartient à une version, il a donc été supprimé nImage = c_nImageDelete; } else { //Trouve t-on un ajout depuis la version de référence ? CVersionDonneesObjet versionObjet = new CVersionDonneesObjet(m_contexteDonnees); CFiltreData filtre = new CFiltreDataAvance( CVersionDonneesObjet.c_nomTable, CVersionDonneesObjet.c_champTypeOperation + "=@1 and " + CVersionDonneesObjet.c_champTypeElement + "=@2 and " + CVersionDonneesObjet.c_champIdElement + "=@3 and " + CVersionDonnees.c_champId + ">=@4 and " + CVersionDonnees.c_nomTable + "." + CVersionDonnees.c_champTypeVersion + "=@5", (int)CTypeOperationSurObjet.TypeOperation.Ajout, objet.GetType().ToString(), objet.Id, m_version.Id, (int)CTypeVersion.TypeVersion.Archive); if (versionObjet.ReadIfExists(filtre)) { nImage = c_nImageAdd; } else { filtre.Parametres[0] = (int)CTypeOperationSurObjet.TypeOperation.Modification; if (versionObjet.ReadIfExists(filtre)) { nImage = c_nImageEdit; } } } } TreeNode node = new TreeNode(objet.DescriptionElement); node.ImageIndex = nImage; node.SelectedImageIndex = nImage; node.Tag = objet; //Ajoute un faux fils nodes.Add(node); AddFakeNode(node); return(node); }