R3dKap
Expert Power AppsRéponses céées sur le Forum
-
Salut Tom Victor,
C’est très clair. Merci pour les explications détaillées.
Alors, au vu de ton cas, et pour que l’expérience utilisateur soit la meilleure, je viserais l’objectif suivant :
-
la combo box Cde (en-dessous de Client) reste grisée tant qu’un client n’a pas été choisi
-
une fois qu’un client a été choisi, la combo box Cde se déverrouille et n’affiche que les commandes du client
-
une fois qu’une commande a été choisie, la galerie affiche les lignes de détail de la commande
-
en cliquant sur une ligne de la galerie, cela affiche le panel de droite où l’on peut modifier la ligne de la commande (du coup il ne devrait y avoir qu’un bouton ENREGISTRER)
-
je mettrais un bouton NOUVELLE LIGNE en haut à droite au-dessus de la galerie qui affiche le détail de la commande
-
et sur chaque ligne de la galerie je mettrais tout à droite un icône POUBELLE pour supprimer une ligne si nécessaire
-
dans le panel de droite qui s’affiche lorsque l’on clique sur une ligne ou lorsque l’on clique sur NOUVELLE COMMANDE il y aurait le formulaire branché sur ta liste CRM-Détail commandes : dans ce formulaire, le datacard contenant la commande serait masqué et automatiquement alimenté à partir de la combo box Cde (en-dessous de Client)
Ca t’irait comme mode de fonctionnement ?
CommentID=4Dt3AYMeJnuTvC7, PostID=wVEkrzcD5VIJ3Ae
-
-
MarKAR est-ce que tu as personnalisé le formulaire de ta liste SharePoint ou tu as créé une application dans laquelle tu as ajouté un formulaire connecté à ta liste ?
CommentID=M2MZCxSVwCNFWKA, PostID=s9fsO5Ut1CgxnOC
-
R3dKap
Membre16 février 2023 à 20h11 en réponse à: Perte de données après un "move to" de plusieurs fichiersSalut BNguyen,
Qu’avez-vous déjà fait comme tests ?
-
Même problème lorsque un fichier pour lequel ça ne marche pas est déplacé de manière unitaire ?
-
Est-ce que ce sont toujours les 2 mêmes pour qui ça ne marche pas ?
-
Est-ce qu’en faisant une copie plutôt qu’un déplacement ça fonctionne ?
CommentID=cdURVqWGzeQObOq, PostID=Xol03IhYhae9vUX
-
-
Ok. Alors, en fait c’est la colonne domainname qu’il faut utiliser… Et l’erreur du ShowColumns() vient du fait que tu n’as pas mis les guillemets autour du nom de la colonne dans le 2ème paramètre.
Donc, la formule devrait être :
Filter(n Utilisateurs; n domainname in ShowColumns(n Filter(n Presta_Users; n LookPresta.Prestations = varPrestaActive.Titlen ); n "domainname"n )n)
Par contre, je suis surpris par ton
varPrestaActive.Title
. Normalement tu dois utiliser la colonne de clé primaire de ta table Prestations donc en toute logique, si ta variable varPrestaActive est bien un vrai enregistrement de ta table Prestations, ça devrait êtrevarPrestaActive.Prestations
.Tu me suis ?
Sinon, mets-moi une capture des colonnes de tes tables Prestations et Presta_Users où on voit bien les libellés et surtout les noms logiques des colonnes… 😉
CommentID=1ewl59Eu6cqnED7, PostID=z324iIg1fpvSr5r
-
Ok, alors voici comment procéder…
Commence par ajouter une datacard personnalisée à ton formulaire. Ajoutes-y un libellé puis une combo box appelée DataCardValueIngénieurs (zone de liste déroulante) et assure-toi que sa propriété SelectMultiple est bien à true.
Dans le Items de ta combo box où tu veux choisir les ingénieurs, met juste :
Utilisateurs
. En fait, on considère que ta combo box sert à sélectionner des personnes, donc on pointe directement sur la table des utilisateurs. Assure-toi que tu choisisses bien la colonne Nom complet pour afficher le nom des utilisateurs dans la liste déroulante.Reste à gérer les valeurs par défaut de la combo box et l’enregistrement/chargement des ingénieurs rattachés à une prestation.
Je vais supposer que tu as un formulaire sur ton écran directement branché sur ta table Prestation ; et que ta colonne principale (qui est de type ‘Identificateur unique‘) s’appelle Prestation (c’est souvent le même nom que la table elle-même).
Je vais aussi supposer que tu as bien une table Prestations_Utilisateurs avec 2 colonnes :
-
Prestation : un lookup vers ta table Prestation
-
Utilisateur : un lookup vers la table Utilisateurs
Sur le DefaultSelectedItems de DataCardValueIngénieurs mets le code suivant :
Filter(n Utilisateurs; n systemuserid in ShowColumns(n Filter(n Prestations_Utilisateurs; n Prestation.Prestation = varSelectedPrestation.Prestationn ); n "systemuserid"n )n)
Le Filter() de niveau 2 va chercher tous les utilisateurs rattachés à la prestation qui est en train d’être éditée.
Le Filter() tout en haut va chercher ces utilisateurs directement dans la table Utilisateurs.
Je suppose que la prestation en cours d’édition (potentiellement choisie sur un écran précédent dans une galerie) se trouve dans une variable varSelectedPrestation.
Dans le OnSuccess de ton formulaire, met le code suivant pour rattacher les utilisateurs choisis à la prestation sélectionnée :
RemoveIf(Prestations_Utilisateurs; Prestation.Prestation = Form1.LastSubmit.Prestation);;nForAll(n DataCardValueIngénieurs.SelectedItems As Ingénieur;n Patch(n Prestations_Utilisateurs;n Defaults(Prestations_Utilisateurs);n {n Prestation: varSelectedPrestation;n Utilisateur: Ingénieurn }n )n)
En fait on fait de l’annule-et-remplace…
Voilà… J’ai écris ça un peu à l’arrache… Le principe est là… Si tu as des erreurs, n’hésite pas à revenir vers moi. J’essaierais de reproduire ton cas plus précisément demain pour corriger 2 ou 3 petites choses si nécessaire.
CommentID=qwCzQUj8OVUU52Z, PostID=z324iIg1fpvSr5r
-
-
Ok, parfait. Autre question : ta liste d’ingénieurs c’est une liste que tu as créé toi ou tu comptes utiliser la liste standard Utilisateurs ?
CommentID=gYS9wl8TEeQLtvu, PostID=z324iIg1fpvSr5r
-
Zliga Oumaima est-ce que tu peux d’abord préciser ton cas de figure stp :
-
C’est l’utilisateur connecté qui se voit affecté plusieurs prestations
-
L’utilisateur connecté choisit une prestations et lui affecte plusieurs utilisateurs
-
L’utilisateur connecté choisit un utilisateur et lui affecte plusieurs prestations
CommentID=lgD8PIopDqOeZG7, PostID=z324iIg1fpvSr5r
-
-
Zliga Oumaima, les combo box dans Power Apps ne supportent pas les relations N:N du Dataverse.
Et c’est normal que tu ne voies pas de colonnes pour représenter ta donnée multiple : elle n’existe pas. Comme indiqué par DavidZed lorsque tu crées une relation N:N le système crée une table cachée avec, en gros, 2 colonnes : une colonne contenant l’identifiant de ta première table et une colonne contenant l’identifiant de ta deuxième table. C’est tout. C’est comme ça que tu peux avoir 1 enregistrement de ta table 1 liées à plusieurs enregistrements de ta table 2.
Et comme indiqué aussi précédemment par DavidZed, une solution plus commode consiste à créer toi-même ta propre table N:N. Ca veut dire :
-
supprimer la relation N:N que tu as créée (la “Prestations <-> Utilisateur“)
-
créer une table Prestations_Utilisateur avec 2 colonnes :
-
une colonne de lookup vers ta table Prestations
-
une colonne de lookup vers la table Utilisateur
-
Et si tu veux avoir une combo box à valeurs multiples dans ton formulaire pour gérer ces relations Prestations – Utilisateurs, il va falloir tout gérer à la main :
-
créer une datacard personnalisée
-
y ajouter une combo box
-
alimenter la combox box à partir de la table Prestations_Utilisateurs à laquelle il te faudra ajouter une colonne avec un AddColumns() pour avoir à disposition le libellé des prestations pour l’utilisateur (ou des utilisateurs pour une prestation, selon ce que tu veux)
-
gérer là mise à jour des données dans le OnSuccess() du formulaire (perso, je ferais carrément un annule-et-remplace des liens en virant d’abord tous les liens existant l’utilisateur puis en recréant ceux pour les prestations sélectionnés dans la combo box)
Comme tu peux le voir, le N:N dans le Dataverse c’est un peu l’enfer… 😅
Est-ce que ça t’aide ? Est-ce que tu vois à peu près comment procéder ?
CommentID=zKIo5vlSqgr1QWl, PostID=z324iIg1fpvSr5r
-
-
ChezWam c’est comme on dit “by-design”… 😅
C’est marrant, avant-hier au aMS Sophia Antipolis, Rémi Delarboulas (qui a travaillé avec l’équipe PowerCAT de Microsoft), lors de sa session, a justement expliqué qu’actuellement Power Apps n’est pas capable d’identifier les colonnes utilisées par l’application lorsque l’on fait un
ClearCollect(colMaCollection; MaTableDataverse)
si l’option Sélection de colonne explicite est activée. Le ClearCollect() n’alimente que la colonne principale ainsi que la colonne qui contient le GUID des enregistrements de la table.Il faut donc utiliser l’astuce d’Alexandre Perret ou encore spécifier clairement les colonnes à rapatrier :
ClearCollect(n colMaCollection;n ShowColumns(n MaTableDataverse;n "MaColonne1";n "MaColonne2";n "MaColonne3";n ...n )n)
Inconvénient : du coup les noms des colonnes dans ta collection seront les noms techniques et non plus les libellés d’affichage.
Du coup, c’est la solution d’Alexandre Perret qui est la plus pratique car les noms des colonnes sont bien les libellés d’affichage.
Et surtout, ne pas désactiver l’option Sélection de colonne explicite au risque de voir les perfs de son application chuter drastiquement… 😉
CommentID=EVhw9nbVZ01B4nF, PostID=k6g7xoF01YEzi9Y
-
R3dKap
Membre1 février 2023 à 13h25 en réponse à: Filtrage Lookup par rapport à un autre lookup Multi Sélection (dans Sharepoint)Ah si tu n’as que Id et Value sur ta cbx_Departement c’est qu’elle est alimentée avec un Choices() sur ta colonne Département d’une de tes listes. Du coup, effectivement comme ça c’est bon…
Pour ton problème de délégation, très simple : je doute que tu aies plus de 2000 centres de coûts (500 j’ai vu). Donc, monte le nombre max de ton app dans les paramètres à 2000 puis charge ta table Centre de coût dans une collection et fait ton IN sur la collection. T’auras plus de souci de délégation.
D’ailleurs, vu que ta table des départements ne dépasse pas les 50, tu peux aussi la charger en collection et ne bosser qu’avec la collection. Tous les appels à la source de données que tu peux éviter, c’est de la consommation de ressources en moins… 😉
CommentID=3DxW470TXWT0mFa, PostID=I8KHeSTnogKHPNh
-
R3dKap
Membre1 février 2023 à 13h10 en réponse à: Filtrage Lookup par rapport à un autre lookup Multi Sélection (dans Sharepoint)Robin Navarro comme tu le sais probablement, l’opérateur IN ne fonctionne que sur des tables à une seule colonne. Puisque tu as sûrement branché directement ta liste Départements sur ta cbx_Departement, la propriété SelectedItems récupère toutes les colonnes pourries de SharePoint en plus de la Title.
Il faut qu’à droite du IN tu fasses un ShowColumns() pour ne garder que la colonne Title du
cbx_Departement.SelectedItems
…Je pense que ça vient de là…
CommentID=ByblqpxM9Oq7gWS, PostID=I8KHeSTnogKHPNh
-
R3dKap
Membre31 janvier 2023 à 14h05 en réponse à: Affichage dans une Listbox les établissements (colonne Lookup) issu d'un filtrePhilippe CULOT essaie avec
Lower(scEmailUser) = Lower(gloUser.Email)
.Les quotes simples ne sont nécessaires pour les noms des champs que s’il y a des espaces ou des quotes dans les noms des champs. Donc ici, comme tu utilises le nom technique, pas besoin. Et si tu fais un Lower() d’un côté, faut le faire de l’autre côté aussi (sauf si tu es certains que tout est déjà en minuscule). Sinon il suffira d’une majuscule quelque part pour qu’il ne te ramène rien.
CommentID=cycZDPVMkRIJgz2, PostID=B506ZExFZguurO4
-
sabrina je suis pas sûr de comprendre ta question. Qu’appelles-tu la “version préliminaire” de PVA ?
Parce-que Power Virtual Agents est Generally Available (en production) depuis décembre 2019 😉 :
CommentID=sYVfM1dqeS1R7m6, PostID=LOefnpW1VowUtq7
-
Fred Deligne effectivement pas possible à l’aide du connecteur depuis Power Apps.
Mais as-tu essayé à partir de Power Automate ?
CommentID=5do0LmtRw7CCOmg, PostID=HcXS8oYBGmhDxIT
-
Salut Didier ALTIDE,
Ne rate pas le prochain French Power Break, y’a une session dédiée à Power Virtual Agent ! 😉
Je posterais une annonce dans l’espace Evénements d’ici quelques jours…
CommentID=vVokXNKHwBtycNE, PostID=3f7p0qlJ3hdnoNj