Passer au contenu principal
Toutes les collectionsQuestions générales
Comment utiliser la méthode getPage() pour récupérer les lignes de résultats de plusieurs pages
Comment utiliser la méthode getPage() pour récupérer les lignes de résultats de plusieurs pages

getPage, getPageOffset

Jason Liang avatar
Écrit par Jason Liang
Mis à jour il y a plus de 2 semaines

La méthode getPage() est souvent appelée pour récupérer une liste d'objets, tels que des éléments usager dans le service usager, des entités dans le service d'entité globale, un service d'entité usager, un service d'entité personnalisé (nommé getEntityPage dans le service d'entité personnalisé).

Vous avez peut-être remarqué que le nombre maximal de lignes d'éléments renvoyées par la méthode getPage() est limité à 100. Dans le cas où ces éléments sont supérieurs à 100, vous devrez effectuer un appel supplémentaire pour obtenir les éléments restants.

  • Le moyen le plus simple d'y parvenir est de combiner cette méthode avec la méthode suivante: getPageOffset() chaque fois que les données renvoyées moreAfter sont true, vous pouvez appeler la page de décalage suivante. Consultez l'exemple ci-dessous pour obtenir tous les éléments usager via un script Cloud Code:

"use strict";

function main() {

bridge.logDebugJson("Script inputs", data);
var response = {};
var maxperpage = data.maxperpage;
var context = {
"pagination": {
"rowsPerPage": maxperpage,
"pageNumber": 1
},
"searchCriteria": {},
"sortCriteria": {
"playerId": 1
}
};
var userProxy = bridge.getUserServiceProxy();

var aPlayerIds=[];
var offsetPageNumber = 0;

var firstPageResult = userProxy.sysGetPage( context );
if (firstPageResult.status == 200) {
firstPageResult.data.results.items.forEach(item=>aPlayerIds.push(item.playerId));
var firstPageContext = firstPageResult.data.context; //if using this conte

//en utilisant moreAfter pour déterminer si vous appelez sysGetPageOffset
var loopflag = firstPageResult.data.results.moreAfter;

while (loopflag){
offsetPageNumber ++;
var nextPageResult = userProxy.sysGetPageOffset(firstPageContext, offsetPageNumber);
nextPageResult.data.results.items.forEach(item=>aPlayerIds.push(item.playerId));
loopflag = nextPageResult.data.results.moreAfter;
}
}

response = {
"aPlayerIds": aPlayerIds,
"itemsCount": aPlayerIds.length
};

return response;

}

main();
  • Une autre alternative serait de continuer à appeler sysGetPage()la page suivante au lieu d'appeler sysGetPageOffset(), à condition de modifier le pageNumber paramètre à l'intérieur du context, voir l'extrait de code ci-dessous :

"use strict";

function main() {

bridge.logDebugJson("Script inputs", data);
var response = {};
// utiliser la pagination pour déterminer si besoin d'obtenir la page suivante
var maxperpage = data.maxperpage;
var pageNumber = 1;
var aPlayerIds = [];
var context = {
"pagination": {
"rowsPerPage": maxperpage,
"pageNumber": pageNumber
},
"searchCriteria": {},
"sortCriteria": {
"playerId": 1
}
};
var userProxy = bridge.getUserServiceProxy();

var firstPageResult = userProxy.sysGetPage( context );
var count = firstPageResult.data.results.count;
if(count>0){
firstPageResult.data.results.items.forEach(item=>aPlayerIds.push(item.playerId));
//si le nombre d'éléments renvoyés est supérieur à maxperpage, la boucle for sera lancée pour appeler la page suivante, jusqu'à ce que tout soit analysé
var remainder = 0;
var numberpage = 0;
remainder = count % maxperpage;
numberpage = (count-remainder)/maxperpage;

for (var n = 0; n < numberpage; n++ ){

pageNumber ++;

context.pagination.pageNumber = pageNumber;

var nextPageResult = userProxy.sysGetPage( context );
if (nextPageResult.status == 200) {
nextPageResult.data.results.items.forEach(item=>aPlayerIds.push(item.playerId));
}
}

}
response = {
"aPlayerIds": aPlayerIds,
"itemsCount": aPlayerIds.length
};

return response;

}

main();
Avez-vous trouvé la réponse à votre question ?