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
------------------------------
Original Message:
Sent: Oct 13, 2021 08:19 AM
From: PUJOL Alain
Subject: Filtre de liste
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
Original Message:
Sent: Oct 13, 2021 08:14 AM
From: EMMANUEL GALLIS
Subject: Filtre de liste
Salut Alain,
Quelques questions :
- La colonne Acces2 est un choice ou un texte simple avec des valeurs séparées par des virgules ?
- Est-ce que la colonne Accès1 peut être vide ?
- 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
Original Message:
Sent: Oct 12, 2021 09:36 AM
From: PUJOL Alain
Subject: Filtre de liste
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
------------------------------