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éesmoreAfter
sonttrue
, 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'appelersysGetPageOffset()
, à condition de modifier lepageNumber
paramètre à l'intérieur ducontext
, 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();