En esta página
Paginación en DataSources
La paginación en DataSources permite manejar grandes conjuntos de datos de manera eficiente, mostrando solo una porción de los registros a la vez. Para implementar la paginación, se utilizan los parámetros @limit
y @offset
que son proporcionados automáticamente por Pragmatic.
Implementación según el tipo de DataSource
Caso SQL
El siguiente ejemplo muestra cómo utilizar los parámetros @limit
y @offset
en una consulta SQL para implementar paginación:
-- 1. Seleccionamos los campos necesarios
SELECT
id,
titulo,
fecha
FROM
eventos
WHERE
-- 2. Aplicamos los filtros condicionales
-- Si no se proporciona un título, se muestran todos los registros
(@parameter.titulo IS NULL OR titulo LIKE CONCAT('%', @parameter.titulo, '%')) AND
-- Si no se proporciona una fecha, se muestran todos los registros
(@parameter.fecha IS NULL OR fecha <= @parameter.fecha)
-- 3. Aplicamos la paginación
LIMIT @limit -- Número de registros por página
OFFSET @offset -- Registros a omitir
En este ejemplo:
@limit
controla cuántos registros se devolverán por página@offset
determina desde qué registro comenzar, permitiendo navegar entre páginas- Los filtros
@parameter.titulo
y@parameter.fecha
son ejemplos de filtros que son configurados desde un campo Prompt o Listado
Caso MongoDB
Para un datasource de tipo MongoDB, la paginación se implementa de la siguiente manera:
[
// 1. Etapa de filtrado (match)
{
"$match": {
"$expr": {
"$and": [
// 2. Filtro por título
{
"$or": [
{ "$eq": [ @parameter.titulo, null ] }, // Si no hay título, no filtra
{ "$eq": [ "$titulo", @parameter.titulo ] } // Si hay título, filtra por igualdad
]
},
// 3. Filtro por fecha
{
"$or": [
{ "$eq": [ @parameter.fecha, null ] }, // Si no hay fecha, no filtra
{ "$lte": [ "$fecha", { "$dateFromString": { "dateString": @parameter.fecha } } ] } // Si hay fecha, filtra por menor o igual
]
}
]
}
}
},
// 4. Etapa de paginación
{ "$skip": @offset }, // Omite los registros según el offset
{ "$limit": @limit } // Limita el número de registros por página
]
En este ejemplo:
@limit
se utiliza en la etapa$limit
para controlar el número de registros por página@offset
se utiliza en la etapa$skip
para determinar desde qué registro comenzar- Los filtros
@parameter.titulo
y@parameter.fecha
son ejemplos de filtros que son configurados desde un campo Prompt o Listado
Caso Función JavaScript
Para un datasource de tipo función JavaScript, la paginación se implementa de la siguiente manera:
// 1. Obtenemos los parámetros necesarios para la paginación
const busqueda = @parameter.busqueda
const registrosPorPagina = @limit
const registrosASaltar = @offset
// 2. Realizamos la petición a la API
return axios.get('https://api.ejemplo.com/productos', {
params: {
busqueda: busqueda,
limit: registrosPorPagina,
skip: registrosASaltar
}
})
.then((response) => {
// 3. Procesamos la respuesta
const datos = response.data || {}
// 4. Transformamos los datos al formato requerido
const resultados = (datos.productos).map(producto => ({
id: producto.id,
nombre: producto.nombre,
precio: producto.precio
}))
// 5. Retornamos el objeto con la estructura requerida para la paginación
return {
results: resultados,
totalRecords: datos.total
}
})
.catch((error) => {
console.error('Error al obtener los productos:', error)
})
En este ejemplo:
@limit
y@offset
se utilizan como parámetros de paginación en la llamada a la API- Es obligatorio retornar la promesa de axios para que Pragmatic la procese correctamente
- Dentro del
then
de axios, se debe retornar un objeto con la siguiente estructura:results
: Array de objetos con los datos obtenidostotalRecords
: Número total de registros (debe ser un entero positivo)
- Si no se cumple con esta estructura de retorno, la paginación no funcionará correctamente