Exploiter les résultats paginés de Microsoft Graph depuis Power Apps
Exploiter les résultats paginés de Microsoft Graph depuis Power Apps
Hello,
voici une petite doc avec l’explication de l’agorithme à suivre que j’ai essayé de détailler:
Comment exploiter les résultats paginés de Microsoft Graph depuis Power Apps ?
Pour répondre à cette problématique, on peut distinguer 2 étapes nécessaires :
1°) Comprendre le mécanisme de pagination des réponses renvoyées par Microsoft Graph.
2°) Ecrire les lignes de code PowerApps nécessaires pour lire les résultats paginés de Graph.
I) Mécanisme de pagination des réponses renvoyées par Microsoft Graph
A chaque fois qu’une requête est envoyée vers Microsoft Graph, celui renvoie les résultats trouvés sous formes de pages :
Voici comment se présente chaque page renvoyée par graph :
Une page renvoyée par Graph comporte 2 champs :
- Value qui est 1 ensemble d’enregistrements correspondant à la requête Graph
- Odata.nextlink qui est 1 lien de type string vers une éventuelle prochaine page de résultats, il a la valeur de chaine vide « » s’il n’a pas de prochaine page de résultats.
Une réponse Graph peut comporter 1 ou plusieurs pages de résultats.
Par défaut, une page Graph comporte 100 résultats.
Avec l’utilisation du paramètre « top », le nombre de résultats par page peut être porté à 999 qui est la valeur maximum pour une page de résultats.
II) Les lignes de code PowerApps nécessaires pour récupérer toutes les pages de résultats renvoyées par la requête Graph
a) L’algorithme à respecter :
Exécuter la requête Graph
Lire la 1<sup>ère</sup> page de résultats
Tant qu’il existe une prochaine page de résultats, lire cette prochaine page de résultats
b) Application de l’algorithme au langage Power fx de PowerApps :
La 1<sup>ère</sup> difficulté est qu’il n’existe pas de boucle « Tant que » (while) dans powerapps : la seule boucle disponible est le « Forall » qui permet d’itérer sur une collection pour parcourir tous ses éléments mais qui ne répond pas vraiment à notre besoin dans le cas présent.
La notion de récursivité qui nous aurait permis d’itérer est également absente dans powerapps.
L’emploi d’un timer permet de créer une itération, c’est donc le choix qui a été fait dans la suite pour expliquer comment récupérer toutes les pages de la réponse d’une requête à Graph depuis une application PowerApps :
1°) Chargement de la 1ère page
// On exécute la requête graph et on stock le résultat renvoyé par graph dans la variable globale lstResGraph
Set(lstResGraph;GroupesOffice365.ListGroups({‘$top’:999}));;
// Récupération du lien vers la prochaine page
Set(var_prochainePage; Last(Split(lstResGraph.’@odata.nextLink’; “=” )).Value );;
// Collecter dans une collection colGroupsResGraph les résultats contenus dans lstResGraph
ClearCollect(colGroupsResGraph;
SortByColumns(
Filter(lstResGraph.value;
And(!IsMatch(displayName;”GGF”;MatchOptions.Contains);!IsMatch(displayName;”GLF”;MatchOptions.Contains);!IsMatch(displayName;”GUF”;MatchOptions.Contains);!IsMatch(displayName;”GGE”;MatchOptions.Contains))
);
“displayName”;
SortOrder.Ascending
)
);;
// Stocket le num de page courante, soit 1 ici
Set (numPageCourante;1);;
2°) Chargement des éventuelles pages suivantes
Ajouter un timer dans votre écran powerapps et positionner ses propriétés « repéter » et « démarrage auto » à true et Durée à 600
Sachant que la fonction OnTimerStart est la fonction qui se ré-exécute à chaque fois que le timer redémarre, dans le code du OnTimerStart de votre timer, taper les lignes de code suivantes :
// S’il existe 1 lien vers une prochaine page à charger
If(!IsBlank(var_prochainePage);
Set(numPageCourante; numPageCourante + 1);;
// On exécute la requête graph et on stock le résultat renvoyé par graph dans la variable globale lstResGraph
Set(lstResGraph; GroupesOffice365.ListGroups({‘$skiptoken’: var_prochainePage; ‘$top’:999 }));;
// Récupération du lien vers la prochaine page
Set(var_prochainePage; Last(Split( lstResGraph.’@odata.nextLink’; “=” )).Value );;
// Collecter dans la collection colGroupsResGraph les résultats contenus dans lstResGraph
Collect(colGroupsResGraph;
SortByColumns(
Filter(lstResGraph.value;
And(!IsMatch(displayName;”GGF”;MatchOptions.Contains);!IsMatch(displayName;”GLF”;MatchOptions.Contains);!IsMatch(displayName;”GUF”;MatchOptions.Contains);!IsMatch(displayName;”GGE”;MatchOptions.Contains))
);
“displayName”;
SortOrder.Ascending
)
);;
Voilà, vous savez désormais comment exploiter pleinement une requête Microsoft Graph depuis une application powerapps, il ne vous reste plus qu’à tester.
-
This discussion was modified 10 months ago by
MB69.
-
This discussion was modified 10 months ago by
Sorry, there were no replies found.
Connectez-vous pour répondre.