Répondre à: LookUp function basée sur une combobox (multiple choice)
-
Alors, pour mon test j’ai construis les collections suivantes :
colEmployés
ClearCollect(n colEmployés;n {n Id: 1;n Nom: "Employé 1";n Pays: Table(n {Id: 1; Value: "Allemagne"};n {Id: 2; Value: "Autriche"};n {Id: 3; Value: "Suisse"}n )n };n {n Id: 2;n Nom: "Employé 2";n Pays: Table(n {Id: 1; Value: "Allemagne"};n {Id: 2; Value: "Autriche"}n )n }n)
colPays
ClearCollect(n colPays;n {n Id: 1;n Nom: "Allemagne";n Personnes: Table(n {Id: 1; Value: "A"};n {Id: 2; Value: "B"}n )n };n {n Id: 2;n Nom: "Autriche";n Personnes: Table(n {Id: 1; Value: "A"}n )n };n {n Id: 3;n Nom: "Suisse";n Personnes: Table(n {Id: 3; Value: "C"};n {Id: 4; Value: "D"}n )n }n)
colPersonnes
ClearCollect(n colPersonnes;n {Id: 1; Value: "A"};n {Id: 2; Value: "B"};n {Id: 3; Value: "C"};n {Id: 4; Value: "D"}n)
Sur mon écran j’ai mis une combo box cbxEmployés où
Items = colEmployés
. Donc, dans cbxEmployés.Selected j’ai l’employé sélectionné.L’objectif c’est que si je choisis Employé 1 il me donne ABCD et si je choisis Employé 2 il me donne AB (comme dans ton exemple).
Voici comment j’ai procédé pour monter la formule…
Mon objectif est de filtrer colPays pour ne garder que les pays de l’employé sélectionné et en extraire ensuite les personnes (sans les doublons).
Du coup, d’abord je rajoute une colonne dans colPays pour avoir une concaténation des identifiants des personnes de chaque pays :
AddColumns(n colPays As Pays;n "ConcatPersonnesId";n Concat(Pays.Personnes; Text(Id); ";")n)
Le résultat est le suivant :
Ensuite, je filtre la liste des pays pour ne conserver que les pays de l’employé sélectionné (à droite du in il faut obligatoirement une table à une seule colonne ; c’est pour ça que je fais le ShowColumns() pour ne garder que la colonne Id des pays de l’employé) :
Filter(n <formule précédente>;n Id in ShowColumns(cbxEmployés.Selected.Pays; "Id")n)
Pour l’employé 2 par ex. ça me donne donc ceci :
Après, je concatène tous les ids des personnes identifiées dans la colonne ConcatPersonnesId :
Concat(n <formule précédente>;n ConcatPersonnesId;n ";"n)
Ca me donne donc :
1;2;1
Il faut maintenant que j’élimine les doublons. Pour cela je reconvertis ce résultat en tableau à l’aide du Split() :
Split(<formule précédente>; ";")
Ca me donne :
Puis j’élimine les doublons :
Distinct(<formule précédente>; Result)
Et j’obtiens enfin :
Ces ids correspondants à ceux des personnes qui ont dont les droits d’accès.
La formule complète est donc la suivante :
Distinct(n Split(n Concat(n Filter(n AddColumns(n colPays As Pays;n "ConcatPersonnesId";n Concat(n Pays.Personnes;n Text(Id);n ";"n )n );n Id in ShowColumns(n cbxEmployés.Selected.Pays;n "Id"n )n );n ConcatPersonnesId;n ";"n );n ";"n );n Resultn)
Si tu mets ça dans une galerie, tu peux afficher le nom des personnes avec un libellé où tu mets
LookUp(colPersonnes; Id = Value(ThisItem.Result))
. Il faut convertir le ThisItem.Result en numérique pour que la comparaison avec le Id de colPersonnes fonctionne correctement.Voilou… J’espère que t’arriveras à l’adapter à ton cas de figure… Sinon n’hésite pas à revenir ici… 😉
Je te mets ci-joint la p’tite application que j’ai faite pour simuler ton cas d’usage… A ouvrir directement depuis le studio Power Apps.
CommentID=zaVTYRe1Y4tJ2cz, PostID=7sLjiaO0S60z9LY