//---------------------------------------------------- private void GereHierarchie( CContexteDonnee ctxEdit, CLocalAlarme alarme, CMappageIdsAlarmes dicMapIds, HashSet <string> alarmesTraitees, CAlarme alarmeParente) { if (alarmesTraitees.Contains(alarme.Id)) { return; } CAlarme alarmeInDb = new CAlarme(ctxEdit); bool bExiste = false; string strIdAlarme = alarme.Id; if (alarmeInDb.ReadIfExists(new CFiltreData(CAlarme.c_champAlarmId + "=@1", strIdAlarme))) { bExiste = true; } else if (dicMapIds.TryGetValue(alarme.Id, out strIdAlarme)) { if (alarmeInDb.ReadIfExists(new CFiltreData(CAlarme.c_champAlarmId + "=@1", strIdAlarme))) { bExiste = true; } } else { strIdAlarme = alarme.Id; } if (!bExiste) { if (alarmeInDb.ReadIfExists( new CFiltreData(CAlarme.c_champCle + "=@1 and " + CAlarme.c_champDateFin + " is null", alarme.GetKey()))) { bExiste = true; } } if (!bExiste) { alarmeInDb.CreateNewInCurrentContexte(); } else { strIdAlarme = alarmeInDb.AlarmId; } alarmesTraitees.Add(alarme.Id); alarmeInDb.AlarmeParente = alarmeParente; alarmeInDb.FillFromLocalAlarmeFromMediation(alarme); alarmeInDb.AlarmId = strIdAlarme; if (alarmeInDb.AlarmId != alarme.Id) { dicMapIds[alarme.Id] = alarmeInDb.AlarmId; alarme.Id = alarmeInDb.AlarmId; } foreach (CLocalAlarme alarmeFille in alarme.Childs) { GereHierarchie(ctxEdit, alarmeFille, dicMapIds, alarmesTraitees, alarmeInDb); } }
public CResultAErreurType <CMappageIdsAlarmes> Traite(CMemoryDb dbContenantLesAlarmesATraiter) { CResultAErreurType <CMappageIdsAlarmes> result = new CResultAErreurType <CMappageIdsAlarmes>(); result.SetTrue(); CResultAErreur resErreur = CResultAErreur.True; try { lock (typeof(CLockerTraitementAlarme)) { resErreur = AssureSessionEtContexte(); if (!resErreur) { result.EmpileErreur(resErreur.Erreur); return(result); } CListeEntitesDeMemoryDb <CLocalAlarme> lstAlarmes = new CListeEntitesDeMemoryDb <CLocalAlarme>(dbContenantLesAlarmesATraiter); lstAlarmes.Filtre = new CFiltreMemoryDb(CMemoryDb.c_champIsToRead + "=@1", false); lstAlarmes.Sort = CLocalAlarme.c_champDateDebut; //Mappage des ids pour les alarmes qui changent d'ID m_nNbAlarmesTraitees += lstAlarmes.Count(); CMappageIdsAlarmes dicMapIds = new CMappageIdsAlarmes(); HashSet <string> alarmesTraitees = new HashSet <string>(); using (CContexteDonnee ctxEdit = m_contexteDonnee.GetContexteEdition()) { ctxEdit.EnableTraitementsExternes = false; ctxEdit.DisableHistorisation = true; try { foreach (CLocalAlarme alrm in lstAlarmes) { if (!alarmesTraitees.Contains(alrm.Id)) { CLocalAlarme root = alrm; while (root.Parent != null && !root.Parent.IsToRead()) { root = root.Parent; } GereHierarchie(ctxEdit, root, dicMapIds, alarmesTraitees, null); } } result.DataType = dicMapIds; } catch (Exception e) { result.EmpileErreur(new CErreurException(e)); } finally { if (result) { resErreur = SauvegardeOptimisee(ctxEdit); if (!resErreur) { result.EmpileErreur(resErreur.Erreur); } } else { ctxEdit.CancelEdit(); } } } } } catch (Exception e) { { C2iEventLog.WriteErreur(I.T("Error in Alarms @1|20156", e.ToString())); } } finally { } Console.WriteLine("Alarmes traitées : " + m_nNbAlarmesTraitees + " à " + DateTime.Now.ToString("HH:mm:ss")); return(result); }