//---------------------------------------------------------------- public CResultAErreur SendData(string strIdTable, string strIdChamp, string strIdEntite, DateTime dataDate, double fValue) { CResultAErreur result = CResultAErreur.True; CDataRoom room = CDataDispatch.GetRoomFor(strIdEntite, m_database); try { IDataRoomServer srv = GetRoomServer(room); if (srv != null) { result = srv.SendDataDirect(strIdTable, strIdChamp, strIdEntite, dataDate, fValue); } } catch (Exception e) { result.EmpileErreur(new CErreurException(e)); } return(result); }
//---------------------------------------------------------------- public CResultAErreurType <CDataTableFastSerialize> GetData(CDataHotelQuery query) { //Explose la requête pour chaque serveur de destination Dictionary <CDataRoom, CDataHotelQuery> dicRoomToQuery = new Dictionary <CDataRoom, CDataHotelQuery>(); CListeEntitesDeMemoryDb <CDataRoom> allRooms = new CListeEntitesDeMemoryDb <CDataRoom>(m_database); foreach (string strIdEntite in query.EntitiesId) { //Si le dispatch ne sait pas qui interroger, on interroge tout le monde ! CDataRoom room = CDataDispatch.GetRoomFor(strIdEntite, m_database); List <CDataRoom> lstToAsk = new List <CDataRoom>(); if (room != null) { lstToAsk.Add(room); } else { lstToAsk.AddRange(allRooms); } foreach (CDataRoom roomToAsk in lstToAsk) { CDataHotelQuery specQuery = null; if (!dicRoomToQuery.TryGetValue(roomToAsk, out specQuery)) { specQuery = query.Clone(false); dicRoomToQuery[roomToAsk] = specQuery; } specQuery.EntitiesId.Add(strIdEntite); } } CResultAErreurType <CDataTableFastSerialize> myResult = new CResultAErreurType <CDataTableFastSerialize>(); DataTable tableResult = new DataTable(); foreach (KeyValuePair <CDataRoom, CDataHotelQuery> kv in dicRoomToQuery) { CDataRoom room = kv.Key; CResultAErreurType <CDataTableFastSerialize> res = new CResultAErreurType <CDataTableFastSerialize>(); IDataRoomServer srv = GetRoomServer(room); if (srv != null) { res = srv.GetDataDirect(kv.Value); if (res && res.DataType != null) { DataTable tableTmp = res.DataType; tableResult.Merge(tableTmp); } } } //S'assure que la table résultat contient bien toutes les colonnes demandées foreach (string strIdCol in query.ChampsId) { if (tableResult.Columns[strIdCol] == null) { tableResult.Columns.Add(strIdCol, typeof(double)); } } tableResult.DefaultView.Sort = CDataHotelTable.c_nomChampTableDate + "," + CDataHotelTable.c_nomChampTableEntiteId; DataTable tableFinale = tableResult.Clone(); tableFinale.BeginLoadData(); foreach (DataRowView rv in tableResult.DefaultView) { DataRow row = tableFinale.NewRow(); foreach (DataColumn col in tableFinale.Columns) { row[col.ColumnName] = rv[col.ColumnName]; } tableFinale.Rows.Add(row); } tableFinale.EndLoadData(); tableResult = tableFinale; foreach (IChampHotelCalcule champCalcule in query.ChampsCalcules) { champCalcule.FinaliseCalcul( query.TableId, tableResult, this, query.DateDebut, query.DateFin); } myResult.DataType = tableResult; return(myResult); }