Soporte de paginación en la capa de servicios de datos

La paginación se utiliza para devolver varias "páginas de datos" cuando únicamente es necesario recuperar un número de entradas de datos a la vez. La capa de servicios de datos da soporte a la paginación de datos y establece límites de resultado para la paginación.

Generalmente, la paginación se lleva a cabo utilizando consultas de dos pasos. En la primera fase de una consulta de dos pasos se realiza la búsqueda y se encuentran las claves primarias del conjunto de resultados. Esto corresponde a la búsqueda de XPath. En la segunda fase, se recupera la información detallada para cada fila en el conjunto de resultados. Esto corresponde al perfil de acceso.

A veces, la paginación se puede utilizar para una consulta de un solo paso, si devuelve un registro por clave primaria de la tabla base.

Establecimiento de límite de resultado para todo el módulo de servicio

En el archivo de configuración del módulo de servicio wc-component.xml, puede definir el atributo "maximumPagingResultLimit". Por ejemplo:
<_config:dataservice dataMediatorType="JDBC" 
	metadataClass="com.ibm.commerce.catalog.example.server.metadata.CatalogExampleMetadata" 
	maximumPagingResultLimit="5000">
</_config:dataservice>
Cuando el cliente solicita la paginación, si se consultan más filas de las especificadas por maximumPagingResultLimit se producirá una excepción.

Cómo soporta la paginación la plantilla de consulta

Si desea que una consulta determinada tenga un límite menor o mayor, puede definir un paging_result_limit (límite de resultado de paginación) en la sección SQL_STATEMENT de la plantilla de consulta. Por ejemplo, en el ejemplo de abajo, el paging_result_limit se establece en 50:
BEGIN_XPATH_TO_SQL_STATEMENT
       <!-- fetch all CATENTRY records given a set of part numbers -->
       <!-- xpath = "/CatEntry[@catEntryId<123]" -->
       name=/CatEntry[@catEntryId<]+CatalogPaging
       paging_result_limit=50
       entity_table=CATENTRY
       dbtype=db2
       sql=  
             		SELECT  CATENTRY.$COLS:CATENTRY$
                      FROM CATENTRY WHERE CATENTRY.CATENTRY_ID < ?catEntryId? AND                            										
               CATENTRY.MARKFORDELETE = 0 ORDER BY CATENTRY.CATENTRY_ID
              
       paging_count
       sql =
              SELECT  
              	COUNT(*) as ct
              from 
                CATENTRY 
              where 
              	CATENTRY.CATENTRY_ID < ?catEntryId? AND                                                 
                            CATENTRY.MARKFORDELETE = 0
END_XPATH_TO_SQL_STATEMENT

Sentencia SQL de cuenta de paginación (paging_count)

Si está paginando en una consulta de un solo paso, necesita proporcionar una sentencia SQL de cuenta de paginación (paging_count). La sentencia SQL de cuenta de paginación (paging_count) debe devolver el número total de registros exclusivos de la tabla base devuelto por la plantilla XPath a SQL (Xpath a SQL). Si el número de resultados sobrepasa el límite de paginación, se generará una excepción. A continuación puede ver un ejemplo de SQL de cuenta de paginación (paging_count).
       paging_count
       sql =
              SELECT  
              	COUNT(*) as ct
              from 
                CATENTRY 
              where 
              	CATENTRY.CATENTRY_ID < ?catEntryId? AND                                                 
                            CATENTRY.MARKFORDELETE = 0
Nota:
  • La sentencia SQL paging_count debe utilizarse para consultas de un solo paso.
  • La sentencia SQL de cuenta de paginación (paging_count) no es necesaria para consultas de dos pasos.
  • Las consultas de búsqueda paramétrica no deben especificar las sentencias SQL paging_count (cuenta de paginación).