//----------------------------------------------------------- protected override CResultAErreur GetDatasHorsCalculees(CListeQuerySource sources) { CResultAErreur result = CResultAErreur.True; m_table.AcceptChanges(); result.Data = m_table; return(result); }
//------------------------------------------------------- protected override CResultAErreur GetDatasHorsCalculees(CListeQuerySource sources) { CEasyQuery query = Query; CResultAErreur result = CResultAErreur.True; if (result && TypeSource == null) { result.EmpileErreur(I.T("###Table object must be specified |")); } if (query == null || sources == null) { result.EmpileErreur(I.T("###Query needs a source to provide datas|")); } C2iRequeteAvancee requete = new C2iRequeteAvancee(); requete.TableInterrogee = CContexteDonnee.GetNomTableForType(TypeSource); result = FiltreDynamique.GetFiltreData(); if (!result) { return(result); } if (result.Data is CFiltreData) { requete.FiltreAAppliquer = result.Data as CFiltreData; } foreach (IColumnDeEasyQuery col in Columns) { CColumnDeEasyQueryChampDeRequete colR = col as CColumnDeEasyQueryChampDeRequete; requete.ListeChamps.Add(colR); } DataTable table = null; if (requete.ListeChamps.Count > 0) { result = requete.ExecuteRequete(CContexteDonneeSysteme.GetInstance().IdSession); if (!result) { result.EmpileErreur(I.T("###Error on table @1|")); return(result); } table = result.Data as DataTable; } else { table = new DataTable(); } table.TableName = NomFinal; return(result); }
//------------------------------------------- public void Init(CListeQuerySource sources) { m_sources = sources; m_imageList = new ImageList(); m_dicImageKeyToImageNum.Clear(); foreach (KeyValuePair <string, Image> kv in CEasyQuerySource.ToutesImages) { int nNum = m_imageList.Images.Count; m_imageList.Images.Add(kv.Value); m_dicImageKeyToImageNum[kv.Key] = nNum; } ImageList = m_imageList; RefreshTree(); }
//------------------------------------------------------- protected override CResultAErreur GetDatasHorsCalculees(CListeQuerySource sources) { CEasyQuery query = Query; CResultAErreur result = CResultAErreur.True; if (query == null || sources == null) { result.EmpileErreur(I.T("Table @1 needs a source to provide datas|20001", NomFinal)); return(result); } CEasyQuerySource source = sources.GetSourceFromId(TableDefinition.SourceId); CDataHotelConnexion hotelConnexion = source != null ? source.Connexion as CDataHotelConnexion : null; if (hotelConnexion == null) { result.EmpileErreur(I.T("No connection for table @1|20006", NomFinal)); return(result); } CTableDefinitionDataHotel tableHotel = m_definitionTable as CTableDefinitionDataHotel; if (tableHotel == null) { result.EmpileErreur(I.T("Table @1 can not be calculated. A DataHotel table should be used as source|20002", NomFinal)); return(result); } DateTime?dateDebut = null; DateTime?dateFin = null; CContexteEvaluationExpression ctxEval = new CContexteEvaluationExpression(Query); if (m_formuleDateDebut != null) { result = m_formuleDateDebut.Eval(ctxEval); if (!result) { result.EmpileErreur(I.T("Error on start date formula in table @1|20003", NomFinal)); } else { dateDebut = result.Data as DateTime?; } } if (m_formuleDateFin != null) { result = m_formuleDateFin.Eval(ctxEval); if (!result) { result.EmpileErreur(I.T("Error on end date formula in table @1|20004", NomFinal)); } else { dateFin = result.Data as DateTime?; } } if (dateDebut == null || dateFin == null) { result.EmpileErreur(I.T("Both start date and end date must be set for table @1|20005", NomFinal)); } if (!result) { return(result); } List <string> lstIdsEntites = new List <string>(); if (SourceEntites != null) { lstIdsEntites.AddRange(SourceEntites.GetListeIdsEntites(Query)); } ITestDataHotel test = null; //Calcule le filtre if (m_filtre != null) { test = m_filtre.GetTestFinal(Query); } CDataHotelQuery hotelQuery = new CDataHotelQuery(); hotelQuery.TableId = tableHotel.Id; hotelQuery.DateDebut = dateDebut.Value; hotelQuery.DateFin = dateFin.Value; hotelQuery.EntitiesId.AddRange(lstIdsEntites); hotelQuery.Filtre = test; List <string> lstIdsColonnes = new List <string>(); List <IChampHotelCalcule> lstCalcs = new List <IChampHotelCalcule>(); foreach (IColumnDeEasyQuery col in m_listeColonnes) { CColumnEQFromSource colFromSource = col as CColumnEQFromSource; if (colFromSource != null) { lstIdsColonnes.Add(colFromSource.IdColumnSource); } CColonneCalculeeDataHotel colCalc = col as CColonneCalculeeDataHotel; if (colCalc != null) { if (colCalc.Calcul != null) { IChampHotelCalcule champHotelCalc = colCalc.Calcul.GetChampHotel(Query); if (champHotelCalc != null) { champHotelCalc.NomChampFinal = colCalc.ColumnName; lstCalcs.Add(champHotelCalc); } } } } hotelQuery.ChampsId = lstIdsColonnes; hotelQuery.ChampsCalcules = lstCalcs; DataTable tableResult = hotelConnexion.GetData(tableHotel, hotelQuery); if (tableResult != null) { Dictionary <string, IColumnDeEasyQuery> colNameSourceToDestCol = new Dictionary <string, IColumnDeEasyQuery>(); foreach (IColumnDeEasyQuery col in m_listeColonnes) { CColumnEQFromSource cs = col as CColumnEQFromSource; if (cs != null) { IColumnDefinition def = tableHotel.GetColumn(cs.IdColumnSource); if (def != null) { colNameSourceToDestCol[def.ColumnName] = col; } } } foreach (DataColumn col in tableResult.Columns) { IColumnDeEasyQuery colThis = null; if (colNameSourceToDestCol.TryGetValue(col.ColumnName, out colThis)) { col.ColumnName = colThis.ColumnName; } } } result.Data = tableResult; return(result); }
//------------------------------------------------------- protected override CResultAErreur GetDatasHorsCalculees(CListeQuerySource sources) { CResultAErreur result = CResultAErreur.True; if (sources == null) { result.EmpileErreur(I.T("Table @1 needs a source to provide datas|20001", NomFinal)); return(result); } CEasyQuerySource source = sources.GetSourceFromId(TableDefinition.SourceId); CDataHotelConnexion hotelConnexion = source != null ? source.Connexion as CDataHotelConnexion : null; if (hotelConnexion == null) { result.EmpileErreur(I.T("No connection for table @1|20006", NomFinal)); return(result); } CTableDefinitionEntitiesDataHotel tableHotel = m_definitionTable as CTableDefinitionEntitiesDataHotel; if (tableHotel == null) { result.EmpileErreur(I.T("Table @1 can not be calculated. A DataHotel table should be used as source|20002", NomFinal)); return(result); } DateTime?dateDebut = null; DateTime?dateFin = null; CContexteEvaluationExpression ctxEval = new CContexteEvaluationExpression(Query); if (m_formuleDateDebut != null) { result = m_formuleDateDebut.Eval(ctxEval); if (!result) { result.EmpileErreur(I.T("Error on start date formula in table @1|20003", NomFinal)); } else { dateDebut = result.Data as DateTime?; } } if (m_formuleDateFin != null) { result = m_formuleDateFin.Eval(ctxEval); if (!result) { result.EmpileErreur(I.T("Error on end date formula in table @1|20004", NomFinal)); } else { dateFin = result.Data as DateTime?; } } if (dateDebut == null || dateFin == null) { result.EmpileErreur(I.T("Both start date and end date must be set for table @1|20005", NomFinal)); } if (!result) { return(result); } DataTable tableResult = hotelConnexion.GetData(tableHotel, dateDebut.Value, dateFin.Value); if (tableResult != null) { Dictionary <string, IColumnDeEasyQuery> colNameSourceToDestCol = new Dictionary <string, IColumnDeEasyQuery>(); foreach (IColumnDeEasyQuery col in m_listeColonnes) { CColumnEQFromSource cs = col as CColumnEQFromSource; if (cs != null) { IColumnDefinition def = tableHotel.GetColumn(cs.IdColumnSource); if (def != null) { colNameSourceToDestCol[def.ColumnName] = col; } } } foreach (DataColumn col in tableResult.Columns) { IColumnDeEasyQuery colThis = null; if (colNameSourceToDestCol.TryGetValue(col.ColumnName, out colThis)) { col.ColumnName = colThis.ColumnName; } } } result.Data = tableResult; return(result); }
//-------------------------------------------------- protected override CResultAErreur GetDatasHorsCalculees(CListeQuerySource sources) { CResultAErreur result = CResultAErreur.True; CResultAErreurType <CColumnDeEasyQueryChampDeRequete> resCol = GetColonneIdSource(); m_dicRowsParentes = null; if (!resCol) { result.EmpileErreur(resCol.Erreur); return(result); } IODEQTableFromFramework tableSource = this.ElementsSource[0] as IODEQTableFromFramework; if (tableSource != null) { result = tableSource.GetDatas(sources); if (!result) { return(result); } DataTable tableParente = result.Data as DataTable; C2iRequeteAvancee requete = new C2iRequeteAvancee(); requete.TableInterrogee = CContexteDonnee.GetNomTableForType(TypeElements); foreach (IColumnDeEasyQuery col in m_listeColonnes) { CColumnDeEasyQueryChampDeRequete colR = col as CColumnDeEasyQueryChampDeRequete; requete.ListeChamps.Add(colR); } if (requete.ListeChamps.Count == 0) { result.Data = new DataTable(); return(result); } bool bRelTrouve = false; CComposantFiltreOperateur cpOperateur = new CComposantFiltreOperateur(CComposantFiltreOperateur.c_IdOperateurIn); CComposantFiltre cpFinal = cpOperateur; result = FiltreDynamique.GetFiltreData(); if (!result) { return(result); } CFiltreDataAvance filtre = result.Data as CFiltreDataAvance; if (filtre == null) { filtre = new CFiltreDataAvance(requete.TableInterrogee, ""); } CDefinitionProprieteDynamiqueRelation rel = m_definitionSource as CDefinitionProprieteDynamiqueRelation; string strNomChampParent = null; //// Relation standard if (rel != null) { //m_definitionSource.GetDefinitionInverse(TypeElements); if (rel.Relation.TableParente == requete.TableInterrogee) { cpOperateur.Parametres.Add(new CComposantFiltreChamp(rel.Relation.ChampsParent[0], requete.TableInterrogee)); strNomChampParent = rel.Relation.ChampsParent[0]; } else { cpOperateur.Parametres.Add(new CComposantFiltreChamp(rel.Relation.ChampsFille[0], requete.TableInterrogee)); strNomChampParent = rel.Relation.ChampsFille[0]; } bRelTrouve = true; } else { ///Relation Type id CDefinitionProprieteDynamiqueRelationTypeId relTypeId = m_definitionSource as CDefinitionProprieteDynamiqueRelationTypeId; if (relTypeId != null) { cpOperateur.Parametres.Add(new CComposantFiltreChamp(relTypeId.Relation.ChampId, requete.TableInterrogee)); strNomChampParent = relTypeId.Relation.ChampId; cpFinal = new CComposantFiltreOperateur(CComposantFiltreOperateur.c_IdOperateurEt); cpFinal.Parametres.Add(cpOperateur); CComposantFiltre cpType = new CComposantFiltreOperateur(CComposantFiltreOperateur.c_IdOperateurEgal); cpType.Parametres.Add(new CComposantFiltreChamp(relTypeId.Relation.ChampType, requete.TableInterrogee)); cpType.Parametres.Add(new CComposantFiltreVariable("@" + (filtre.Parametres.Count + 1).ToString("0"))); filtre.Parametres.Add(tableSource.TypeElements.ToString()); cpFinal.Parametres.Add(cpType); bRelTrouve = true; } } if (strNomChampParent != null) { requete.ListeChamps.Add(new C2iChampDeRequete(c_nomChampParentId, new CSourceDeChampDeRequete(strNomChampParent), typeof(int), OperationsAgregation.None, false)); } if (!bRelTrouve) { result.EmpileErreur(I.T("Can not find link for table @1|20076", NomFinal)); return(result); } int nParametre = filtre.Parametres.Count; cpOperateur.Parametres.Add(new CComposantFiltreVariable("@" + (filtre.Parametres.Count + 1).ToString("0"))); filtre.Parametres.Add(new int[0]); if (filtre.ComposantPrincipal == null) { filtre.ComposantPrincipal = cpFinal; } else { CComposantFiltreOperateur opEt = new CComposantFiltreOperateur(CComposantFiltreOperateur.c_IdOperateurEt); opEt.Parametres.Add(cpFinal); opEt.Parametres.Add(filtre.ComposantPrincipal); filtre.ComposantPrincipal = opEt; } m_dicRowsParentes = new Dictionary <object, DataRow>(); DataTable maTable = null; int nLectureParLot = 500; for (int nRow = 0; nRow < tableParente.Rows.Count; nRow += nLectureParLot) { int nMax = Math.Min(nRow + nLectureParLot, tableParente.Rows.Count); List <int> lstIds = new List <int>(); for (int n = nRow; n < nMax; n++) { DataRow row = tableParente.Rows[n]; int nVal = (int)row[resCol.DataType.ColumnName]; lstIds.Add(nVal); m_dicRowsParentes[nVal] = row; } filtre.Parametres[nParametre] = lstIds.ToArray(); DataTable tableTmp = null; requete.FiltreAAppliquer = filtre; result = requete.ExecuteRequete(CContexteDonneeSysteme.GetInstance().IdSession); if (!result || !(result.Data is DataTable)) { result.EmpileErreur(I.T("Error on table @1|20070", NomFinal)); return(result); } tableTmp = result.Data as DataTable; if (maTable == null) { maTable = tableTmp; } else { maTable.Merge(tableTmp); } } if (maTable == null) { maTable = new DataTable(NomFinal); foreach (IColumnDeEasyQuery colEQ in ColonnesOrCalculees) { DataColumn col = new DataColumn(colEQ.ColumnName, colEQ.DataType); try { maTable.Columns.Add(col); } catch { } } DataColumn colParent = new DataColumn(c_nomChampParentId, typeof(int)); try { maTable.Columns.Add(colParent); } catch { } } else { //Ajoute les colonnes from parent Dictionary <CColumnEQFromSource, string> dicColFromSourceToNom = new Dictionary <CColumnEQFromSource, string>(); foreach (CColumnEQFromSource colFromSource in m_listeColonnesFromParent) { if (!maTable.Columns.Contains(colFromSource.ColumnName)) { maTable.Columns.Add(colFromSource.ColumnName, colFromSource.DataType); } IColumnDeEasyQuery colSource = tableSource.Columns.FirstOrDefault(c => c.Id == colFromSource.IdColumnSource); if (colSource != null && tableParente.Columns.Contains(colSource.ColumnName)) { dicColFromSourceToNom[colFromSource] = colSource.ColumnName; } } if (maTable.Columns.Contains(c_nomChampParentId)) { foreach (DataRow row in maTable.Rows) { if (row[c_nomChampParentId] is int) { DataRow rowParente = null; if (m_dicRowsParentes.TryGetValue((int)row[c_nomChampParentId], out rowParente)) { if (rowParente != null) { foreach (KeyValuePair <CColumnEQFromSource, string> kv in dicColFromSourceToNom) { row[kv.Key.ColumnName] = rowParente[kv.Value]; } } } } } maTable.Columns.Remove(c_nomChampParentId); } } result.Data = maTable; } return(result); }
//-------------------------------------------------------------------------------------- public CResultAErreurType <DataTable> FiltreData(DataTable tableSource, CEasyQuery query, CListeQuerySource sources) { CResultAErreurType <DataTable> resTable = new CResultAErreurType <DataTable>(); //Trouve la table source IObjetDeEasyQuery objet = query.GetObjet(m_strTableId); if (objet == null) { resTable.EmpileErreur(I.T("Can not find table @1|20017", m_strTableId)); return(resTable); } //Récupére les données de la table source CResultAErreur result = objet.GetDatas(sources); if (!result) { resTable.EmpileErreur(result.Erreur); return(resTable); } DataTable tableResult = tableSource.Clone(); List <DataRow> lstRows1 = new List <DataRow>(); foreach (DataRow row in tableSource.Rows) { lstRows1.Add(row); } List <DataRow> lstRows2 = new List <DataRow>(); DataTable table = result.Data as DataTable; if (table != null) { foreach (DataRow row in table.Rows) { lstRows2.Add(row); } } Dictionary <object, List <DataRow> > keys1 = null; CParametreJointure.GetDicValeurs(lstRows1, ParametreJointure.FormuleTable1, ref keys1); Dictionary <object, List <DataRow> > keys2 = null; CParametreJointure.GetDicValeurs(lstRows2, ParametreJointure.FormuleTable2, ref keys2); HashSet <DataRow> rowsToKeep = new HashSet <DataRow>(); foreach (KeyValuePair <object, List <DataRow> > kv in keys1) { if (ParametreJointure.Operateur == EOperateurJointure.Egal) { List <DataRow> rows2 = null; if (keys2.TryGetValue(kv.Key, out rows2)) { if (rows2.Count() > 0) { foreach (DataRow row in kv.Value) { rowsToKeep.Add(row); } } } } else { foreach (KeyValuePair <object, List <DataRow> > kv2 in keys2) { if (CParametreJointure.Compare(kv.Key, kv2.Key, ParametreJointure.Operateur)) { foreach (DataRow row in kv.Value) { rowsToKeep.Add(row); } } } } } tableResult.BeginLoadData(); foreach (DataRow row in tableSource.Rows) { if (rowsToKeep.Contains(row)) { tableResult.ImportRow(row); } } tableResult.EndLoadData(); resTable.DataType = tableResult; return(resTable); }