private void SoitConcernePar(CListeObjetsDonnees lstEquips) { if (m_relationToEquipSpv == null) { foreach (CInfoRelation info in CContexteDonnee.GetListeRelationsTable(CEquipementLogique.c_nomTable)) { if (info.TableParente == CEquipementLogique.c_nomTable && info.TableFille == CSpvEquip.c_nomTable) { m_relationToEquipSpv = info; break; } } } lstEquips.GetDependances(m_relationToEquipSpv).AssureLectureFaite(); foreach (CEquipementLogique eqpt in lstEquips) { CSpvEquip spvEquip = new CSpvEquip(eqpt.ContexteDonnee); if (spvEquip.ReadIfExists(new CFiltreData(CSpvEquip.c_champSmtEquipementLogique_Id + "=@1", eqpt.Id), false)) { m_dicEquipementsSpvConcernant[spvEquip.Id] = true; } } lstEquips = lstEquips.GetDependances("EquipementsLogiquesContenus"); if (lstEquips.Count > 0) { SoitConcernePar(lstEquips); } }
//--------------------------------------------------------------------------- private CFormEditionStandard NewCFormEdition(CObjetDonneeAIdNumeriqueAuto objet, CListeObjetsDonnees liste) { if (m_strProprieteObjetAEditer.Trim() != "") { objet = (CObjetDonneeAIdNumeriqueAuto)CInterpreteurTextePropriete.GetValue(objet, m_strProprieteObjetAEditer); liste = liste.GetDependances(m_strProprieteObjetAEditer); } CFormEditionStandard frm = null; // YK 20/02/09 : On utilise ici le nouveau CFormFinder if (m_referenceForm == null) { m_referenceForm = CFormFinder.GetRefFormToEdit(m_typeObjet); } if (m_referenceForm != null) { frm = (CFormEditionStandard)m_referenceForm.GetForm(objet, liste); } if (frm != null) { if (AfterCreateFormEdition != null) { AfterCreateFormEdition(this, frm); } frm.AfterSuppression += new ObjetDonneeEventHandler(OnSuppressionDansFormEdition); frm.AfterValideModification += new ObjetDonneeEventHandler(OnValidationDansFormEdition); frm.AfterAnnulationModification += new ObjetDonneeEventHandler(OnAnnulationDansFormEdition); } return(frm); }
//------------------------------------------------------------------ public static CListeObjetsDonnees GetEntitesOrganisationnellesDirectementLiees(IObjetDonneeAIdNumerique objet) { CFiltreData filtre = new CFiltreData( CRelationElement_EO.c_champTypeElement + "=@1 and " + CRelationElement_EO.c_champIdElement + "=@2", objet.GetType().ToString(), objet.Id); CListeObjetsDonnees liste = new CListeObjetsDonnees(objet.ContexteDonnee, typeof(CRelationElement_EO)); liste.Filtre = filtre; return(liste.GetDependances("EntiteOrganisationnelle")); }
private void SoitConcernePar(CListeObjetsDonnees lstEquips) { foreach (CEquipementLogique eqpt in lstEquips) { m_dicEquipementsConcernant[eqpt.DbKey] = true; } lstEquips = lstEquips.GetDependances("EquipementsLogiquesContenus"); if (lstEquips.Count > 0) { SoitConcernePar(lstEquips); } }
private void SoitConcernePar(CListeObjetsDonnees lstEntitesSnmp) { foreach (CEntiteSnmp ett in lstEntitesSnmp) { m_dicEntitesSnmpConcernant[ett.DbKey] = true; } lstEntitesSnmp = lstEntitesSnmp.GetDependances("EntiteSnmpsFilles"); if (lstEntitesSnmp.Count > 0) { SoitConcernePar(lstEntitesSnmp); } }
public static CMemoryDb GetAlarmesAAfficher(int nIdSession) { using (CContexteDonnee ctx = new CContexteDonnee(nIdSession, true, false)) { CMemoryDb db = CMemoryDbPourSupervision.GetMemoryDb(ctx); //Catégories de masquage CListeObjetDonneeGenerique <CCategorieMasquageAlarme> lstCat = new CListeObjetDonneeGenerique <CCategorieMasquageAlarme>(ctx); foreach (CCategorieMasquageAlarme cat in lstCat) { CLocalCategorieMasquageAlarme local = cat.GetLocalCategorieForSupervision(db); } CListeObjetDonneeGenerique <CAlarme> lst = new CListeObjetDonneeGenerique <CAlarme>(ctx); lst.Filtre = new CFiltreData(CAlarme.c_champDateFin + " is null and " + CAlarme.c_champIdParent + " is null"); int nCount = 0; if (lst.Count == 0) { return(db); } CListeObjetsDonnees lstFilles = lst; while (ctx.Tables[CAlarme.c_nomTable].Rows.Count != nCount) { nCount = ctx.Tables[CAlarme.c_nomTable].Rows.Count; lstFilles = lstFilles.GetDependances("AlarmesFilles"); } lst = new CListeObjetDonneeGenerique <CAlarme>(ctx); lst.InterditLectureInDB = true; lst.ReadDependances("RelationsChampsCustom"); lst.Filtre = new CFiltreData(CAlarme.c_champIdParent + " is null"); CListeObjetDonneeGenerique <CTypeAlarme> lstTypes = new CListeObjetDonneeGenerique <CTypeAlarme>(ctx); lstTypes.AssureLectureFaite(); foreach (CAlarme alrm in lst) { CLocalAlarme newAlrm = alrm.GetLocalAlarme(db, true); } return(db); } }
public double GetValuationForDate(DateTime dt) { CListeObjetsDonnees lstValOp = Valorisations; CListeObjetsDonnees lstLot = lstValOp.GetDependances("LotValorisation"); if (lstValOp.Count == 0) { return(0); } lstLot.Tri = CLotValorisation.c_champDateLot; CLotValorisation lot = lstLot[0] as CLotValorisation; if (lot != null && lot.DateLot.Date.AddMinutes(-1) > dt)//Premier plus récent->premier { CValorisationElement val = lot.GetValorisation(this); if (val != null) { return(val.Valeur); } return(0); } lstLot.InterditLectureInDB = true; lstLot.Filtre = new CFiltreData(CLotValorisation.c_champDateLot + "<@1", dt.Date.AddDays(1)); lstLot.Tri = CLotValorisation.c_champDateLot; if (lstLot.Count > 0) { lot = lstLot[lstLot.Count - 1] as CLotValorisation; if (lot != null) { CValorisationElement val = lot.GetValorisation(this); if (val != null) { return(val.Valeur); } } } return(0); }
//Initialise la base des alarmes en cours avec les alarmes de la base et les acces concernant chaque élément private void LoadAlarmesEtLiensTransForElement(string strChampDansAcces, CDictionnaireConcerne dicConcernes) { //Récupère la relation entre CSpvLienAccesAlarme et CSpvLienAccesAlarmeRep if (m_relationFromLienAlarmeToLienAlarmeRep == null) { foreach (CInfoRelation relation in CContexteDonnee.GetListeRelationsTable(CSpvLienAccesAlarme.c_nomTable)) { if (relation.TableFille == CSpvLienAccesAlarme_Rep.c_nomTable && relation.TableParente == CSpvLienAccesAlarme.c_nomTable) { m_relationFromLienAlarmeToLienAlarmeRep = relation; break; } } } List <int> lstIdsElements = new List <int>(); lstIdsElements.AddRange(dicConcernes.Keys); int nSizePaquet = 100; for (int nPaquet = 0; nPaquet < lstIdsElements.Count; nPaquet += nSizePaquet) { int nMax = Math.Min(nPaquet + nSizePaquet, lstIdsElements.Count); StringBuilder bl = new StringBuilder(); for (int nId = 0; nId < nMax; nId++) { bl.Append(lstIdsElements[nId]); bl.Append(';'); } if (bl.Length > 0) { bl.Remove(bl.Length - 1, 1); //Charge tous les Liens d'alarme pour les éléments CListeObjetsDonnees lstLiensAccesAlarme = new CListeObjetsDonnees(m_contexteDonnee, typeof(CSpvLienAccesAlarme)); lstLiensAccesAlarme.Filtre = new CFiltreDataAvance(CSpvLienAccesAlarme.c_nomTable, CSpvAccesAlarme.c_nomTable + "." + strChampDansAcces + " in (" + bl.ToString() + ")"); lstLiensAccesAlarme.AssureLectureFaite(); // Chargement des acces correspondant CListeObjetsDonnees lstAcces = lstLiensAccesAlarme.GetDependances("AccesAlarmeOne"); lstAcces.InterditLectureInDB = true; CListeObjetsDonnees lstEtatAlarme = lstLiensAccesAlarme.GetDependances(m_relationFromLienAlarmeToLienAlarmeRep); lstEtatAlarme.Filtre = new CFiltreData(CSpvLienAccesAlarme_Rep.c_champALARM_ID + " is not null"); lstEtatAlarme.AssureLectureFaite(); lstEtatAlarme.InterditLectureInDB = true; // Chargement des données alarmes CListeObjetsDonnees listAlarmesDonnees = lstEtatAlarme.GetDependances("AlarmeDonnee"); listAlarmesDonnees.AssureLectureFaite(); listAlarmesDonnees.InterditLectureInDB = true; lstLiensAccesAlarme.InterditLectureInDB = true; lstEtatAlarme.InterditLectureInDB = true; foreach (CSpvAlarmeDonnee donneeAlarme in listAlarmesDonnees) { if (donneeAlarme != null) { CInfoAlarmeAffichee info = new CInfoAlarmeAffichee(donneeAlarme); //m_dicAlarmes[info.IdSpvEvtAlarme] = info; m_dicAlarmes[info.IdSpvAlarmeData] = info; StartAlarme(info); } } foreach (CSpvLienAccesAlarme lienAlarme in lstLiensAccesAlarme) { CSpvAcces acces = lienAlarme.AccesAlarmeOne; if (acces != null) { int?nId = acces.Row[strChampDansAcces] as int?; if (nId != null) { List <CInfoElementDeSchemaSupervise> lst = null; if (dicConcernes.TryGetValue(nId.Value, out lst)) { foreach (CInfoElementDeSchemaSupervise info in lst) { info.SetConcerneParAlarmes(); if (lienAlarme.MaskAdminDateMin != null && lienAlarme.MaskBriDateMin > DateTime.Now) { if (lienAlarme.MaskAdminDateMax == null || lienAlarme.MaskAdminDateMax < DateTime.Now) { info.SetMasquageAdministrateur(lienAlarme.Id, true); } } if (lienAlarme.MaskBriDateMin != null && lienAlarme.MaskBriDateMin > DateTime.Now) { if (lienAlarme.MaskBriDateMax == null || lienAlarme.MaskBriDateMax < DateTime.Now) { info.SetMasquageBrigadier(lienAlarme.Id, true); } } } } } } } if (m_infoSchemaRacine != null) { List <CInfoElementDeSchemaSupervise> lstTmp = new List <CInfoElementDeSchemaSupervise>(); m_infoSchemaRacine.RecalculeToutLeMasquage(lstTmp); } } } }
/// <summary> /// Enregistre dans la table m_tableCodesVisibles /// les ids des éléments qui peuvent être affichés /// </summary> private void PrepareFiltre() { if (m_filtre == null || !m_filtre.HasFiltre) { m_tableCodesVisibles = null; m_tableIdsElementsVisibles = null; return; } m_tableCodesVisibles = new Hashtable(2000, 0.5f); CListeObjetsDonnees liste = new CListeObjetsDonnees(CSc2iWin32DataClient.ContexteCourant, m_typeObjets); liste.Filtre = m_filtre; Hashtable tableTmp = new Hashtable(); if (typeof(IObjetHierarchiqueACodeHierarchique).IsAssignableFrom(m_typeObjets)) { foreach (IObjetHierarchiqueACodeHierarchique objet in liste) { string strCode = objet.CodeSystemeComplet; bool bForceTrue = true; while (strCode.Length > 0) { if (bForceTrue) { m_tableCodesVisibles[strCode] = true; } else if (!m_tableCodesVisibles.Contains(strCode)) { m_tableCodesVisibles[strCode] = false; } bForceTrue = false; strCode = strCode.Substring(0, strCode.Length - objet.NbCarsParNiveau); } } } else { m_tableIdsElementsSelectionnables.Clear(); string strChampParent = null; foreach (IObjetDonneeAutoReference objet in liste) { m_tableIdsElementsVisibles.Add(objet.Id); m_tableIdsElementsSelectionnables.Add(objet.Id); strChampParent = objet.ChampParent; } //lecture des parents if (strChampParent != null) { int nCount = liste.Count; CStructureTable structure = CStructureTable.GetStructure(m_typeObjets); CInfoRelation relToParent = null; foreach (CInfoRelation rel in structure.RelationsParentes) { if (rel.ChampsFille[0] == strChampParent && rel.TableParente == rel.TableFille) { relToParent = rel; } } CListeObjetsDonnees lst = liste.GetDependances(relToParent); while (lst.Count != 0) { foreach (IObjetDonneeAutoReference objet in lst) { m_tableIdsElementsVisibles.Add(objet.Id); } lst = lst.GetDependances(relToParent); } } } }
//------------------------------------------------------------------------ public double GetValuationForDate(DateTime dt, CValeurUnite quantite) { CListeObjetsDonnees lstValEqpt = Valorisations; CListeObjetsDonnees lstLot = lstValEqpt.GetDependances("LotValorisation"); double fQuantite = 1; if (quantite != null && Unite != null) { if (quantite.IUnite == null) { fQuantite = quantite.Valeur; } else { fQuantite = quantite.ConvertTo(Unite.GlobalId).Valeur; } } if (lstValEqpt.Count == 0) { return(0); } lstLot.Tri = CLotValorisation.c_champDateLot; CLotValorisation lot = lstLot[0] as CLotValorisation; if (lot != null && lot.DateLot.Date.AddMinutes(-1) > dt)//Premier plus récent->premier { CValorisationElement val = lot.GetValorisation(this); if (val != null) { return(val.Valeur * fQuantite); } return(0); } lstLot.InterditLectureInDB = true; lstLot.Filtre = new CFiltreData(CLotValorisation.c_champDateLot + "<@1", dt.Date.AddDays(1)); lstLot.Tri = CLotValorisation.c_champDateLot; if (lstLot.Count > 0) { lot = lstLot[lstLot.Count - 1] as CLotValorisation; if (lot != null) { CValorisationElement val = lot.GetValorisation(this); if (val != null) { CValeurUnite v = val.QuantiteEtUnite; IUnite monUnite = Unite; if (v != null && monUnite != null) { v = v.ConvertTo(monUnite.GlobalId); if (v.Valeur != 0) { return(val.Valeur / v.Valeur * fQuantite); } } return(val.Valeur * fQuantite); } } } return(0); }
//------------------------------------------------------------------ public static CListeObjetsDonnees GetQuantitesAssociees(IObjetDonneeAIdNumerique objet) { CListeObjetsDonnees lst = GetRelationsSelections(objet); return(lst.GetDependances("Besoin")); }
//---------------------------------------------------------------------------------- public virtual CResultAErreur InsertDataInDataSet( IEnumerable list, DataSet ds, ITableExport tableParente, int[] nValeursCle, RelationAttribute relationToObjetParent, IElementAVariablesDynamiquesAvecContexteDonnee elementAVariablePourFiltres, CCacheValeursProprietes cacheValeurs, ITableExport tableFilleANePasCharger, bool bAvecOptimisation, CConteneurIndicateurProgression indicateur) { CResultAErreur result = CResultAErreur.True; if (NePasCalculer) { return(result); } if (tableParente != null && nValeursCle.Length == 0) { return(result); } DataTable table = ds.Tables[NomTable]; if (table == null) { result.EmpileErreur(I.T("Table @1 doesn't exist|116", NomTable)); return(result); } indicateur.SetInfo(I.T("Table @1|115", NomTable)); if (nValeursCle.Length > 1 && relationToObjetParent == null) { result.EmpileErreur(I.T("Error: Multiple child table loading without knowing the relation indicating how the parental link is established|117")); return(result); } DataColumn colFilleDeContrainte = null; DataTable tableFilleDeContrainte = null; if (tableParente != null) { if (ChampOrigine.TypeDonnee.IsArrayOfTypeNatif || !bAvecOptimisation || ChampOrigine is CDefinitionProprieteDynamiqueThis) { //On est dans une relation fille foreach (Constraint constraint in table.Constraints) { if (constraint is ForeignKeyConstraint) { ForeignKeyConstraint fkConst = (ForeignKeyConstraint)constraint; if (fkConst.RelatedTable.TableName == tableParente.NomTable) { colFilleDeContrainte = fkConst.Columns[0]; break; } } } tableFilleDeContrainte = table; } else { //On est dans une relation parente DataTable tblP = ds.Tables[tableParente.NomTable]; foreach (Constraint contraint in tblP.Constraints) { if (contraint is ForeignKeyConstraint) { ForeignKeyConstraint fk = (ForeignKeyConstraint)contraint; if (fk.RelatedTable.TableName == table.TableName) { colFilleDeContrainte = fk.Columns[0]; tableFilleDeContrainte = tblP; break; } } } } } if (list == null) { return(result); } //Désactive les ids auto sur les objetDonneeAIdNumerique. //Car on utilise alors les valeurs de clé des éléments bool bUtiliserIdObjets = false; if (bAvecOptimisation && (ChampOrigine == null || ChampOrigine.NomPropriete.IndexOf('.') < 0 || !ChampOrigine.TypeDonnee.IsArrayOfTypeNatif)) { if (list is CListeObjetsDonnees && (tableParente == null || colFilleDeContrainte == null)) { if (typeof(CObjetDonneeAIdNumerique).IsAssignableFrom(((CListeObjetsDonnees)list).TypeObjets)) { table.PrimaryKey[0].AutoIncrement = false; bUtiliserIdObjets = true; } } if (list is ArrayList) { ArrayList arrL = (ArrayList)list; if (arrL.Count > 0 && typeof(CObjetDonneeAIdNumerique).IsAssignableFrom(arrL[0].GetType())) { table.PrimaryKey[0].AutoIncrement = false; bUtiliserIdObjets = true; } } } if (FiltreAAppliquer != null) { CListeObjetsDonnees listeObjetsDonnee = list as CListeObjetsDonnees; if (listeObjetsDonnee == null)//Tente de convertir en liste d'objets { //Récupère le contexte de données CContexteDonnee ctx = null; foreach (object obj in list) { IObjetAContexteDonnee objACtx = obj as IObjetAContexteDonnee; if (objACtx != null) { ctx = objACtx.ContexteDonnee; break; } } listeObjetsDonnee = CListeObjetsDonnees.CreateListFrom(ctx, list); } if (listeObjetsDonnee != null) { list = listeObjetsDonnee; result = GetFiltreDataAAppliquer(elementAVariablePourFiltres); if (!result) { result.EmpileErreur(I.T("Error in the filter of the table @1|119", NomTable)); return(result); } try { if (result.Data != null) { listeObjetsDonnee.Filtre = CFiltreData.GetAndFiltre(listeObjetsDonnee.Filtre, (CFiltreData)result.Data); } } catch (Exception e) { result.EmpileErreur(new CErreurException(e)); result.EmpileErreur(I.T("Error during combination of table @1 filter|120", NomTable)); return(result); } } } //Table fille-> //si relation : Attribut relation (parente) représentant le lien entre la relation fille et cette tablle //Si donnée cumulée : true Hashtable tableTablesFillesToDependanceDirecte = new Hashtable(); //Table parente->Champ fille contenant l'id Hashtable tableParentsCharges = new Hashtable(); #region Optimisations des CListeObjetsDonnees if (bAvecOptimisation && list is CListeObjetsDonnees) { CListeObjetsDonnees listeObjets = (CListeObjetsDonnees)list; if (bUtiliserIdObjets) { #region Identifie les tables filles qui peuvent être remplies en une seule requête. //Identifie les sous tables qui peuvent être chargées en une seule fois : //Il s'agit des sous tables liée directement à une propriété par //des relations (attribut RelationFille ou Relation). foreach (ITableExport tableFille in TablesFilles) { Type tpAnalyse = listeObjets.TypeObjets; if (tableFille != tableFilleANePasCharger && (tableFille is C2iTableExportATableFille || tableFille is C2iTableExportCumulee)) { if (tableFille.ChampOrigine is CDefinitionProprieteDynamiqueDonneeCumulee) { tableTablesFillesToDependanceDirecte[tableFille] = true; } else if (tableFille.ChampOrigine is CDefinitionProprieteDynamiqueRelationTypeId) { tableTablesFillesToDependanceDirecte[tableFille] = true; } else if (tableFille.ChampOrigine is CDefinitionProprieteDynamiqueThis) { tableTablesFillesToDependanceDirecte[tableFille] = true; } else if (tableFille.ChampOrigine != null) { string strPropOrigine = tableFille.ChampOrigine.NomProprieteSansCleTypeChamp; if (strPropOrigine.IndexOf('.') < 0) { //Seules les propriétés directes sont optimisées (pour le moment et peut être que ça suffit) PropertyInfo info = tpAnalyse.GetProperty(strPropOrigine); if (info != null) { object[] attribs = info.GetCustomAttributes(typeof(RelationFilleAttribute), true); if (attribs.Length > 0) { RelationFilleAttribute attrFille = (RelationFilleAttribute)attribs[0]; tpAnalyse = attrFille.TypeFille; if (typeof(CObjetDonneeAIdNumerique).IsAssignableFrom(tpAnalyse)) { info = tpAnalyse.GetProperty(attrFille.ProprieteFille); if (info != null) { attribs = info.GetCustomAttributes(typeof(RelationAttribute), true); if (attribs.Length > 0) { RelationAttribute attrParent = (RelationAttribute)attribs[0]; if (attrParent.ChampsFils.Length == 1) { tableTablesFillesToDependanceDirecte[tableFille] = attrParent; } } } } } } } } } } #endregion #region Charges les tables parentes qui peuvent être chargées if (typeof(CObjetDonneeAIdNumerique).IsAssignableFrom(listeObjets.TypeObjets)) { string strNomTableFille = listeObjets.NomTable; foreach (ITableExport tableParenteAOptimiser in TablesFilles) { if (tableParenteAOptimiser != tableFilleANePasCharger && tableParenteAOptimiser.ChampOrigine != null && !tableParenteAOptimiser.ChampOrigine.TypeDonnee.IsArrayOfTypeNatif) { if (IsOptimisable(tableParenteAOptimiser, TypeSource)) { CListeObjetsDonnees listeMere = listeObjets.GetDependances(tableParenteAOptimiser.ChampOrigine.NomProprieteSansCleTypeChamp); if (listeMere != null) { result = tableParenteAOptimiser.InsertDataInDataSet( listeMere, ds, null, 0, elementAVariablePourFiltres, cacheValeurs, this, true, indicateur); if (!result) { return(result); } //Trouve le champ fille de lien foreach (Constraint contrainte in table.Constraints) { if (contrainte is ForeignKeyConstraint) { ForeignKeyConstraint fk = (ForeignKeyConstraint)contrainte; if (fk.RelatedTable.TableName == tableParenteAOptimiser.NomTable) { tableParentsCharges[tableParenteAOptimiser] = fk.Columns[0].ColumnName; break; } } } } } } } } #endregion } #region Identification des dépendances if (m_strDependancesToOptim == null) { Hashtable tableDependances = new Hashtable(); AddProprietesOrigineDesChampsToTable(tableDependances, "", listeObjets.ContexteDonnee); foreach (ITableExport tableFille in TablesFilles) { if (tableFille != tableFilleANePasCharger && !tableTablesFillesToDependanceDirecte.Contains(tableFille) && !tableParentsCharges.Contains(tableFille)) { string strChemin = ""; if (ChampOrigine != null) { strChemin = ChampOrigine.NomPropriete; } if (tableFille.FiltreAAppliquer == null) { tableFille.AddProprietesOrigineDesChampsToTable(tableDependances, strChemin, listeObjets.ContexteDonnee); } } } m_strDependancesToOptim = new string[tableDependances.Count]; int nDep = 0; foreach (string strOrigine in tableDependances.Keys) { m_strDependancesToOptim[nDep++] = strOrigine; } } #endregion } #endregion indicateur.SetInfo(I.T("Table @1|115", NomTable)); CFiltreData filtreDeBase = null; if (list is CListeObjetsDonnees) { filtreDeBase = ((CListeObjetsDonnees)list).Filtre; } ArrayList listeIds = new ArrayList(); string strColonneCle = table.PrimaryKey[0].ColumnName; indicateur.SetBornesSegment(0, nValeursCle.Length); indicateur.SetValue(0); //Lecture par paquets de 1000 clés for (int n = 0; n < nValeursCle.Length; n += c_nNbLectureParLotFils) { if (bAvecOptimisation && (list is CListeObjetsDonnees) && relationToObjetParent != null) { CListeObjetsDonnees listeObjets = (CListeObjetsDonnees)list; StringBuilder blCles = new StringBuilder(); char cSepIn = ','; if (filtreDeBase is CFiltreDataAvance) { cSepIn = ';'; } for (int nCle = n; nCle < Math.Min(n + c_nNbLectureParLotFils, nValeursCle.Length); nCle++) { blCles.Append(nValeursCle[nCle]); blCles.Append(cSepIn); } if (blCles.Length > 0) { blCles.Remove(blCles.Length - 1, 1); string strCles = blCles.ToString(); if (filtreDeBase is CFiltreDataAvance) { listeObjets.Filtre = CFiltreData.GetAndFiltre( filtreDeBase, new CFiltreDataAvance( listeObjets.NomTable, relationToObjetParent.ChampsFils[0] + " in {" + strCles + "}")); } else { listeObjets.Filtre = CFiltreData.GetAndFiltre( filtreDeBase, new CFiltreData( relationToObjetParent.ChampsFils[0] + " in (" + strCles.Replace(';', ',') + ")")); } } } if (indicateur.CancelRequest) { result.EmpileErreur(I.T("Execution cancelled by the user|118")); return(result); } if (list is CListeObjetsDonnees && m_strDependancesToOptim != null && m_strDependancesToOptim.Length > 0) { ((CListeObjetsDonnees)list).ReadDependances(m_strDependancesToOptim); } int nCountTotal = 1; if (list is IList) { nCountTotal = ((IList)list).Count; } else if (list is Array) { nCountTotal = ((Array)list).Length; } indicateur.PushSegment(n, Math.Min(n + c_nNbLectureParLotFils, nValeursCle.Length)); int nNbElements = 0; indicateur.SetBornesSegment(0, nCountTotal); int nFrequence = Math.Min(nCountTotal / 20, 500) + 1; CSessionClient session = CSessionClient.GetSessionUnique(); IInfoUtilisateur infoUser = session != null?session.GetInfoUtilisateur() : null; ///AJOUT DES LIGNES DANS LA TABLE foreach (object obj in list) { CRestrictionUtilisateurSurType restriction = null; if (infoUser != null && obj != null) { restriction = infoUser.GetRestrictionsSur(obj.GetType(), obj is IObjetAContexteDonnee?((IObjetAContexteDonnee)obj).ContexteDonnee.IdVersionDeTravail:null); } nNbElements++; if (nNbElements % nFrequence == 0) { indicateur.SetValue(nNbElements); if (indicateur.CancelRequest) { result.EmpileErreur(I.T("Execution cancelled by the user|118")); return(result); } } bool bShouldImporte = true; DataRow row = null; if (bUtiliserIdObjets) { row = table.Rows.Find(((CObjetDonneeAIdNumerique)obj).Id); bShouldImporte = row == null; } if (bShouldImporte) { row = table.NewRow(); if (bUtiliserIdObjets) { int nId = ((CObjetDonneeAIdNumerique)obj).Id; row[strColonneCle] = nId; listeIds.Add(nId); } //Ajoute les valeurs de champs propres à cette table result = InsereValeursChamps(obj, row, cacheValeurs, restriction); if (!result) { return(result); } if (colFilleDeContrainte != null && nValeursCle.Length > 0) { DataRow rowFille = row; if (tableFilleDeContrainte == table) { if (relationToObjetParent == null) { rowFille[colFilleDeContrainte] = nValeursCle[0]; } else { rowFille[colFilleDeContrainte] = ((CObjetDonnee)obj).Row[relationToObjetParent.ChampsFils[0]]; } } } table.Rows.Add(row); } //Dans tous les cas, met à jour la table dépendante si besoin est ! if (colFilleDeContrainte != null && nValeursCle.Length > 0) { DataRow rowFille = row; if (tableFilleDeContrainte != table) { rowFille = tableFilleDeContrainte.Rows.Find(nValeursCle[0]); rowFille[colFilleDeContrainte] = row[strColonneCle]; } } if (bShouldImporte) { //AJout des données des sous tables non optimisées foreach (ITableExport tbl in TablesFilles) { if (tbl.ChampOrigine != null && !tableTablesFillesToDependanceDirecte.Contains(tbl) && tbl != tableFilleANePasCharger) { bool bChildIsOptimisable = IsOptimisable(tbl, TypeSource); //Impossible de lire en direct object objet = null; if (tbl.ChampOrigine is CDefinitionProprieteDynamiqueThis) { objet = obj; } else { objet = CInterpreteurProprieteDynamique.GetValue(obj, tbl.ChampOrigine, cacheValeurs).Data; } string strNomCol = (string)tableParentsCharges[tbl]; if (strNomCol != null) { if (objet != null) { row[strNomCol] = ((CObjetDonneeAIdNumerique)objet).Id; } else { row[strNomCol] = DBNull.Value; } } else { indicateur.PushSegment(nNbElements, nNbElements + 1); if (objet != null) { IEnumerable tempList; if (objet is IEnumerable) { tempList = (IEnumerable)objet; } else { ArrayList listeObjetUnique = new ArrayList(); listeObjetUnique.Add(objet); tempList = listeObjetUnique; } if (tempList != null) { result = tbl.InsertDataInDataSet( tempList, ds, this, (int)row[table.PrimaryKey[0]], elementAVariablePourFiltres, cacheValeurs, this, bChildIsOptimisable, indicateur); if (!result) { return(result); } } } indicateur.PopSegment(); } } } //vide le cache après chaque objet de la table principale if (tableParente == null) { cacheValeurs.ResetCache(); } } } indicateur.PopSegment(); } indicateur.SetValue(nValeursCle.Length); ///Chargement des relations optimisées int nTable = 0; foreach (DictionaryEntry entry in tableTablesFillesToDependanceDirecte) { nTable++; ITableExport tableFille = (ITableExport)entry.Key; if (tableFille.ChampOrigine is CDefinitionProprieteDynamiqueDonneeCumulee) { CDefinitionProprieteDynamiqueDonneeCumulee defCum = (CDefinitionProprieteDynamiqueDonneeCumulee)tableFille.ChampOrigine; //Trouve les données cumulées correspondants aux éléments CListeObjetsDonnees listeInit = (CListeObjetsDonnees)list; CTypeDonneeCumulee typeCumule = new CTypeDonneeCumulee(listeInit.ContexteDonnee); if (!typeCumule.ReadIfExists( defCum.DbKeyTypeDonnee)) { result.EmpileErreur(I.T("The cumulated data type @1 doesn't exist|122", defCum.DbKeyTypeDonnee.ToString())); return(result); } RelationAttribute attr = typeCumule.GetRelationAttributeToType(listeInit.TypeObjets); string strChampIdOuDbKey = ""; if (defCum.DbKeyTypeDonnee.IsNumericalId()) { strChampIdOuDbKey = CTypeDonneeCumulee.c_champId; } else { strChampIdOuDbKey = CObjetDonnee.c_champIdUniversel; } CListeObjetsDonnees listeFils = new CListeObjetsDonnees( listeInit.ContexteDonnee, typeof(CDonneeCumulee), new CFiltreData(strChampIdOuDbKey + " = @1 ", defCum.DbKeyTypeDonnee.GetValeurInDb())); listeFils.ModeSansTri = true; //Optimisation pour ne pas utiliser de dataview result = tableFille.InsertDataInDataSet( listeFils, ds, this, (int[])listeIds.ToArray(typeof(int)), attr, elementAVariablePourFiltres, cacheValeurs, this, true, indicateur); if (!result) { return(result); } } else if (tableFille.ChampOrigine is CDefinitionProprieteDynamiqueRelationTypeId) { CDefinitionProprieteDynamiqueRelationTypeId defTypeId = (CDefinitionProprieteDynamiqueRelationTypeId)tableFille.ChampOrigine; RelationTypeIdAttribute relTpIdAttr = defTypeId.Relation; //Trouve les données cumulées correspondants aux éléments CListeObjetsDonnees listeInit = (CListeObjetsDonnees)list; if (listeInit.Count != 0) { CListeObjetsDonnees listeFils = new CListeObjetsDonnees( listeInit.ContexteDonnee, CContexteDonnee.GetTypeForTable(relTpIdAttr.TableFille), new CFiltreData(relTpIdAttr.ChampType + "=@1", listeInit.TypeObjets.ToString())); listeFils.ModeSansTri = true; //Optimisation pour ne pas utiliser de dataview RelationAttribute attrTmp = new RelationAttribute( listeInit.NomTable, ((CObjetDonneeAIdNumerique)listeInit[0]).GetChampId(), relTpIdAttr.ChampId, false, false); result = tableFille.InsertDataInDataSet( listeFils, ds, this, (int[])listeIds.ToArray(typeof(int)), attrTmp, elementAVariablePourFiltres, cacheValeurs, this, true, indicateur); if (!result) { return(result); } } } else if (tableFille.ChampOrigine is CDefinitionProprieteDynamiqueThis) { CListeObjetsDonnees listeInit = new CListeObjetsDonnees( ((CListeObjetsDonnees)list).ContexteDonnee, tableFille.ChampOrigine.TypeDonnee.TypeDotNetNatif, true); listeInit.ModeSansTri = true; //Optimisation pour ne pas utiliser de dataview string strChampId = listeInit.ContexteDonnee.GetTableSafe(CContexteDonnee.GetNomTableForType(listeInit.TypeObjets)).PrimaryKey[0].ColumnName; RelationAttribute attrTmp = new RelationAttribute( listeInit.NomTable, strChampId, strChampId, false, false); //Copie les clés dans la clé et dans la valeur de champ externe result = tableFille.InsertDataInDataSet( listeInit, ds, this, (int[])listeIds.ToArray(typeof(int)), attrTmp, elementAVariablePourFiltres, cacheValeurs, this, true, indicateur); if (!result) { return(result); } } else if (tableFille.ChampOrigine != null) { RelationAttribute attr = (RelationAttribute)entry.Value; CListeObjetsDonnees listeFils = new CListeObjetsDonnees( ((CListeObjetsDonnees)list).ContexteDonnee, tableFille.ChampOrigine.TypeDonnee.TypeDotNetNatif, true); listeFils.ModeSansTri = true; //Optimisation pour ne pas utiliser de dataview result = tableFille.InsertDataInDataSet( listeFils, ds, this, (int[])listeIds.ToArray(typeof(int)), attr, elementAVariablePourFiltres, cacheValeurs, this, true, indicateur); if (!result) { return(result); } } else { result = tableFille.InsertDataInDataSet( null, ds, this, (int[])listeIds.ToArray(typeof(int)), null, elementAVariablePourFiltres, cacheValeurs, this, true, indicateur); if (!result) { return(result); } } } return(result); }
public void InitFromSchema(CSchemaReseau schema) { m_nIdSchemaReseau = schema.Id; m_schema = schema; CSpvSchemaReseau schemaSPV = CSpvSchemaReseau.GetObjetSpvFromObjetTimos(schema); if (schemaSPV != null) { m_nIdSchemaReseauSpv = schemaSPV.Id; } CListeObjetsDonnees lstElements = schema.ElementsDeSchema; lstElements.ReadDependances( "SchemaReseauInclu", "SchemaReseauContenu"); //Charge les données SPV AssureRelationsToSpv(); CListeObjetsDonnees lstTmp = lstElements.GetDependances("Site"); lstTmp.GetDependances(m_relationFromSiteSpvToSite).AssureLectureFaite(); lstTmp = lstElements.GetDependances("EquipementLogique"); lstTmp.GetDependances(m_relationFromEquipementSpvToEquipement).AssureLectureFaite(); lstTmp = lstElements.GetDependances("LienReseau"); lstTmp.GetDependances(m_relationFromLiaisonSpvToLiaison).AssureLectureFaite(); //CSpvService service = CSpvService.GetObjetSpvFromObjetTimos(schema); foreach (CElementDeSchemaReseau elt in lstElements) { IElementDeSchemaReseau elementFils = elt.ElementAssocie; if (elementFils != null) { CInfoElementDeSchemaSupervise fils = null; if (elementFils is CSite) { fils = new CInfoSiteDeSchemaSupervise(this, elt, m_base, NiveauProfondeur + 1); } if (elementFils is CLienReseau) { fils = new CInfoLienDeSchemaSupervise(this, elt, m_base, NiveauProfondeur + 1); } if (elementFils is CElementDeSchemaReseau) { fils = new CInfoEquipementDeSchemaSupervise(this, elt, m_base, NiveauProfondeur + 1); } if (elementFils is CSchemaReseau) { fils = new CInfoSchemaDeSchemaSupervise(this, elt, m_base, NiveauProfondeur + 1); } if (elementFils is CEquipementLogique) { fils = new CInfoEquipementDeSchemaSupervise(this, elt, m_base, NiveauProfondeur + 1); } if (elementFils != null) { fils.InitFromElementDeSchema(elt); m_listeFils.Add(fils); } } } PrepareSupervisionEtatOperationnel(schema); CalculArbreOperationnel(); }
//------------------------------------------------------------------ public static CListeObjetsDonnees GetBesoinsSatisfaits(ISatisfactionBesoin satisfaction) { CListeObjetsDonnees lst = GetRelationsBesoinsSatisfaits(satisfaction); return(lst.GetDependances("Besoin")); }