R3dKap
Expert Power AppsRéponses céées sur le Forum
-
R3dKap
Membre31 mai 2023 à 13h29 en réponse à: Récupération du statut de disponibilité d'un utilisateur grâce à son calendrier outlook 365MUD voici comment procéder sans passer par un connecteur personnalisé et du Graph et tout ça… 😉
Set(n colTimes;n Office365Outlook.FindMeetingTimesV2(n {n RequiredAttendees: "toto@titi.fr";n Start: DateTime(2023;6;8;14;15;0;0);n End: DateTime(2023;6;8;15;15;0;0);n MeetingDuration: 30;n ActivityDomain: "Unrestricted"n }n ).meetingTimeSuggestionsn)
Cette action du connecteur Office365Outlook va rechercher tous les créneaux disponibles (dont la durée est indiquée dans MeetingDuration, en minutes) pour la personne dont l’adresse mail est spécifiée dans RequiredAttendees, et ce entre Start et End.
Le résultat est une table qui ressemble à ça :
Chaque ligne est un créneau disponible et la colonne meetingTimeSlot contient 2 champs : start et end qui correspondent aux dates/heures de début et de fin de chaque créneau.
Avec ça tu devrais pouvoir détecter les dispos que tu veux… 😉
CommentID=BNocz273cTfzwdt, PostID=LDljy74iS1cn798
-
R3dKap
Membre31 mai 2023 à 12h29 en réponse à: Comment faire pour qu'un "Icon" change à chaque clic "OnSelect" avec 3 états differents minimumNels voici comment faire :
Il te faut d’abord une collection avec les icônes concernés :
Set(n colIcons;n Table(n {n Id: 1;n Icon: Icon.Addn };n {n Id: 2;n Icon: Icon.Newspapern };n {n Id: 3;n Icon: Icon.Redon };n {n Id: 4;n Icon: Icon.ChevronDownn }n )n)
Ensuite il te faut initialiser une variable avec l’index de l’icône en cours (à faire par ex. dans le OnVisible de ton écran ou le OnStart de ton app) :
Set(colIconsIndex; 1)
Ensuite, tu places un icône sur ton écran et tu le paramètre comme ceci :
MyIcon.OnSelect = Set(colIconsIndex; colIconsIndex * (Mod(colIconsIndex; CountRows(colIcons)) <> 0) + 1)nMyIcon.Icon = Index(colIcons; colIconsIndex).Icon
Et voilà… 😊
CommentID=Tp2sVcUTtr0mi9O, PostID=Azpu8gtwOJZAVRt
-
Salut Lilian,
Lorsque tu as un décalage de ce genre c’est qu’il y a un souci avec un fuseau horaire quelque part : vérifie le fuseau horaire de ton PC, de ton environnement, de ton navigateur, de ton compte O365, un peu partout où tu peux… 😅
Où sont stockées tes données ? SharePoint ou Dataverse ?
CommentID=hZlFB35lvO0rSqg, PostID=vjUD4FBHnrh2fx7
-
Sylvain, JLF, Jean-Rémy Gallapont, Nels, DavidZed
J’ai eu confirmation par l’équipe MS Power Apps via la mailing-list MVP que le fix a été appliqué à toutes les régions pas plus tard qu’hier samedi 27 mai 2023.
Si vous voulez corriger vous-même manuellement le problème, il vous suffit de recharger l’icône de votre app et de la republier.
Sinon, un correctif automatique va être appliqué courant de semaine prochaine pour réparer toutes les icônes des apps impactées.
Voilou… 😉
CommentID=RakFITGOgkAzkZW, PostID=ediKE23Z4Vtds9t
-
R3dKap
Membre27 mai 2023 à 15h33 en réponse à: power Apps : condition de visibilité pour les membres d'un groupeSalut Diane Niango,
C’est tout à fait possible. Voici comment faire (testé de mon côté) :
User().Email in GroupesOffice365.ListGroupMembers(First(GroupesOffice365.ListGroups({'$filter':"displayName eq 'Team Site FR'"}).value).id).value.mail
Tu remplaces juste
Team Site FR
par le nom de ton groupe à toi… 😊Remarque supplémentaire : écrire
If(<test>; true; false)
revient à écrire juste<test>
. Donc, il suffit que tu mettes le code ci-dessus dans la propriété Visible de ton bouton et ça fonctionnera… 😉CommentID=WNH5cchzIwac9oW, PostID=iisV1AMMgJB12Oy
-
R3dKap
Membre30 mai 2023 à 14h11 en réponse à: power Apps : condition de visibilité pour les membres d'un groupeAvec plaisir… 😉
Oui tu peux utiliser l’action suivante dans un Power Automate pour lister les membres d’un groupe :
SubCommentID=JDddUMtcZjT6JPv, CommentID=WNH5cchzIwac9oW, PostID=iisV1AMMgJB12Oy
-
-
Salut ypicot,
Pour commencer, petite remarque sur “…un OneDrive commun…” : quand je lis ça, ça me pose souci. Nombreux sont ceux qui utilisent OneDrive comme espace de partage de fichiers entre plusieurs personnes d’une même équipe. Mais il faut garder à l’esprit que OneDrive est à la base un outil PERSONNEL (bien qu’il existe évidemment une fonction de partage). Le partage c’est juste pour “montrer” à une autre personne le contenu d’un document plutôt que de l’envoyer par mail. Mais OneDrive n’est pas fait pour partager un fichier entre 10 users pour bosser sur des données “de prod”.
Pour ça il y a SharePoint : c’est à ça justement que sert SharePoint. On y met des fichiers qui sont utilisés (éventuellement simultanément) entre de nombreux utilisateurs pour y faire du partage de données. Donc, je dirais pour commencer que dans ton cas ton fichier devrait être placé dans une bibliothèque SharePoint où chaque personne a les bons droits pour accéder au fichier.
Ensuite, pour répondre à ta problématique…
Je suis pas un grand spécialiste de l’authent’ en général, mais à mon avis le souci vient du fait que les infos de connexions sont enregistrées avec la requête Power Query dans le fichier Excel et donc ce sont ces infos que le système tente d’utiliser pour se connecter au SharePoint alors le user connecté n’est pas le même.
J’ai pas fait des tonnes de Power Query depuis Excel vers SharePoint mais je suppose que c’est toi qui a manuellement attaqué la liste SharePoint depuis ton fichier Excel et qui a donc renseigné ces infos de connexions à ce moment-là.
Du coup, je pense à une autre piste : depuis la liste SharePoint, tu utilises la fonction d’export vers Excel. Il te génère un fichier query.iqy que tu peux ouvrir dans Excel et le système va chercher le contenu de la liste SharePoint via une connexion ODATA qui doit être différente de celle de ton Power Query. Une fois ton fichier d’export ouvert dans Excel, tu as une liaison directe vers ta liste SharePoint : à chaque fois que tu ouvriras ce fichier Excel, il requêtera ta liste et tes données seront à jour. Charge à toi ensuite d’ajouter dans ce fichier le reste de ton fichier Excel qui est sur ton OneDrive. Et je pense (mais ça reste à vérifier) qu’avec ce système, du moment que l’utilisateur connecté a bien accès à la liste SharePoint, le fichier se mettra bien à jour avec les données de la liste SharePoint. Et profites-en pour mettre ton fichier final directement quelque part dans SharePoint aussi, idéalement sur le même site que ta liste.
Je sais pas si tu vois ce que je veux dire ? Pas facile à expliquer…
CommentID=3HqLxyIMtapMOsu, PostID=k1j3a8bGWkJSjPk
-
Salut Bree, (argh ! j’ai perdu la réponse que je t’avais préparé avant que tu ne déplaces ton post au bon endroit… 😅)
Donc… La limite des 2000 éléments est là pour une bonne raison : inciter les développeurs à réduire les éléments affichés à un instant T sur l’écran d’une application Power Apps. C’est pourquoi en règle général on met en place des filtres qui permettent à l’utilisateur de réduire sa sélection à moins de 2000 éléments. Parce-que finalement, qui a besoin d’avoir plus de 2000 éléments à l’écran alors qu’en général on cible un élément en particulier pour l’éditer ou autre ?
Pour quelle raison as-tu besoin d’aller au-delà des 2000 ? On peut peut-être trouver une solution plus élégante…
Si toutefois c’est vraiment nécessaire, la seule vraie solution est la 2è option présentée ici par Matthew Devaney dans son article :
CommentID=7jg1Pf91OzSZiqM, PostID=jXULrEeepewANeI
-
-
Ok, nickel. Alors, l’utilisation de la collection sur ta galerie c’est uniquement si tu es certains de pouvoir toujours limiter la quantité d’éléments rapatriés de ta liste SharePoint à moins de 2000 éléments, car Power Apps ne pourra pas aller au-delà. Dans le cas contraire je te suggère de brancher ta galerie directement sur ta liste SharePoint.
Du coup, voilà ce que je te propose de faire :
-
Dans la galerie tu rajoutes un icône (n’importe lequel, j’utilise souvent le “+”) avec
X=0
,Y=0
,Width=Parent.TemplateWidth
,Height=Parent.TemplateHeight
et tu lui mets une couleur transparente partout pour qu’on ne voie jamais le “+” ni au survol ni au clic. L’avantage d’utiliser un icône c’est que l’on voie une main au survol lorsqu’il est cliquable (DisplayMode = Edit) et une flèche lorsqu’il n’est pas cliquable (DisplayMode = Disabled). -
Assure-toi que ton icône poubelle rouge soit bien placé au-dessus de cet icône “+”
-
Met la formule suivante dans la propriété DisplayMode de cet icône “+” :
If(ElecValue = 100 || ElecValue = 200; DisplayMode.Disabled; DisplayMode.Edit)
. Je te laisse remplacer ElecValue par la colonne de ta source de données qui contient cette info bien sûr 😉 -
Dans la propriété OnSelect de cet icône “+” met ceci :
UpdateContext({locSelectedItem: ThisItem})
-> On définit l’élément en cours dans une variable locale -
Supprime tout ce qu’il y a dans la propriété OnSelect de ta galerie (on en plus besoin, c’est l’icône “+” qui pilote la sélection)
-
Ah, je te propose aussi de mettre ceci dans la propriété DisabledFill de l’icône “+” :
If(Self.DisplayMode = DisplayMode.Disabled; RGBA(0;0;0;0,1)
. Comme ça, l’utilisateur identifiera tout de suite les éléments sur lesquels il ne pourra pas cliquer). -
A ta place j’enlèverai même l’icône “>” qui n’a pas trop de sens ici vu qu’on ne navigue pas vers un autre écran (on l’utilise plutôt lorsque l’on va vers un autre écran et que l’on utilise une transition d’écran qui glisse de la droite vers la gauche par ex.)
-
Supprime le bouton MODIFIER
-
Supprime tous tes champs
-
Supprime ton bouton SAUVEGARDE FINALE
-
Déplace ton icône de sortie plutôt en haut à droite de l’écran à côté du logo car là il est trop près du bouton de sauvegarde (disquette) -> pas recommandé en terme d’UX/UI 😉
-
A l’intérieur du cadre bleu rajoute un contrôle formulaire Form1 et tu mets les champs nécessaires
-
Dans Form1.Datasource tu mets directement ta liste SharePoint
-
Dans Form1.Item tu mets
locSelectedItem
-
Sur le OnSelect de ton bouton de sauvegarde (disquette) tu mets juste :
SubmitForm(Form1)
-
Dans Form1.OnSuccess tu mets :
Notify("Votre commentaire a été enregistré avec succès; NotificationType.Success; 4000);; UpdateContext({locSelectedItem: Blank()})
-
Modifie la propriété OnSelect de l’icône “+” ajouté dans la galerie :
UpdateContext({locSelectedItem: ThisItem});; EditForm(Form1)
-
Sur le OnSelect du bouton NOUVELLE SAISIE met ceci :
NewForm(Form1)
-
Sur le Visible de ton cadre bleu :
Not(IsBlank(locSelectedItem)) || Form1.Mode = FormMode.New
-> le cadre bleu avec le formulaire et le bouton d’enregistrement est visible si on a cliqué sur un élément (il y a une valeur dans locSelectedItem) ou si on a cliqué sur NOUVELLE SAISIE et que donc le mode du formulaire est New. -
Du coup, sur le OnVisible de ton écran il faut que tu mettes :
EditForm(Form1)
pour que par défaut ton cadre bleu ne s’affiche pas.
Voilà je pense qu’on a fait le tour. Et à ta place je brancherais direct ma galerie sur la liste SharePoint et je laisserais tomber la collection. Ca complexifie les choses et pour l’instant tentons déjà de le faire marche en direct. On pourra voir plus tard pour optimiser les perfs mais à mon avis déjà comme ça ça devrait rouler…
Hésite pas si t’as des questions…
CommentID=Lvf4ogsqiFhjkzZ, PostID=y6FfHKyETCODL84
-
-
Ok, je vois. Je pense avoir compris : tes lignes ELEC 100 et ELEC 200 (que tu appelles des lignes de rubriques) sont les lignes “parentes” des lignes ELEC 101 à 199 (que tu appelles des lignes de commentaires). C’est probablement la raison pour laquelle tu as mis un petit triangle noir à côté du libellé de ces lignes-là.
Et donc ce que tu veux c’est que lorsque l’on clique sur les lignes de rubriques on ne puisse pas les modifier dans les champs NRJ, Ordre, Commentaire, etc. du bas. Mais que seules les lignes de commentaires peuvent être modifiées.
C’est bien ça ?
Si c’est ça ce ta cible, je te propose de revoir un peu la manière dont ton écran est organisé pour en faciliter l’utilisation pour tes utilisateurs et pour en faciliter aussi la gestion et le coding pour toi.
L’idée générale serait la suivante :
-
On enlève le bouton MODIFIER car il n’a pas trop d’utilité ici. C’est lorsque l’on clique sur un élément qu’on peut directement le modifier.
-
On affiche le formulaire QUE lorsque l’on a cliqué sur un élément de la galerie ou que l’on a cliqué sur le bouton NOUVELLE SAISIE. Sinon on le masque et la galerie offre alors plus de hauteur pour faire défiler les éléments.
-
On utilise pas la propriété Selected de la galerie qui n’est pas pratique car elle a TOUJOURS une valeur. Donc, impossible de “dire à la galerie” qu’aucun élément n’a été sélectionné par l’utilisateur.
-
On va placer un icône par dessus toute la surface de l’élément répétitif de la galerie pour qu’on puisse conditionner son DisplayMode et permettre selon certains critères de cliquer dessus pour éditer un élément ou justement de ne pas pouvoir cliquer dessus et ne pas éditer un élément.
Mais avant que je te donne les instructions, j’ai besoin de savoir quelle est ta source de données : SharePoint ? Fichier Excel ?
Et il me faudrait la formule que tu as mise dans la propriété Items de ta galerie stp.
Et dernière question : je suppose que les champs de saisie tu les as placés à la main et tu n’utilises pas le contrôle Formulaire de Power Apps, exact ? Si oui, pourquoi n’utilises-tu pas un contrôle formulaire ?
CommentID=fA2K6q53fcW6FxZ, PostID=y6FfHKyETCODL84
-
-
Qu’est-ce que tu veux dire par “Rubrique est mon 1er row” ?
Tu pourrais mettre une capture avec quelques explications ? Possible pour toi ?
CommentID=xdXgiAh7LO6Nrdo, PostID=y6FfHKyETCODL84
-
C’est normal… Le OnSelect d’une galerie est déclenché même si tu cliques en dehors de tout contrôle… 😅
CommentID=aS7s20o4KemVYL2, PostID=y6FfHKyETCODL84
-
Thomas, lorsque tu connectes un fichier Excel à Power Apps, le système crée une colonne __PowerAppsId__ où chaque ligne a un identifiant unique (mais cette colonne n’est pas accessible depuis l’application). Du coup, si tu crées dans ton fichier Excel une colonne MyPowerAppsId ou tu mets une formule qui reprend juste la valeur de la colonne __PowerAppsId__ d’à côté alors tu pourrais utiliser les valeurs uniques de ta colonne MyPowerAppsId pour identifier tes lignes de manière unique.
C’est ce que j’ai fait pour un de mes projets :
Je sais pas si ça peux t’aider…
CommentID=5xtbONmKX4s6Jy6, PostID=64wYXRCNTNA3eq3
-
Salut StevannS,
Si ton objectif c’est de ne pas exécuter ce qu’il y a dans le Gallery.OnSelect pour certains éléments en fonction de certains critères, il te suffit de spécifier cette condition directement dans ton Gallery.OnSelect :
If(n ThisItem.Statut <> "Clôturé";n ...ton code...n)
CommentID=bcl9TlhJxAEOHgP, PostID=y6FfHKyETCODL84