R3dKap
Expert Power AppsRéponses céées sur le Forum
-
Nickel Delphine… Très clair, merci ! 👍
Le modèle de données
Alors tu vois, clairement dans ton cas j’identifie tout de suite qu’en fait il te faudrait une liste des critères. Car c’est une information que tu retrouves dans 2 autres listes. A partir du moment où une information (qui identifie quelque chose de tangible) se retrouve dans plus d’une liste, c’est qu’il faut lui prévoir une liste dédiée.
Idem pour les points de contrôles… 😉En fait, rien qu’en lisant les 2 phrases de ton besoin métier au début de ton dernier post, je me suis tout de suite dit : donc il faut une liste des points de contrôles, une liste des critères, une liste qui spécifient quels critères sont vérifiés sur chaque point de contrôle et une dernière liste qui permette de stocker les relevés fait chaque jour.
Le fait de partir sur une structuration des données de cette manière (avec des liens entre les listes) clarifie les choses et te simplifie tout par la suite…Mais c’est pas grave… Tu as déjà bien avancé donc on va rester là-dessus… Essaie de t’appliquer cette règle pour la prochaine fois. 😉
Rapport journalier
Avant de chercher à optimiser, faut chercher à faire simple. La solution simple consisterait à récupérer dans liResultatsControles toutes les lignes du jour où SommeDefauts > 0. Ensuite, on bouclerait sur ces lignes pour générer le code HTML de chaque ligne du 2è tableau en allant chercher à chaque fois dans la liste liPointsControles le libellé des critères concernés.
Ce qui n’est pas très optimisé c’est qu’on va faire des tas de requêtes à liPointsControles pour aller rechercher à chaque fois le bon libellé du critère. L’idéal consisterait à charger une seule les lignes de liPointsControles dont on a besoin pour ensuite travailler uniquement avec des variables… Mais ça peut vite prendre la tête… Donc faisons simple pour l’instant.
Vu ton niveau je pense que faire une boucle sur liResultatsControles puis rechercher le bon libellé de chaque critère dans liPointsControles tu devrais y arriver non ?
Qu’en penses-tu ? Appelle à l’aide sinon… 😊
CommentID=MMqPFsE25PjDUmV, PostID=h9tWwTqhOvUkZFM
-
Jonathan FRANÇOIS je te suggère ceci :
...n<h1>1. Liste récapitulative des observations</h1>n<br>" & If(IsEmpty(Gallery4.AllItems); "Sans observations"; "<ol>" & Concat(Gallery4.AllItems; $"<li>{Obs}</li>") & "</ol>"n) & "<br>n...
CommentID=y9uzThvtpm0S4io, PostID=NYYo632IvcTJ4vP
-
C’est parce-que c’est les vacances… 😋
Merci pour tout le détail… Avant de me plonger à fond dedans je vais tenter un tour de passe-passe passk’on sait jamais qu’on puisse éviter tout ça… >>> A quoi va te servir cette Table2 au final ? Tu veux générer un PDF ? Envoyer un tableau par mail ? Construire un fichier ?
Autre approche intéressante : oublions totalement la technique et explique-moi ce que tu veux faire (parle-moi uniquement besoin, métier et données). Décris-moi ton modèle de données (tes listes SharePoint avec leurs colonnes). Ensuite dis-moi ce que t’as déjà fait : une app ici pour faire ça, un flux là appelé par l’app pour faire ceci, etc.
En fait ce qui m’intrigue dans ton histoire, c’est pourquoi générer autant de tables dans ton flux ? Pourquoi ne pas travailler directement avec des boucles imbriquées sur les différents listes SharePoint ?
Bon ça fait bcp de questions… Je te laisse bosser… 😅
CommentID=2dWKM6y8pDA4cf2, PostID=h9tWwTqhOvUkZFM
-
Delphine c’est pas du JS, c’est du “Power Automate” maison : le Workflow Definition Language… 😅
Alors ta tentative est la bonne mais de ce que je comprends du message d’erreur
variables('Table')[0]
te retournes une chaîne et pas une structure à plusieurs colonnes.Est-ce que tu peux nous montrer comment tu construis ta table ?
CommentID=2CxkSNM2W6ITLmI, PostID=h9tWwTqhOvUkZFM
-
ChezWam tu ne peux pas, à partir de Power Apps, faire un lien vers un fichier qui est stocké sur un serveur de fichiers externe au cloud Microsoft. La solution la plus simple serait de mettre tes PDF dans une bibliothèque SharePoint comme le montre DavidZed …
CommentID=aZGVQbZrkzx4lDL, PostID=hUmIG8SYVPZ7GjW
-
Jonathan FRANÇOIS essaie ceci :
Concat(Gallery4.AllItems; $"<li>{Obs}</li>")
Et pense à enlever le
<li>
et le</li>
qui sont juste au-dessus et en-dessous de ton Concat()…CommentID=fZY4eIWCUcp3CB2, PostID=NYYo632IvcTJ4vP
-
R3dKap
Membre7 juillet 2022 à 20h37 en réponse à: problèmes avec la fontion "Patch" appliquée à un champs groupes & personnesOk, alors commençons par ce champ Progress…
Pourquoi définir une collection Prog dans ton App.OnStart pour alimenter ton DataCardValue31 ?
Tu utilises des datacards donc tu as un formulaire qui, je suppose, doit être branché sur ta liste SharePoint. Si c’est bien le cas, ton DataCardValue31 devait contenir au début un code qui ressemblait à ceci :
Choices(TaListe.TonChampProgress)
Pourquoi l’avoir enlevé ?
Ce code a l’avantage de générer automatiquement une table dont la structure correspond à ton champ côté SharePoint. Et du coup dans un Patch() il te suffirait alors de mettre ceci :
{Progress: DataCardValue31.Selected}
. Mais puisque tu as changé la structure des données qui alimentent ton DataCardValue31, tout se complique… C’est pas impossible à faire mais c’est un poil plus touchy…CommentID=UaEHSXYmQxoJisH, PostID=qav2GO1hmjc2PWF
-
R3dKap
Membre8 juillet 2022 à 12h31 en réponse à: problèmes avec la fontion "Patch" appliquée à un champs groupes & personnesRedonne-moi le lien du tuto d’April pour que je regarde pourquoi elle fait ça ?
Parce-qu’en plus j’ai pas poussé plus loin hier, mais en fait si ton utilisation du formulaire est basique, tu n’as pas à faire de Patch(). Un simple appel à la fonction SubmitForm() suffit à créer ou mettre à jour tes données selon le mode du formulaire. Est-ce que tu me suis ou tu as besoin de plus d’infos ?
Sinon décris-moi un peu plus ton app et ce que t’essaies de faire…
Faut absolument que je démarre mon projet de mini-vidéos sur pleins de petits sujets comme expliquer en détail comment fonctionne chaque contrôle de Power Apps… 😅
SubCommentID=cdzizRjXYIXOCq8, CommentID=UaEHSXYmQxoJisH, PostID=qav2GO1hmjc2PWF
-
-
R3dKap
Membre5 juillet 2022 à 14h05 en réponse à: problèmes avec la fontion "Patch" appliquée à un champs groupes & personnesSalut styve,
A mon avis, l’erreur que tu as sur ta capture initiale se situe au niveau du sous-champ Claims qui n’est pas au bon format.
Pour rappel (et comme on le voit bien sur ta capture), une colonne de type User dans SharePoint a la structure suivante :
t{nt DisplayName: "";nt Claims: "i:0#.f|membership|email@domain.com;nt Department: "";nt Email: "";nt JobTitle: "";nt Picture: Blank()nt}
Comme tu le vois, le Claims doit être formatté ainsi :
i:0#.f|membership|<adresse mail>
Donc ton la partie concernée de ton Patch() doit ressembler à ceci :
'User assigned': {n Claims: "i:0#.f|membership|" & DataCardValue3.Selected.Email;n Department: "";n DisplayName: DataCardValue3.Selected.DisplayName;n Email: DataCardValue3.Selected.Email;n JobTitle: "";n Picture: Blank()n}
Je préfère mettre Blank() pour Picture vu que c’est censé être de la données d’image brute, mais comme y’en pas Blank() c’est bien. Mais je pense que “” marche aussi…
Tu noteras aussi la disparition du ‘@odata’ : tu peux les enlever partout dans ton code ; ils ne servent plus à rien aujourd’hui. C’était pertinent y’a encore quelques années quand le système n’était pas capable de reconnaître automatiquement le format des données. Aujourd’hui c’est le cas… 😉
Maintenant, comme le dis DavidZed si ta colonne SharePoint est bien de type User, pas besoin de détailler la structure dans ton Patch(). Tu devrais pouvoir l’écrire simplement comme ceci :
'User assigned': DataCardValue3.Selected
A priori tu as aussi un souci avec ton champ Progress. Pour le solutionner il faudrait que tu nous dises ce que tu as dans le Items de ton DataCardValue31 et SURTOUT quelle est le type de la colonne SharePoint associée ?
Je te recommande de mettre en commentaire dans ton Patch() les champs qui posent problème, histoire d’avoir déjà un Patch() sans erreur. Puis ensuite, décommente les champs au fur et à mesure et corrige les erreurs au fur et à mesure. Sinon t’as plusieurs erreurs simultanées et quand t’en corriges une tu ne sais pas si elle est vraiment corrigée parce-qu’il y en a potentiellement une autre… 😉
NOTE : les DisplayFields et SearchFields n’ont absolument aucun impact sur l’enregistrement dans ta source de données ; ces propriétés influent uniquement sur le comportement à l’écran (champs à afficher et champs à utiliser pour la recherche).
CommentID=PaEG70CxhVeRizp, PostID=qav2GO1hmjc2PWF
-
ChezWam perso je n’utilise plus que le conteneur horizontal et vertical… Faut s’y coller pour bien comprendre comment ça marche, mais une fois que tu maîtrises le gain de temps est absolument phénoménal !
Le conteneur classique je ne l’utilise que lorsque j’ai besoin de superposer des éléments… 😉
Si t’as besoin d’aide sur les horizontal et vertical, n’hésite pas… 🙂
CommentID=E2a2JP21oIs25L0, PostID=Ou7N3h97YjZ7d0L
-
R3dKap
Membre29 juin 2022 à 20h44 en réponse à: Navigate between screens based on checkbox value on power appsSalut Ahmed Njimou,
Si tu as toujours un souci là-dessus voici comment je procèderais (mets tes propres noms de checkbox et d’écrans)…
CheckboxRéservoir.OnCheck = Collect(colNav; {Ordre: 1; Ecran: EcranRéservoir})nnCheckboxRéservoir.OnUncheck = Remove(colNav; {Ordre: 1; Ecran: EcranRéservoir})nnCheckboxPoste.OnCheck = Collect(colNav; {Ordre: 2; Ecran: EcranPoste})nnCheckboxPoste.OnUncheck = Remove(colNav; {Ordre: 2; Ecran: EcranPoste})nnCheckboxPomperie.OnCheck = Collect(colNav; {Ordre: 3; Ecran: EcranPomperie})nnCheckboxPomperie.OnUncheck = Remove(colNav; {Ordre: 3; Ecran: EcranPomperie})nnCheckboxDCI.OnCheck = Collect(colNav; {Ordre: 4; Ecran: EcranDCI})nnCheckboxDCI.OnUncheck = Remove(colNav; {Ordre: 4; Ecran: EcranDCI})
Ecran d’accueil (celui avec tes checkbox)
EcranAccueil.OnVisible = Clear(colNav);; Reset(CheckboxRéservoir);; Reset(CheckboxPoste);; Reset(CheckboxPomperie);; Reset(CheckboxDCI)nnBoutonNext.OnSelect = ClearCollect(colNav; Sort(colNav; Ordre));; Set(gloNavIndex; 1);; Navigate(Index(colNav; gloNavIndex).Ecran)
Ecran Réservoir
BoutonNextRéservoir.OnSelect = Set(gloNavIndex; gloNavIndex+1);; Navigate(If(gloNavIndex > CountRows(colNav); Home; Index(colNav; gloNavIndex).Ecran))
Et mets ce même code sur chacun des boutons NEXT des écrans Poste, Pomperie et DCI.
Voilà, j’ai testé chez moi ça marche… 😉
CommentID=924ZpiD6tZZpx55, PostID=7o23zXbRD74XcQt
-
Salut Tanguy Badier,
Je n’ai pas eu l’occasion d’expérimenter ce genre de comportement mais en te lisant il me semble que le pb provienne quand même du réseau interne puisqu’à priori tu dis qu’elle fonctionne sur un réseau externe…
Désolé de pas pouvoir t’aider plus…
CommentID=0IX59AIebqjdLg0, PostID=pD1zpVyb6kIRfwi
-
R3dKap
Membre10 juin 2022 à 10h57 en réponse à: Ignorer les modifications lors de la synchro SharePointC’est plutôt étonnant… Je n’ai pas remarqué ce genre de choses de mon côté…
CommentID=3oviCqoW21s5g8u, PostID=3neMteHARqkgTAn
-
R3dKap
Membre10 juin 2022 à 10h54 en réponse à: Envoyer une entrée d'agenda à un utilisateur Outlook en fonction de critèreVincent HERY lorsque tu envoies un mail depuis Automate, tu peux spécifier l’expéditeur. Mais il faut pour cela que tu aies les droits sur la boîte mail d’expédition, comme indiqué dans le texte d’aide affiché dans le champ :
CommentID=8fYKHgqUk5k66pZ, PostID=6visKTVe5BfNTIN
-
R3dKap
Membre29 juin 2022 à 20h52 en réponse à: Activer la fonction/bouton "Export to PDF" dans une application Model DrivenSalut Youcef,
Alors finalement de notre côté, nous lançons un flux Power Automate qui se charge de construire de l’HTML qui est ensuite converti en PDF. C’est ce que je faisais avant.
Donc, on utilise pas de doc Word (je suis pas fan d’ailleurs)…
Est-ce que tu pourrais pas faire pareil : un flux qui génère de l’HTML puis le converti en PDF ? Resterait à voir comment déclencher le flux : un événement sur une table dataverse ? une mini-app canvas incrustée sur une de tes pages model-driven, avec juste un bouton pour déclencher le flux ?
SubCommentID=j3SP6HSlv5tyutD, CommentID=OLSyoSOmaKAGMdJ, PostID=PPEcpDVStySOmlk