Exploiter les résultats paginés de Microsoft Graph depuis Power Apps

  • Exploiter les résultats paginés de Microsoft Graph depuis Power Apps

    Posté par mb69 sur 22 juin 2024 at 21h34

    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.
    mb69 a répondu 10 months ago 1 Membre · 0 Réponses
  • 0 Réponses

    Sorry, there were no replies found.

    Connectez-vous pour répondre.