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
<_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
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
paging_count
sql =
SELECT
COUNT(*) as ct
from
CATENTRY
where
CATENTRY.CATENTRY_ID < ?catEntryId? AND
CATENTRY.MARKFORDELETE = 0
- 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.