コード例 #1
0
        /// <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]));
        }
コード例 #2
0
        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);
        }