French Power Platform User Group

Please login or click SIGN UP FOR FREE to create your PowerPlatformUG account to join this user group.
 View Only
  • 1.  Filtre de liste

    Posted Oct 12, 2021 09:36 AM

    Bonjour,

    J'ai une liste sharepoint que je simplifie à l'essentiel

    Nom            Acces1          Acces2
    Nom1              A
    Nom2              B                    F, D
    Nom3              C                    D, E
    Nom4              B                    A, E

    Je veux filtrer la liste comme suit:

    si Nom1 se connecte, il ne voit que les noms de ceux qui ont Acces1 = A    ou    A in Acces2   - jusque la facile

    si Nom3 se connecte il ne doit voir que Nom2     parce que D est commun à Nom2 et Nom3 pour Acces2 et c'est là que je bloque comment vérifier si chaque valeur de Nom3 pour Acces2 est contenu dans Acces2 de chaque Nom 

    Merci si vous pouvez m'aider

    Cordialement




    ------------------------------
    PUJOL Alain
    ------------------------------


  • 2.  RE: Filtre de liste

    Gold Contributor
    Posted Oct 13, 2021 08:15 AM
    Edited by EMMANUEL GALLIS Oct 13, 2021 08:15 AM
    Salut Alain,
    Quelques questions :
    1. La colonne Acces2 est un choice ou un texte simple avec des valeurs séparées par des virgules ?
    2. Est-ce que la colonne Accès1 peut être vide ?
    3. Est-ce que la Accès1 peut avoir plusieurs valeurs comme Accès2 ?
    Si je résumé ce que tu cherches à faire : NomX qui se connecte ne voit que les personnes (autres que lui-même) ayant soit Accès1 dans Accès1 ou Accès2, soit l'une des valeurs de Accès2 dans Accès2 ou Accès1.
    C'est ça ?

    ------------------------------
    EMMANUEL GALLIS
    Power Platform Consultant
    France
    ------------------------------



  • 3.  RE: Filtre de liste

    Posted Oct 13, 2021 08:19 AM
    Bonjour Emmanuel,

    Merci de répondre à mon problème

    1 - colonne Acces2 = Choice     (cette colonne peut être vide
    2 - Acces1 ne peut pas être vide et ne peut contenir qu'une seule valeur

    pour le résumé tu as très bien compris

    Cordialement

    ------------------------------
    PUJOL Alain
    ------------------------------



  • 4.  RE: Filtre de liste

    Gold Contributor
    Posted Oct 14, 2021 06:34 AM

    Salut Alain,

    Alors, voici la solution (testée de mon côté)...

    Hypothèses

    • ListeUsers est ta liste avec les colonnes Nom (texte), Accès1 (texte), Accès2 (choice)
    • gloCurrentUser est la ligne de ListeUsers correspondant à l'utilisateur connecté
    • colSiblings : voir plus bas

    OnStart

    Au démarrage de ton application (dans le OnStart) tu dois d'abord récupérer la ligne de ListeUsers qui correspond à l'utilisateur connecté. Par exemple :

    Set(
        gloCurrentUser;
        LookUp(
            ListeUsers;
            Nom = User().DisplayName
        )
    )


    Ensuite, pour gérer la condition "tous ceux dont Accès2 possède un des éléments du Accès2 de l'utilisateur connecté", on est obligé de passer par une collection à part qui va identifier toutes les lignes concernée par celle seule condition.

    Donc, toujours dans le OnStart, il faut que tu mettes ce code :

    Clear(colSiblings);
    ForAll(
        gloCurrentUser.Accès2 As LoopItem,
        Collect(
            colSiblings,
            Filter(
                ListeUsers,
                LoopItem.Value in Accès2 && Not(
                    Nom in ShowColumns(
                        colSiblings,
                        "Nom"
                    )
                )
            )
        )
    )

    On balaye les valeurs de Accès2 de l'utilisateur connecté et pour chacune d'elle on va chercher toutes les lignes de ListeUsers qui ont cette valeur dans leur Accès2. Le Not(...) c'est pour éviter les doublons.

    La formule de filtrage

    Filter(
        ListeUsers,
        Nom <> gloCurrentUser.Nom &&
        (
            Accès1 = gloCurrentUser.Accès1 || 
            gloCurrentUser.Accès1 in Accès2 || 
            Accès1 in gloCurrentUser.Accès2 || 
            Nom in ShowColumns(
                colSiblings,
                "Nom"
            )
        )
    )

    Explications

    • Nom <> gloCurrentUser.Nom : ça c'est pour s'assurer que dans les résultats on ne ressorte pas l'utilisateur connecté
    • Accès1 = gloCurrentUser.Accès1 : identifie tous ceux qui ont le même Accès1 que l'utilisateur connecté
    • gloCurrentUser.Accès1 in Accès2 : identifie tous ceux qui ont dans leur Accès2 l'Accès1 de l'utilisateur connecté
    • Accès1 in gloCurrentUser.Accès2 : identifie tous ceux dont l'Accès1 fait partie des Accès2 de l'utilisateur connecté
    • Nom in ShowColumns(...) : identifie tous ceux qui ont dans leur Accès2 un des éléments de l'Accès2 de l'utilisateur connecté (voir plus haut)

    Conclusion

    Pas simple ton histoire... 😅

    ATTENTION : l'opérateur IN n'est pas délégable à SharePoint. Donc, il va falloir que tu fasses toutes ces opérations non pas directement sur ta liste ListeUsers mais sur une collection locale où tu auras préchargé le contenu de ListeUsers. J'espère que tu auras moins de 2000 éléments dans cette liste sinon bin... je sais pas si ça va être possible (faudrait que je creuse encore plus).



    ------------------------------
    EMMANUEL GALLIS
    Power Platform Consultant
    France
    ------------------------------



  • 5.  RE: Filtre de liste

    Posted Oct 14, 2021 08:37 AM
    Bonjour Emmanuel,

    Merci pour ta solution que je vais utiliser. J'ai déjà en partie des morceaux. C'était plus comment vérifier chaque élément par rapport aux autres qui me posait problème

    Je n'aurais pas plus de 2000 enregistrements et pour l'instant la délégation ne me soucie pas.

    Bonne fin de journée

    ------------------------------
    PUJOL Alain
    ------------------------------