/// <summary> /// Metodo que se va a utilizar para encontrar el /// identificador por el cual se debe realizar la /// busqueda en el metodo Fetch /// </summary> /// <returns></returns> private decimal GetLastId(int currentPage, string[] previousPages, PageOperation pageOperation, out int fetchPage) { //// En esta operacion no se va a tener en cuenta los valores //// "LastVisitedPage" ni "LastPageOfResults" fetchPage = 0; var tempFetchPage = currentPage + int.Parse(pageOperation.ToString("d")); switch (pageOperation) { case PageOperation.First: fetchPage = 0; break; case PageOperation.Previous: fetchPage = Math.Max(0, tempFetchPage); break; case PageOperation.Next: fetchPage = Math.Min(tempFetchPage, previousPages.Length - 1); break; } return(decimal.Parse(previousPages[fetchPage])); }
public IEnumerable <PROGRAMTB> Fetch(string systemIndentity, PageOperation pageOperation) { //// listado de trazas que van a ser retornadas. var result = new List <PROGRAMTB>(); var session = _context.Sessions.FirstOrDefault(s => s.ClientId == systemIndentity); //// Obteniendo el identificador que se va a utilizar para //// realizar el proceso de paginado. var currentPage = session.CurrentPage; var previousPages = session.PreviousPages.Split(","); var fetchPage = 0; var idFetchPage = GetLastId(currentPage, previousPages, pageOperation, out fetchPage); //// Atualizando la fecha de modificacion de la sesion. session.LastModification = DateTime.Now; _context.Update(session); _context.SaveChanges(); //// Sacar el query asociado a la session var stringQueryPmi = session.StringQueryPMI; //// Listado de los identificadores de los //// PRGMTYPETB var idPrgTypeTbList = new List <decimal?>(); //// Listado de los identificadores de los //// PRGMSUBTYPETB var idPrgSubTypeTbList = new List <decimal?>(); using (var conn = new OracleConnection(_iConfig.GetConnectionString("OracleConnection"))) { var cmd = conn.CreateCommand(); cmd.CommandText = stringQueryPmi; cmd.Parameters.Add(new OracleParameter("lastId", idFetchPage)); conn.Open(); using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { decimal?idPgrTypeTb = null; decimal?idPgrSubTypeTb = null; var programtb = CreateFromReader(reader, out idPgrTypeTb, out idPgrSubTypeTb); result.Add(programtb); idPrgTypeTbList.Add(idPgrTypeTb); idPrgSubTypeTbList.Add(idPgrSubTypeTb); } } } //// En caso de que no se encuentren datos se va a devolver null if (!result.Any()) { return(null); } var getPRGMTYPETBFromDBTask = GetPRGMTYPETBFromDB(idPrgTypeTbList); var getPRGMSUBTYPETBFromDB = GetPRGMSUBTYPETBFromDB(idPrgSubTypeTbList); var avlPRGMTYPETBs = getPRGMTYPETBFromDBTask; var avlPRGMSUBTYPETBs = getPRGMSUBTYPETBFromDB; ////Rellenando los PROGRAMTB con sus PRGMTYPETB //// y con sus PRGMSUBTYPETB for (int i = 0; i < result.Count; i++) { var pROGRAMTB = result[i]; ////Para el PRGMTYPETB if (pROGRAMTB.PRGMTYPEID.HasValue) { var pgrTypeId = pROGRAMTB.PRGMTYPEID.Value; PRGMTYPETB prgTypeTb = null; if (avlPRGMTYPETBs.TryGetValue(pgrTypeId, out prgTypeTb)) { pROGRAMTB.PRGMTYPETB = prgTypeTb; } } ////Para el PRGMSUBTYPETB if (pROGRAMTB.SUBTYPEID.HasValue) { var subTypeId = pROGRAMTB.SUBTYPEID.Value; PRGMSUBTYPETB subTypeTb = null; if (avlPRGMSUBTYPETBs.TryGetValue(subTypeId, out subTypeTb)) { pROGRAMTB.PRGMSUBTYPETB = subTypeTb; } } } //// Actualizando la pagina actual. session.CurrentPage = fetchPage; //// En caso de que se trate de una operacion de Next y este parado en la ultima pagina //// se tiene que actualizar el conjunto de paginas por //// las que ha pasado la session. if (pageOperation == PageOperation.Next && fetchPage == previousPages.Length - 1) { //// Obteniendo el ultimo identificador de //// del conjunto de PROGRAMTB que se obtuvo //// para actualizar el proceso de paginacion. var lastIdPROGRAMTB = result.Last().PRGMID; session.PreviousPages += $",{lastIdPROGRAMTB}"; } _context.Update(session); _context.SaveChanges(); return(result); }