![](https://ppfc.fr/wp-content/uploads/buddypress/members/709/cover-image/6561e0e9b4d48-bp-cover-image.jpg)
![Photo de Profil de R3dKap](https://ppfc.fr/wp-content/uploads/avatars/709/6561df324fd0a-bpfull.jpg)
R3dKap
Expert Power AppsRéponses céées sur le Forum
Déjà ?! 😂
Ok, alors essaie ceci :
<pre class=”language-markup”>
Sum(
Filter(
Prestations;
Ligne.Id in ShowColumns(
Filter(
Lignes;
Commande.Id = Gallery8.Selected.ID
);
ID
)
);
Temps
)Je te laisse mettre les bons noms de listes et de colonnes. ATTENTION à bien respecter les majuscules et minuscules entre
ID
etId
…😉
Explications (on lit toujours une formule de l’intérieur vers l’extérieur) :- on filtre d’abord la liste des lignes correspondant à la commande
- ensuite on restreint le résultat à la seule colonne ID pour pouvoir utiliser l’opérateur in
- puis, on filtre les lignes de prestations sur la base des lignes identifiées précédemment
- et enfin on somme le temps passé
Dans cette formule tu vas avoir un problème de délégation car la fonction Filter() n’est pas capable de déléguer à SharePoint une condition du type
ChampLookup.Id
. Donc si tu as un jour plus de 2000 lignes dans ta liste Lignes ou ta liste Prestations, le résultat sera partiel voire vide, donc incorrect.Pour contourner ce problème je te recommande d’ajouter dans chacune de ces 2 listes une colonne qui va contenir l’ID de la donné liée. Soit :
- Dans la liste Lignes : une colonne CommandeID de type numérique qui va stocker l’ID de la commande concernée
- Dans la liste Prestations : une colonne LigneID de type numérique qui va stocker l’ID de la ligne de commande concernée
Ca fait un peu redondance mais je me l’autorise pour régler les pronlèmes de délégation ou faciliter les opérations de filtrage des données.
Alors tu pourras écrire la formule ci-dessus comme ceci et tu n’auras plus de problème de délégation :
<pre class=”language-markup”>
Sum(
Filter(
Prestations;
LigneID in ShowColumns(
Filter(
Lignes;
CommandeID = Gallery8.Selected.ID
);
ID
)
);
Temps
)Autre piste d’amélioration : ajouter directement une colonne CommandeID à ta liste Prestations pour éviter de devoir filtrer la liste Lignes. Tu pourrais alors simplement écrire :
<pre class=”language-markup”>
Sum(
Filter(
Prestations;
CommandeID = Gallery8.Selected.ID
);
Temps
)Voilou… N’hésite pas si tu as encore des questions…
Super. Merci pour le détail.
Question importante : est-ce qu’il peut y avoir plusieurs lignes dans Prestations qui pointent vers la même ligne de commande ? C’est à dire : est-ce qu’il peut y avoir plusieurs personnes qui réalisent la même ligne de commande ?
Sinon une remarque : pourquoi ton Sort() sur Gallery8 trie sur la colonne Nom qui n’existe pas dans ta liste des Commandes ? N’y a-t-il pas confusion entre le nom du client et le n° de la commande (qui doit être la colonne Commande je suppose).
Ok, merci pour les infos.
Finalement si je résume : tu veux savoir quels jours de la semaine ont été choisis dans ta colonne Joursexecution qui est une colonne de type Choix.
Alors il n’y a pas de technique plus simple que la tienne. La seule chose c’est que, plutôt que de concaténer les valeurs de Joursexecution, l’idée serait d’utiliser un booléen pour détecter la présence d’une journée :
- initialiser boolJourTrouvé à False
- boucler sur les jours de la semaine via ton JSON
- boucler sur les valeurs de Joursexecution
- si valeur jour de la semaine = valeur Joursexecution alors boolJourTrouvé à True
- boucler sur les valeurs de Joursexecution
Dans le post suivant, Tom explique comment vérifier la présence d’une valeur dans une colonne de type Choix : https://powerusers.microsoft.com/t5/Building-Flows/Sharepoint-multi-choice-column-check-if-value-exists-in-the/m-p/819334/highlight/true#M114349
Salut Mick,
Peux-tu nous préciser comment est structurée ta LSP ? Et nous montrer à quoi ressemblent les données dedans ? Merci…
Ok, alors il me faudrait les infos suivantes :
- C’est des listes SharePoint que tu utilises ou des tables Dataverse ?
- Quelles sont les colonnes de tes 3 listes/tables ? Surtout les colonnes qui les connectent entre elles…
- Qu’as-tu dans le Items de ta galerie Gallery8 ?
- Quelle est la logique métier entre tes 3 listes ? Chaque commande a plusieurs lignes de commandes + il y a plusieurs prestations pour chaque commande ? J’ai l’impression que les prestations et lignes de commande font un peu doublon, mais je me trompe sûrement…
Salut Tom,
Essaie ceci :
<pre class=”language-markup”>
Sum(Filter('IX-Prestation'; ligneCommande.Id = Gallery8.Selected.ID);temps_Passe)
Salut Fred,
Pour l’instant je n’ai pas utilisé l’option Conserver en mémoire les écrans visités récemment. Il me semble qu’elle est désactivée par défaut.
Le fait qu’en la désactivant tout rendre dans l’ordre montre bien qu’elle est à l’origine du bug du retour arrière. Il faudrait remonter ça au support via un ticket pour qu’un correctif soit mis en place.
En attendant, si tu la désactives et que tu souhaites améliorer le temps de navigation, y’a pas grand chose à faire à part réduire le nombre de contrôles sur les écrans ainsi qu’anticiper les accès à la base au lieu de les faire dans les OnVisible des écrans et travailler avec des collections locales.
C’est vrai que la navigation Power Apps n’est pas très performante aujourd’hui malheureusement. Cela tient au fait que depuis quelques années les écrans ne sont instanciés que lorsqu’ils sont affichés : on a gagné sur le temps de chargement et l’initialisation de l’application mais on a perdu sur la nav… 😉
C’est une application mobile ?
Salut Tom,
Le plus simple est de faire un Switch() :
<pre class=”language-markup”>
Navigate(
Switch(
ThisItem.IdPowerApps;
"CLI";
"Ecran Client";
"CDE";
"Ecran Commande";
"PREST";
"Ecran Prestation";
...etc...
)
)
Attention, sous cette forme-là, tu ne pourras pas envoyer de données à l’écran cible via le 3è paramètre du Navigate(). Si tu veux envoyer des données à l’écran cible, il te faudra déplacer le Navigate() à l’intérieur du Swtich() :
<pre class=”language-markup”>
Switch(
ThisItem.IdPowerApps;
"CLI";
Navigate("Ecran Client"; ScreenTransition.None; {locNoClient: });
"CDE";
Navigate("Ecran Commande"; ScreenTransition.None; {locNoCommande: });
"PREST";
Navigate("Ecran Prestation"; ScreenTransition.None; {locIdPrestation: });
...etc...
)Salut Emmanuel,
Si ce n’est pas une boîte Outlook c’est quoi comme boîte mail ? Existe-t-il un connecteur Power Automate qui te permette d’accéder aux éléments de la boîte ?
Salut Fred,
Tu dois avoir un pb d’agencement de tes conteneurs. Est-ce que tu peux me montrer via une capture l’agencement de tes contrôles et conteneurs dans l’arborescence de ton application dans le Studio ?
Et sinon : non on ne peut pas gérer dynamiquement la superposition des conteneurs.
PS : dans Power Apps on appelle pas ça des calques mais juste des conteneurs… 😉
R3dKap
Membre12 juin 2024 à 12h32 en réponse à: Mise en forme d'un tableau avec le composant WebPart TextePour accéder aux anciennes listes SharePoint :
- Depuis le menu Créer de ton site choisi l’option Application
- Ensuite clique sur le lien Expérience classique
Pour ce qui est de la dépréciation de ces listes classiques, je suppose qu’ils ne le feront que lorsque les listes modernes offriront les mêmes fonctionalités.
Salut Laurent,
Voici une vidéo qui t’explique comment faire :
Certes… Mais vérifie d’abord en avance de phase que tous les acteurs ont bien accès au Dataverse (histoire de pas devoir tout refaire si ça passe pas)… 😉