Prise en charge de la pagination dans la couche service de données

La pagination est utilisée pour renvoyer plusieurs "pages" de données lorsqu'il est nécessaire d'extraire seulement un certain nombre d'entrées à la fois. La couche service de données prend en charge la pagination, ainsi que la définition de limites pour la pagination des résultats.

La pagination est généralement réalisée à l'aide de requêtes à deux étapes. Dans la première phase de ces requêtes, la recherche est effectuée et les clés primaires de l'ensemble de résultats sont identifiées. Ceci correspond à la recherche XPath. Dans la seconde phase, les informations détaillées de chaque ligne de l'ensemble de résultats sont extraites. Ceci correspond au profil d'accès.

La pagination peut parfois être utilisée pour une requête à une seule étape si elle renvoie un seul enregistrement par clé primaire de la table de base.

Définition d'une limite de résultats pour la pagination au niveau du module de service entier

Vous pouvez définir l'attribut "maximumPagingResultLimit" dans le fichier de configuration de module de service wc-component.xml. Par exemple :
<_config:dataservice dataMediatorType="JDBC" 
	metadataClass="com.ibm.commerce.catalog.example.server.metadata.CatalogExampleMetadata" 
	maximumPagingResultLimit="5000">
</_config:dataservice>
Lorsque la pagination est demandée par le client, la requête d'un nombre de lignes supérieur à celui spécifié par l'attribut renvoie une exception.

Prise en charge de la pagination par le modèle de requête

Si vous désirez imposer une limite supérieure ou inférieure pour une requête spécifique, vous pouvez la définir dans 'paging_result_limit', dans la section SQL_STATEMENT de votre modèle de requête. Par exemple, dans l'exemple ci-dessous, paging_result_limit est définie à 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

Instruction SQL paging_count

Si vous effectuez une pagination dans une requête à une seule étape, vous devez fournir une instruction SQL paging_count. Cette instruction SQL doit renvoyer le nombre total d'enregistrements uniques de la table de base renvoyé par votre modèle XPath to SQL. Si le nombre de résultats dépasse la limite de pagination, une exception est renvoyée. Un exemple d'instruction SQL paging_count figure ci-après :
       paging_count
       sql =
              SELECT  
              	COUNT(*) as ct
              from 
                CATENTRY 
              where 
              	CATENTRY.CATENTRY_ID < ?catEntryId? AND                                                 
                            CATENTRY.MARKFORDELETE = 0
Remarque :
  • L'instruction SQL paging_count doit être utilisée pour les requête à une étape.
  • L'instruction SQL paging_count SQL n'est pas requise pour les requêtes à deux étapes.
  • Les requêtes de recherche paramétrique ne doivent pas spécifier d'instruction SQL paging_count.