/// //////////////////////////////////////////////////////// protected override CResultAErreur MyExecute(CContexteExecutionAction contexte) { CResultAErreur result = CResultAErreur.True; CFamilleEquipement famille = new CFamilleEquipement(contexte.ContexteDonnee); if (!famille.ReadIfExists(m_nIdFamilleEquipement)) { result.EmpileErreur(I.T("Equipment type family @1 doesn't exists|20027", m_nIdFamilleEquipement.ToString())); return(result); } CListeObjetsDonnees lstTypes = new CListeObjetsDonnees(contexte.ContexteDonnee, typeof(CSpvTypeq)); lstTypes.Filtre = new CFiltreData(CSpvTypeq.c_champSmtTypeEquipement_Id + " is null"); foreach (CSpvTypeq typeEq in lstTypes.ToArrayList()) { CTypeEquipement type = new CTypeEquipement(contexte.ContexteDonnee); type.CreateNewInCurrentContexte(); type.Libelle = typeEq.Libelle; type.Famille = famille; typeEq.TypeEquipementSmt = type; } CListeObjetsDonnees lstObjets = new CListeObjetsDonnees(contexte.ContexteDonnee, typeof(CSpvEquip)); lstObjets.Filtre = new CFiltreDataAvance(CSpvEquip.c_nomTable, "HasNo(" + CSpvEquip.c_champSmtEquipementLogique_Id + ") and " + "Has(TypeEquipement." + CSpvTypeq.c_champSmtTypeEquipement_Id + ") and " + "has(" + CSpvSite.c_nomTable + "." + CSpvSite.c_champSmtSite_Id + ")"); int nNbEquips = lstObjets.Count; int nEquip = 0; if (contexte.IndicateurProgression != null) { contexte.IndicateurProgression.PushSegment(9, nNbEquips); contexte.SetInfoProgression(I.T("Transfering discovered equipments|20221")); } ArrayList lstEquips = lstObjets.ToArrayList(); foreach (CSpvEquip equipSpv in lstEquips) { nEquip++; if (nEquip % 20 == 0 && contexte.IndicateurProgression != null) { contexte.IndicateurProgression.SetValue(nEquip / 2); contexte.SetInfoProgression((int)(nEquip / 2) + "/" + nNbEquips); } CSpvSite siteSpv = equipSpv.SpvSite; CSpvTypeq typeEqSpv = equipSpv.TypeEquipement; if (siteSpv != null && typeEqSpv != null) { CTypeEquipement typeTimos = typeEqSpv.TypeEquipementSmt; CSite siteTimos = siteSpv.ObjetTimosAssocie; if (typeTimos != null && siteTimos != null) { CEquipementLogique equipementTimos = new CEquipementLogique(contexte.ContexteDonnee); equipementTimos.TypeEquipement = typeTimos; equipementTimos.Site = siteTimos; equipementTimos.Libelle = equipSpv.CommentairePourSituer; equipSpv.ObjetTimosAssocie = equipementTimos; } } } foreach (CSpvEquip equipSpv in lstEquips) { nEquip++; if (nEquip % 20 == 0 && contexte.IndicateurProgression != null) { contexte.IndicateurProgression.SetValue(nEquip / 2); contexte.SetInfoProgression((int)(nEquip / 2) + "/" + nNbEquips); } CEquipementLogique equip = equipSpv.ObjetTimosAssocie; if (equipSpv.EquipementEnglobant != null) { CEquipementLogique englobant = equipSpv.EquipementEnglobant.ObjetTimosAssocie; if (englobant == null) { result = equipSpv.Delete(true); if (!result) { return(result); } } else { equip.EquipementLogiqueContenant = englobant; } } } if (contexte.IndicateurProgression != null) { contexte.IndicateurProgression.PopSegment(); } return(result); }
//----------------------------------------------------------------- /// <summary> /// recalcule l'arbre opérationnel /// </summary> /// <param name="baseGraphes"></param> /// <returns></returns> public CResultAErreur RecalculeArbreOperationnelInContexte(CBaseGraphesReseau baseGraphes) { if (baseGraphes == null) { baseGraphes = new CBaseGraphesReseau(); } CResultAErreur result = CResultAErreur.True; CSchemaReseau schema = ObjetTimosAssocie; //Supprime toutes les dépendances à des elements de graphe result = CObjetDonneeAIdNumerique.Delete(ElementsDeGraphe, true); if (!result) { return(result); } foreach (ESensAllerRetourLienReseau sens in Enum.GetValues(typeof(ESensAllerRetourLienReseau))) { ESensAllerRetourLienReseau?sensRetenu = null; if (schema.LienReseau == null) { sensRetenu = sens; } //Calcule le graphe CGrapheReseau graphe = baseGraphes.GetGrapheExistant(schema, sensRetenu); if (graphe == null) { graphe = new CGrapheReseau(baseGraphes); result = graphe.CalculeGraphe(schema, sensRetenu); if (!result) { return(result); } } CArbreOperationnel arbre = new CArbreOperationnel(); result = arbre.CalculArbreRedondanceAuto(schema, graphe); if (!result) { return(result); } result = CSpvElementDeGraphe.CreateFromElementDeArbreOperationnel(this, arbre.ElementRacine, sensRetenu); if (!result) { return(result); } if (schema.LienReseau != null) { break; } } //Recalcule les éléments de graphe qui utilisent ce schéma CListeObjetsDonnees lstEltsUtilisantLeSchema = new CListeObjetsDonnees(ContexteDonnee, typeof(CSpvElementDeGraphe)); lstEltsUtilisantLeSchema.Filtre = new CFiltreData(CSpvElementDeGraphe.c_champIdSchemaSmt + "=@1", schema.Id); foreach (CSpvElementDeGraphe elt in lstEltsUtilisantLeSchema.ToArrayList()) { CSpvElementDeGrapheSousSchema eltSpvSousSchema = elt.GetElementDuBonType() as CSpvElementDeGrapheSousSchema; if (eltSpvSousSchema != null) { CNoeudDeGrapheReseau noeudDepart = eltSpvSousSchema.NoeudDepart; CNoeudDeGrapheReseau noeudArrive = eltSpvSousSchema.NoeudArrive; CArbreOperationnel arbre = new CArbreOperationnel(); CGrapheReseau graphe = baseGraphes.GetGrapheExistant(schema, eltSpvSousSchema.SensGraphe); if (graphe == null) { graphe = new CGrapheReseau(baseGraphes); result = graphe.CalculeGraphe(schema, eltSpvSousSchema.SensGraphe); if (!result) { return(result); } } result = arbre.CalculArbreRedondanceAuto(schema, graphe, noeudDepart, noeudArrive); if (!result) { return(result); } CElementDeArbreOperationnelSousSchema eltOp = new CElementDeArbreOperationnelSousSchema(null); eltOp.ElementDeArbre = arbre.ElementRacine; eltOp.IdSchema = schema.Id; eltOp.NoeudArrive = noeudArrive; eltOp.NoeudDepart = noeudDepart; result = CObjetDonneeAIdNumerique.Delete(eltSpvSousSchema.ElementsFils, true); if (!result) { return(result); } result = eltSpvSousSchema.FillFromElementDeGraphe(eltOp); if (!result) { return(result); } } } return(result); }
//------------------------------------------------------------------- public override CResultAErreur VerifieDonnees(CObjetDonnee objet) { CResultAErreur result = CResultAErreur.True; try { CIntervention inter = (CIntervention)objet; if (inter.Site == null) { result.EmpileErreur(I.T("The intervention must be associated to a Site|388")); } if (inter.TypeIntervention == null) { result.EmpileErreur(I.T("The Intervention type cannot be null|152")); } if (inter.Fractions.Count == 0) { //Pas de fractions, il faut au moins un préplanifieur if (inter.DateDebutPrePlanifiee == null || inter.DateFinPrePlanifiee == null) { if (inter.UserPreplanifieur == null) { result.EmpileErreur(I.T("The person in charge of preplanning must be defined|209")); } } else { if (inter.UserPlanifieur == null) { result.EmpileErreur(I.T("The person in charge of planning must be definde|210")); } } } if (inter.UserPlanifieur != null) { if (inter.TypeIntervention != null && inter.TypeIntervention.ProfilPlanifieur != null) { if (!inter.TypeIntervention.ProfilPlanifieur.IsInProfil(inter.UserPlanifieur, inter)) { result.EmpileErreur(I.T("The user @1 cannot be a planner|211"), inter.UserPlanifieur.Acteur.IdentiteComplete); } } } if (inter.UserPreplanifieur != null) { if (inter.TypeIntervention != null && inter.TypeIntervention.ProfilPreplanifieur != null) { if (!inter.TypeIntervention.ProfilPreplanifieur.IsInProfil(inter.UserPreplanifieur, inter)) { result.EmpileErreur(I.T("The user @1 cannot be a preplanner|212"), inter.UserPreplanifieur.Acteur.IdentiteComplete); } } } // Vérifie le doublons des Opérations prévisionnelles: même type d'opération et même équipement CListeObjetsDonnees listOpe = inter.Operations; listOpe.Filtre = new CFiltreData(CEquipement.c_champId + " is not null"); ArrayList listeAVerifier = listOpe.ToArrayList(); /* foreach (COperation ope1 in listeAVerifier) * { * foreach (COperation ope2 in listeAVerifier) * { * if (ope1.Id != ope2.Id && * ope1.TypeOperation.Id == ope2.TypeOperation.Id && * ope1.Equipement.Id == ope2.Equipement.Id) * { * result.EmpileErreur(I.T( "There are tow '@1' Operations on equipment '@2'|363", ope1.TypeOperation.Libelle, ope1.Equipement.Libelle)); * } * } * }*/ } catch (Exception e) { result.EmpileErreur(new CErreurException(e)); } return(result); }
//--------------------------------------------- private void FillListeInterventionsAPlanifier() { m_timerRefreshInterventionsPlanifiees.Stop(); IElementAIntervention element = m_controlePlanning.ElementAInterventionSelectionne; if (element == null) { m_chkIntersSurSiteSelectionné.Visible = false; } else { m_chkIntersSurSiteSelectionné.Text = I.T("Filter on @1|20658", element.DescriptionElement); } m_panelTachesPrePlanifiees.Visible = true; DateTime dateDebut = m_controlePlanning.DateDebut.Date; DateTime dateFin = m_controlePlanning.DateFin.Date.AddDays(1); m_lblDatesListe.Text = I.T("from @1 to @2|20652", dateDebut.ToShortDateString(), dateFin.ToShortDateString()); if (m_listeEntitesSelectionnee != null) { m_chkIntersSurListe.Text = m_listeEntitesSelectionnee.Libelle; } if (m_filtreDynamicSelectionnee != null) { m_chkIntersFiltre.Text = m_filtreDynamicSelectionnee.Libelle; } CListeObjetsDonnees listeInters = new CListeObjetsDonnees(m_contexteDonnee, typeof(CIntervention)); listeInters.PreserveChanges = true; CFiltreData filtre = new CFiltreDataAvance(CIntervention.c_nomTable, "(" + CIntervention.c_champDateDebutPreplanifiee + "<@1 and " + CIntervention.c_champDateFinPrePlanifiee + ">@2) or (" + CFractionIntervention.c_nomTable + "." + CFractionIntervention.c_champDateDebutPlanifie + "<@1 and " + CFractionIntervention.c_nomTable + "." + CFractionIntervention.c_champDateFinPlanifiee + ">@2)", dateFin, dateDebut); if (m_chkIntersSurSiteSelectionné.Checked && element is CSite) { filtre = CFiltreData.GetAndFiltre(filtre, new CFiltreData(CIntervention.c_champIdElementLie + "=@1", element.Id)); } if (m_chkIntersNonPlanifiées.Checked) { filtre = CFiltreData.GetAndFiltre(filtre, new CFiltreDataAvance(CIntervention.c_nomTable, "HasNo(" + CFractionIntervention.c_nomTable + "." + CFractionIntervention.c_champId + ")")); } if (m_chkIntersNonAffectées.Checked) { filtre = CFiltreData.GetAndFiltre(filtre, new CFiltreDataAvance(CIntervention.c_nomTable, "Hasno(" + CIntervention_Intervenant.c_nomTable + "." + CIntervention_Intervenant.c_champId + ")")); } listeInters.Filtre = filtre; if (m_setIdsInterventionsVisiblesCalculéDefiltreEtListe == null) { CalculeSetIdsInterventionsVisibles(); } List <CIntervention> lstFiltree = listeInters.ToList <CIntervention>(); foreach (CIntervention inter in listeInters.ToArrayList()) { if (m_chkIntersNonPlanifiées.Checked && inter.Fractions.Count > 0) { lstFiltree.Remove(inter); } if (m_chkIntersNonAffectées.Checked && inter.RelationsIntervenants.Count > 0) { lstFiltree.Remove(inter); } if (inter.Id >= 0 && m_setIdsInterventionsVisiblesCalculéDefiltreEtListe != null && !m_setIdsInterventionsVisiblesCalculéDefiltreEtListe.Contains(inter.Id)) { lstFiltree.Remove(inter); } } m_wndListeInterAPlanifier.ListeSource = lstFiltree; m_wndListeInterAPlanifier.Refresh(); }
private static void OnRetrieveMails(object state) { if (m_bTraitementEnCours) return; m_bTraitementEnCours = true; try { System.Threading.Thread.CurrentThread.Priority = System.Threading.ThreadPriority.Lowest; CResultAErreur result; if (m_sessionRecherche == null || !m_sessionRecherche.IsConnected) { m_sessionRecherche = CSessionClient.CreateInstance(); result = m_sessionRecherche.OpenSession(new CAuthentificationSessionServer(), I.T("MAIL ACCOUNT SERVICE|10001"), ETypeApplicationCliente.Service); if (!result) { C2iEventLog.WriteErreur(I.T("Session Opening error for Mail Account Management Service|10003")); return; } } try { CFiltreData filtre = new CFiltreData( CCompteMail.c_champIsActive + " = @1", true); if (new CCompteMailServeur(m_sessionRecherche.IdSession).CountRecords( CCompteMail.c_nomTable, filtre) > 0) { CSessionClient sessionTravail = new CSessionProcessServeurSuivi(); result = sessionTravail.OpenSession(new CAuthentificationSessionServer(), I.T("RECEIVE MAILS SERVICE|10004"), ETypeApplicationCliente.Service); if (!result) { C2iEventLog.WriteErreur(I.T("Working session openning error for Receive Mails Service|10005")); return; } try { using (CContexteDonnee contexteTravail = new CContexteDonnee(sessionTravail.IdSession, true, false)) { //CCompteMailServeur compteServeur = new CCompteMailServeur(sessionTravail.IdSession); CListeObjetsDonnees liste = new CListeObjetsDonnees(contexteTravail, typeof(CCompteMail)); liste.Filtre = filtre; ArrayList lstLock = liste.ToArrayList(); foreach (CCompteMail compteMail in lstLock) { if (compteMail.DateDernierReleve == null || compteMail.DateDernierReleve.Value.AddMinutes(compteMail.PeriodeReleve) < DateTime.Now) { result += compteMail.RetrieveMails(); } } } } catch (Exception e) { C2iEventLog.WriteErreur(I.T("Error while receiving Mail : @1|10006", e.ToString())); } finally { try { sessionTravail.CloseSession(); } catch { } } } } catch (Exception e) { C2iEventLog.WriteErreur(I.T("Error while receiving Mail : @1|10006", e.ToString())); } } catch (Exception e) { { C2iEventLog.WriteErreur(I.T("Error while receiving Mail : @1|10006", e.ToString())); } } finally { m_bTraitementEnCours = false; } }
private static void OnSendSMS(object state) { if (m_bTraitementEnCours) { return; } m_bTraitementEnCours = true; try { System.Threading.Thread.CurrentThread.Priority = System.Threading.ThreadPriority.Lowest; CResultAErreur result; if (m_sessionRecherche == null || !m_sessionRecherche.IsConnected) { m_sessionRecherche = CSessionClient.CreateInstance(); result = m_sessionRecherche.OpenSession(new CAuthentificationSessionServer(), I.T("SMS SERVICE|20159"), ETypeApplicationCliente.Service); if (!result) { C2iEventLog.WriteErreur(I.T("Session Opening error for SMS Service|20160")); return; } } try { CFiltreData filtre = new CFiltreData(CMessageSMS.c_champNextSendDate + " < @1 and " + CMessageSMS.c_champDateEnvoi + " is null and " + CMessageSMS.c_champNbEssais + " < 10", DateTime.Now ); if (new CMessageSMSServeur(m_sessionRecherche.IdSession).CountRecords( CMessageSMS.c_nomTable, filtre) > 0) { CSessionClient sessionTravail = new CSessionProcessServeurSuivi(); result = sessionTravail.OpenSession(new CAuthentificationSessionProcess(), I.T("Send SMS|20161"), ETypeApplicationCliente.Service); if (!result) { C2iEventLog.WriteErreur(I.T("Working session openning error for SMS send|20162")); return; } try { using (CContexteDonnee contexteTravail = new CContexteDonnee(sessionTravail.IdSession, true, false)) { CMessageSMSServeur serveur = new CMessageSMSServeur(sessionTravail.IdSession); CListeObjetsDonnees liste = new CListeObjetsDonnees(contexteTravail, typeof(CMessageSMS)); liste.Filtre = filtre; ArrayList lstLock = liste.ToArrayList(); foreach (CMessageSMS message in lstLock) { CMessageSMSPourEnvoi toSend = new CMessageSMSPourEnvoi(message.Destinataires, message.Texte); result = toSend.Send(sessionTravail.IdSession); message.BeginEdit(); if (!result) { message.NextSendDate = DateTime.Now.AddMinutes(3); message.NbEssais++; message.LastErreur = result.Erreur.ToString(); } else { message.DateEnvoi = DateTime.Now; message.LastErreur = ""; } message.CommitEdit(); result.SetTrue(); } } } catch (Exception e) { C2iEventLog.WriteErreur(I.T("Error while sendind SMS : @1|20163", e.ToString())); } finally { try { sessionTravail.CloseSession(); } catch { } } } } catch (Exception e) { C2iEventLog.WriteErreur(I.T("Error while sendind SMS : @1|20163", e.ToString())); } } catch (Exception e) { { C2iEventLog.WriteErreur(I.T("Error while sendind SMS : @1|20163", e.ToString())); } } finally { m_bTraitementEnCours = false; } }
//--------------------------------------------------------------------------- public CResultAErreur TraitementApresSauvegarde(CContexteDonnee contexte) { CResultAErreur result = CResultAErreur.True; DataTable table = contexte.Tables[GetNomTable()]; if (table == null) { return(result); } HashSet <DataRow> rowsToSend = table.ExtendedProperties[GetType()] as HashSet <DataRow>; if (rowsToSend == null) { return(result); } CListeObjetsDonnees lstServiceMediation = new CListeObjetsDonnees(contexte, typeof(CSnmpProxyInDb)); HashSet <string> myIps = new HashSet <string>(); System.Net.IPHostEntry moiMeme = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()); foreach (IPAddress adresse in moiMeme.AddressList) { myIps.Add(adresse.ToString()); } foreach (CSnmpProxyInDb proxy in lstServiceMediation.ToArrayList()) { string strParametresAgent = proxy.AdresseIp; foreach (DataRow row in rowsToSend) { if (DoitMettreAJour(proxy, row)) { EOperationSynchronisationSurAgentSynchronisation typeOperation = EOperationSynchronisationSurAgentSynchronisation.CreateOrUpdate; if (row.RowState == DataRowState.Deleted) { typeOperation = EOperationSynchronisationSurAgentSynchronisation.Delete; } string strId = row[ChampIdDeTypeSynchronise, row.RowState == DataRowState.Deleted ? DataRowVersion.Original : DataRowVersion.Current].ToString(); IOperationSynchronisation operation = new COperationSynchronisationSurAgentSynchronisation( GetType(), strParametresAgent, typeOperation, strId); if (myIps.Contains(proxy.AdresseIp)) { Init(proxy.AdresseIp); result = DoOperation(operation, contexte); if (!result) { return(result); } } else { CSynchroniseurBaseDistante.DefaultInstance.AddOperation(contexte.IdSession, proxy.CleBaseDistante, operation); } } } } table.ExtendedProperties.Remove(GetType()); return(result); }
///////////////////////////////////////////////////////////////// /// <summary> /// Ajoute la suppression de relationsTypeId qui sont des compositions /// </summary> /// <returns></returns> public static CResultAErreur DoDeleteInterneACObjetDonneeNePasUtiliserSansBonneRaison(CListeObjetsDonnees liste, bool bDansContexteCourant) { CResultAErreur result = CResultAErreur.True; if (liste.Count == 0) { return(result); } Type typeElements = liste.TypeObjets; int nTailleBloc = 500; //Travaille par bloc de 500 éléments int nCount = liste.Count; for (int nBloc = 0; nBloc < nCount; nBloc += nTailleBloc) { StringBuilder blIds = new StringBuilder(); int nMin = Math.Min(nBloc + nTailleBloc, nCount); for (int nElement = nBloc; nElement < nMin; nElement++) { if (((CObjetDonneeAIdNumerique)liste[nElement]).IsValide()) { blIds.Append(((CObjetDonneeAIdNumerique)liste[nElement]).Id); blIds.Append(','); } } if (blIds.Length > 0) { blIds.Remove(blIds.Length - 1, 1); { string strListeIds = blIds.ToString(); //Supprime tous les fils de relation TypeId foreach (RelationTypeIdAttribute relation in CContexteDonnee.RelationsTypeIds) { if (relation.Composition) { Type tpLiens = CContexteDonnee.GetTypeForTable(relation.TableFille); if (relation.IsAppliqueToType(typeElements)) { CListeObjetsDonnees listeTypeId = new CListeObjetsDonnees(liste.ContexteDonnee, tpLiens, false); CFiltreData filtre = new CFiltreData( relation.ChampType + "=@1 and " + relation.ChampId + " in (" + strListeIds + ")", typeElements.ToString()); listeTypeId.Filtre = filtre; listeTypeId.PreserveChanges = true; result = DoDeleteInterneACObjetDonneeNePasUtiliserSansBonneRaison(listeTypeId, bDansContexteCourant); if (!result) { return(result); } } } } } } } List <CInfoRelation> relationsAMettreANull = new List <CInfoRelation>(); string strNomTable = CContexteDonnee.GetNomTableForType(liste.TypeObjets); foreach (CInfoRelation info in CContexteDonnee.GetListeRelationsTable(strNomTable)) { if (info.PasserLesFilsANullLorsDeLaSuppression && info.TableParente == strNomTable) { relationsAMettreANull.Add(info); } } //Met à null ce qui doit l'être for (int nBloc = 0; nBloc < nCount; nBloc += nTailleBloc) { int nMin = Math.Min(nBloc + nTailleBloc, nCount); StringBuilder bl = new StringBuilder(); for (int nElt = nBloc; nElt < nMin; nElt++) { if (((CObjetDonneeAIdNumerique)liste[nElt]).IsValide()) { bl.Append(((CObjetDonneeAIdNumerique)liste[nElt]).Id); bl.Append(','); } } bl.Remove(bl.Length - 1, 1); if (bl.Length > 0) { foreach (CInfoRelation relationToNull in relationsAMettreANull) { CListeObjetsDonnees lstFils = new CListeObjetsDonnees(liste.ContexteDonnee, CContexteDonnee.GetTypeForTable(relationToNull.TableFille)); lstFils.Filtre = new CFiltreData(relationToNull.ChampsFille[0] + " in(" + bl.ToString() + ")"); lstFils.Filtre.IgnorerVersionDeContexte = true; lstFils.Filtre.IntegrerLesElementsSupprimes = true; lstFils.PreserveChanges = true; foreach (CObjetDonnee fils in lstFils.ToArrayList()) { fils.Row.Row.BeginEdit(); foreach (string strChamp in relationToNull.ChampsFille) { fils.Row.Row[strChamp] = DBNull.Value; } fils.Row.Row.EndEdit(); } } } } foreach (CObjetDonneeAIdNumerique objet in liste.ToArrayList()) { try { if (objet.Row.RowState != DataRowState.Deleted && objet.Row.RowState != DataRowState.Detached) { objet.Row.Row.Sc2iDelete(); } } catch (Exception e) { result.EmpileErreur(new CErreurException(e)); return(result); } } return(result); }
//////////////////////////////////////////////////////////// public static CResultAErreur DeleteAvecCascadeSansControleDoncIlFautEtreSurDeSoi(CListeObjetsDonnees liste, bool bDansContexteCourant) { CResultAErreur result = CResultAErreur.True; bool bOldEnforce = liste.ContexteDonnee.EnforceConstraints; StringBuilder bl = new StringBuilder(); foreach (CObjetDonneeAIdNumerique objetTmp in liste) { if (objetTmp.IsValide()) { bl.Append(objetTmp.Id); bl.Append(','); } } if (bl.Length == 0) { return(result); } bl.Remove(bl.Length - 1, 1); if (IsUtiliseDansVersionFuture(liste, bl.ToString())) { result.EmpileErreur(I.T("Cannot delete these elements because they will be used in future versions|187")); return(result); } try { liste.ContexteDonnee.EnforceConstraints = false; if (liste.Count == 0) { return(result); } foreach (CObjetDonneeAIdNumerique objet in liste) { if (objet.IsValide()) { result = objet.MyCanDelete(); if (!result) { return(result); } } } Type typeElements = liste.TypeObjets; string strListeIds = ""; foreach (CObjetDonneeAIdNumerique objet in liste) { if (objet.IsValide()) { strListeIds += objet.Id.ToString() + ","; } } strListeIds = strListeIds.Substring(0, strListeIds.Length - 1); string strNomTable = CContexteDonnee.GetNomTableForType(liste.TypeObjets); foreach (CInfoRelation relation in CContexteDonnee.GetListeRelationsTable(strNomTable)) { if (relation.TableParente == strNomTable) { //Car la dépendance doit être lue pour la suppression CListeObjetsDonnees listeDep = liste.GetDependancesFilles(relation); result = DeleteAvecCascadeSansControleDoncIlFautEtreSurDeSoi(listeDep, bDansContexteCourant); if (!result) { return(result); } } } if (typeElements.GetCustomAttributes(typeof(NoRelationTypeIdAttribute), true).Length == 0) { //Peut-on supprimer les relationsTypeId foreach (RelationTypeIdAttribute relation in CContexteDonnee.RelationsTypeIds) { Type tpLiens = CContexteDonnee.GetTypeForTable(relation.TableFille); CListeObjetsDonnees listeTypeId = new CListeObjetsDonnees(liste.ContexteDonnee, tpLiens, false); CFiltreData filtre = new CFiltreData( relation.ChampType + "=@1 and " + relation.ChampId + " in (" + strListeIds + ")", typeElements.ToString()); listeTypeId.Filtre = filtre; listeTypeId.PreserveChanges = true; result = DeleteAvecCascadeSansControleDoncIlFautEtreSurDeSoi(listeTypeId, bDansContexteCourant); } } foreach (CObjetDonneeAIdNumerique objet in liste.ToArrayList()) { if (objet.IsValide()) { result = objet.DoDeleteInterneACObjetDonneeNePasUtiliserSansBonneRaison(bDansContexteCourant); if (!result) { return(result); } } } } catch (Exception e) { result.EmpileErreur(new CErreurException(e)); } finally { try { liste.ContexteDonnee.EnforceConstraints = bOldEnforce; } catch { if (liste.ContexteDonnee.HasErrors) { foreach (DataTable table in liste.ContexteDonnee.Tables) { if (table.HasErrors) { foreach (DataRow row in table.Rows) { if (row.HasErrors) { string strKey = ""; foreach (DataColumn col in table.PrimaryKey) { strKey += row[col].ToString() + "/"; } result.EmpileErreur("Error while deleting (" + table.TableName + "[" + strKey + "] : " + row.RowError); } } } } } } } return(result); }