view pagination lotus-domino

view - Lotus Domino: ver la paginación en la web



pagination lotus-domino (2)

Entiendo su pregunta de que tiene un formulario de trabajo $$ ViewTemplateDefault y ahora está buscando la posibilidad de mostrar el número de página actual "Página nn" en ese formulario.

Supongo que usa @DbCommand("Domino"; "ViewNextPage") para obtener la página siguiente y @DbCommand("Domino"; "ViewPreviousPage") para obtener la página anterior.

Esas funciones anteriores y anteriores funcionan de la misma manera que siempre un documento se "solapará". Si tiene 30 líneas por página y hace clic en siguiente, el último documento será el primero en la página siguiente y el siguiente 29 aparecerá además. Puedes ver eso en el parámetro URL usado "& Start =": 1 ... 30 ... 59 ... 88 ...

Sabiendo esto, puedes contar el número de página actual de esta manera:

_start := @ToNumber(@Replace(@UrlQueryString("start"); ""; "1")); _count := @ToNumber(@Replace(@UrlQueryString("count"); ""; "30")) - 1; @Integer((@ToNumber(_start) / _count) + 1)

Tenga en cuenta que esto funcionará únicamente para vistas no categorizadas y no contraíbles.

Una solución más sofisticada que puedes encontrar aquí . Tiene características adicionales como Ir a la página y Documentos por página.

Si tiene la oportunidad de su proyecto, use XPages en su lugar. Puede hacer la paginación mucho más fácil, ya que está disponible "de fábrica".

Actualizar:

No encontrará una solución razonable para las vistas categorizadas. Si no desea utilizar la API REST de Domino Data / Access Services , debe vivir con los parámetros de la URL de la vista de Domino (busque aquí "OpenView"). No puede decir desde "& Start =" o cualquier otro parámetro en qué página se encuentra actualmente.

La forma más fácil de obtener una buena paginación de trabajo es usando XPages. Espero que puedas usarlo en tu proyecto ...

Leí en muchos foros sobre cómo implementar una solución para la paginación de vistas, pero no lo resolví.

$$ViewTemplateDefault contenía algunos botones de zonas de acceso personalizadas para Next , Previous y un campo de texto $$ViewBody . (o, como alternativa, una vista incrustada).

Cualquier consejo y ayuda será realmente apreciado.

Explicaré en pocas palabras, solo para ser claro:

Entonces, inicialmente: las primeras 30 líneas aparecerán => en la esquina derecha: Página 1.

Si se hace clic en Siguiente => las siguientes 30 líneas => Página 2. y así sucesivamente.


Aquí hay una solución de trabajo para vistas categorizadas también. Calcula el número de página actual en función del número de página anterior y utiliza cookies.

Agregue a su formulario un texto HTML Path-Thru <span id="pageNumber"></span > para el número de página:

y agregue el siguiente código al evento onLoad del onLoad como Web / JavaScript:

function getURLParameter(parameter) { return decodeURIComponent((new RegExp(''[?|&]'' + parameter + ''='' + ''([^&;]+?)(&|#|;|$)'').exec(location.search) || [, ""])[1].replace(//+/g, ''%20'')) || null; } function getCookie(cname) { var name = cname + "="; var ca = document.cookie.split('';''); for(var i=0; i<ca.length; i++) { var c = ca[i].trim(); if (c.indexOf(name)==0) return c.substring(name.length,c.length); } return ""; } function compareStart(start1, start2) { var list1 = start1.split("."); var list2 = start2.split("."); for (i=0; i <100; i++) { var value1 = list1[i]; var value2 = list2[i]; if (value1 == null) { return value2 == null ? 0 : -1; } else if (value2 == null) { return 1; } value1 = Math.round(value1); value2 = Math.round(value2); if (value1 !== value2) { return value1 < value2 ? -1 : 1; } } } var start = getURLParameter("Start"); var page = "1"; if (start == null || start === "1") { window.name = Math.floor((Math.random()*10000)+1); start = "1"; } else { page = getCookie("page" + window.name); var oldStart = getCookie("start" + window.name); page = Math.round(page) + compareStart(start, oldStart); } document.getElementById(''pageNumber'').innerHTML = page; document.cookie = "page" + window.name + "=" + page; document.cookie = "start" + window.name + "=" + start;

¿Como funciona?

Los comandos @DbCommand("Domino"; "ViewNextPage") y @DbCommand("Domino"; "ViewPreviousPage") devuelven una URL con el parámetro "& Start =". Este es el número de fila a la vista donde comienza la página actual. Para las vistas categorizadas, devuelven un número jerárquico como "& Start = 1.2.4.2". Eso significa que la vista comienza en el primer tema principal, subtema 2, subsubtopico 4, documento 2.

Este parámetro "& Start =" nos da la posibilidad de reconocer si el usuario presionó "prev" o "next": simplemente comparamos el parámetro "& Start =" de la URL de la página actual y anterior.

Para eso, tenemos que recordar el parámetro URL "& Start =" y ponerlo en un "inicio" de cookie.

También necesitamos guardar el número de página actual. Lo ponemos en una "página" de cookies.

En el evento de onload calculamos el número de página actual basado en el número de página anterior:

  • si el parámetro "& Start =" es más grande ahora, agregamos 1
  • si el parámetro "& Start =" es más pequeño ahora, restamos 1
  • si el parámetro "& Start =" no cambió, entonces conservamos el valor anterior

Si el parámetro "& Start =" está vacío, sabemos que estamos en la página 1.

Aquí hay otra cosa con la que tenemos que lidiar: las cookies se guardan por sesión de usuario, no por pestaña del navegador. Eso significa que, si tenemos dos vistas abiertas en el navegador, se usarán las mismas "inicio" y "página". Para evitar eso, tenemos que agregar al nombre de la cookie algo específico de la pestaña. Utilizo para eso un número aleatorio de cuatro dígitos y lo window.name en window.name que es específico de la pestaña.