R3dKap
Expert Power AppsRéponses céées sur le Forum
-
A part le travail en bonne intelligence, je vois pas d’autres solutions.
Par contre, ce qui m’interroge vraiment c’est : 5000 utilisateurs sur une même bibliothèque, là ça vaut le coup de creuser le besoin…
Tu peux expliquer ?
CommentID=3U3xzVw58kkAgeH, PostID=aRhSNjRlGrFMcLU
-
@philippe j’ai parcouru en diagonale ton dernier post et du coup je me suis dit qu’avant de valider l’idée des 2 flows il faudrait qu’on prenne 2/3mn pour que je comprenne bien le cas d’usage ; parce-que la solution ne sera pas la même selon les cas…
Donc, pourrais-tu me dire précisément de quelle manière cette liste va être exploitée, et surtout dans quel ordre les opérations vont avoir lieu :
-
Le user crée l’élément dans la liste (d’ailleurs comment crée-t-il cet élément ? Directement depuis SharePoint ? Depuis une application Power Apps ? Le formulaire de la liste est-il customisé avec Power Apps ou utilise-t-il le formulaire natif ?)
-
Le user peut-il/doit-il ajouter une (ou plusieurs) pièces jointes à l’élément qu’il est en train de créer ?
-
Une fois l’élément créé, le user peut-il revenir dessus pour modifier les pièces jointes (ajout/suppression) ? Qu’a-t-il le droit de faire ?
-
Quel est le cas d’usage le plus fréquent ? Il crée l’élément sans PJ puis il les ajoute après ? Ou il met les PJ à la création et parfois, rarement, il revient dessus pour enlever/ajouter des PJ ?
-
Que doit-il se passer lorsqu’un élément de la liste (qui comporte des PJ) est supprimé ?
-
L’objectif, si j’ai bien compris, c’est sauvegarder chaque PJ dans une bibliothèque de documents. De quelle bibliothèque s’agit-il ? Sur l’une de tes captures j’ai vu que tu construisais dynamiquement le nom du dossier cible dans la bibliothèque. Peux-tu me montrer cette formule ? Comment construis-tu ce nom de dossier ?
En remontant dans tes premiers post je suis tombé sur ta première capture de ton premier post où tu avais fait :
-
Lorsqu’un élément est créé ou modifié
-
Obtenir les pièces jointes
-
Pour chaque pièce jointe :
-
Obtenir le contenu de la pièce jointe
-
Créer un fichier
-
S’il n’y avait pas d’autres opérations derrière, je ne vois pas en quoi cela générait une boucle infinie puisque tu ne remodifies pas l’élément qui a déclenché le flux… Etrange… 🤨
CommentID=WWt8f7QWyeCdBIO, PostID=P3kqhLcGFmuRQzy
-
-
Aucun pb… 😉
CommentID=RzdcUO4tbYtF0OK, PostID=ofhJcOFQb78rHLa
-
Elle apparaît sur quelle action cette erreur ?
item/Date_x0020_de_x0020_destruction » doit être de type « String/date ». La valeur de runtime « “” » à convertir n’a pas le format attendu « String/date »
CommentID=jLQ4ZL6Xvnlp2Tj, PostID=U66k14fOZnetmio
-
CQFD 😬
Après on peut toujours tordre l’outil mais évidemment c’est pas l’idéal :
-
tu crées un dossier par utilisateur où il a ses propres fichiers
-
tu casses l’héritage des droits sur le dossier pour qu’il soit le seul à pouvoir supprimer pendant que les autres peuvent modifier ou consulter (pas terrible pour les perfs)
Remarque, tu pourrais directement casser les droits sur le fichier mais alors là c’est encore pire pour les perfs…
CommentID=PBBQEeO3YyoK1PR, PostID=aRhSNjRlGrFMcLU
-
-
Non, ça me paraît bien : simple et efficace… 😉
CommentID=r5lxyUJOb5iaBFJ, PostID=ofhJcOFQb78rHLa
-
J’avais mis une opération de suppression de la pièce jointe une fois qu’elle avait été créée dans la bibliothèque parce-qu’il m’avait semblé que c’est ce que tu avais dit tout au début que tu voulais mais je me suis peut-être trompé.
Bref, y’a aucune obligation bien sûr… Surtout qu’effectivement, t’as intérêt dans ce cas à être sûr que ta PJ a bien été créée dans la bibliothèque avant de la supprimer de l’item de liste sinon tu la perds définitivement… 😬Sinon, première remarque : si pour un élément de ta liste tu as déjà un ‘x’ dans la colonne PJFlow, le flux ne se déclenchera pas si tu fais une modif sur l’élément. Pour qu’il se déclenche il faut que tu retires les ‘x’. Mais je suppose que ça tu l’avais bien compris…
Ensuite, par rapport à ma solution, au début de la boucle j’ai utiliser Obtenir le contenu du fichier plutôt que Obtenir le compte de la pièce jointe. Mais franchement je pense pas que ça joue… Le résultat est le même : on obtient le contenu de la pièce jointe. Par contre dans ton cas, attention à pas te tromper de colonne ID… 😉
Là où je creuserais peut-être un peu plus c’est sur le chemin d’accès du dossier : s’il est mal formatté ou s’il n’existe pas, peut-être que ça marche pas et que le fichier n’est pas créé.
Là en fait il faudrait que tu regardes en détail l’exécution du flux pour voir comment tout ça se déroule… Peux-tu mettre des captures ?
CommentID=h8R52cOeWfbPcAB, PostID=P3kqhLcGFmuRQzy
-
Ah voilà ! Nickel ça… J’ai tout compris, même si y’avait des p’tits trous ou p’tites coquilles à certains endroits (comme “eduxièe” par ex. 😁) -> une bonne pratique (un peu chiante c’est vrai, mais qui marche nickel) que je m’applique quand je rédige quoique ce soit (mail, article, post, etc.) : je le relis une fois en entier juste avant de cliquer SEND 😉.
Alors avant d’aller plus loin, juste une petite question qui a un gros impact sur ta solution actuelle : est-ce qu’au final, le fichier qui est sur ton OneDrive et qui est connecté à ton application Power Apps, tu seras la seule à l’exploiter ? Tu seras la seule à utiliser cette application Power Apps ?
CommentID=LZydYgwOoElod24, PostID=CCWAcEm9qqnSWF3
-
R3dKap
Membre1 avril 2022 à 16h07 en réponse à: Résolu – Affichage des graphiques power BI dans power appsY’a pas de problème… 😊 J’essaie de faire en sorte que les gens utilisent les bons termes pour que l’on se comprenne beaucoup plus facilement… 😉
CommentID=rZVKzcHTsdzZ4sx, PostID=lno4q4WRpCjt0Ei
-
-
Est-ce que l’erreur apparaît lors du transfert de données c’est à dire directement au niveau du déclencheur du flux ou sur une action à l’intérieur du flux ?
-
Pourquoi avoir mis
Text(Blank())
?Blank()
tout seul ça lui plaisait pas ? -
Tu as utilisé le déclencheur Power Apps V1 ou V2 ?
CommentID=eoRPLKNxYuh0eig, PostID=U66k14fOZnetmio
-
-
Cpafo, mais ce qui est relou c’est de voir son Studio complètement redimensionné (et du coup ton appli s’affiche en rikiki passke le Studio lui applique un dézoom automatique)… Perso, l’intérêt ici du composant c’est que c’est juste l’écran que tu es en train de construire qui change de facteur de forme, pas tout ton onglet du navigateur… 😉
CommentID=Rp0inENHOaZCqc7, PostID=HKneRyy4NPAuX6d
-
Bon, par contre, la complexité pour faire ce que tu veux faire n’est pas négligeable :
-
il va falloir extraire le composant Pièces jointes d’un contrôle formulaire pour le mettre directement sur ton écran de l’appli
-
obliger ensuite l’utilisateur à saisir les métadonnées de ces documents (ce que tu appelais la qualification) via un formulaire dédié (ou simplement des champs de saisie)
-
puis sur un clic sur un bouton appeler un flux Power Automate auquel il faudra transmettre :
-
les données brutes de tous les documents
-
leurs métadonnées associées
-
Le rôle du flux sera double :
-
créer les fichiers dans la bibliothèque de documents
-
leur affecter à chacun les métadonnées concernées
En conséquence, le temps de chargement total des fichiers sera un peu plus que doublé :
-
une première fois pour ajouter les documents au contrôle des pièces jointes (et donc à ton application)
-
une deuxième fois pour transmettre tous les documents au flux
-
une dernière fois (mais plus rapide celle-là normalement) pour créer les fichiers dans la bibliothèque
Mais le gros avantage c’est que les métadonnées tu ne les saisis qu’une seule fois pour tous les documents chargés.
Et puis, faudra pas non plus charger 800Mo en une fois… 😉
CommentID=khclLcsNGXvpHPr, PostID=ofhJcOFQb78rHLa
-
-
@Karlemagne oui c’est tout à fait possible… Pas de limite là-dessus à mon avis…
La seule remarque que je pourrais faire par rapport à ce que tu décris c’est : pourquoi CR1 pointerait vers T2.C1 et CR2 pointerait vers T2.C2 ?
Surtout qu’attention… Si T2.C1 est une colonne à valeurs uniques (comme un identifiant par ex.) alors pas de soucis : lorsque tu brancheras une liste déroulante dessus tu verras des valeurs uniques.
Mais si T2.C2 est une colonne où tu peux retrouver plusieurs fois la même valeur sur des enregistrements différents (comme un statut par ex.) : lorsque tu brancheras une liste déroulante dessus tu auras des tas de doublons et faudra que tu ajoutes un Distinct() pour les éliminer ; bref, ça devient moins propre.L’idée serait plutôt d’avoir T1.CR1 qui pointe vers T2.C1 (une colonne identifiante à valeurs uniques) et T1.CR2 qui point aussi vers T2.C1. Cela ne t’empêchera pas de récupérer n’importe quelle colonne de T2 en faisant un L
ookUp(T2; C1 = T1.CR1)
ouLookUp(T2; C1 = T1.CR2)
.Par ex. :
-
Une table Etudiant avec : n° élève, nom, prénom, etc.
-
Une table Bureau des élèves avec :
-
Président : recherche vers Etudiant.N°Elève
-
Secrétaire : recherche vers Etudiant.N°Elève
-
Trésorier : recherche vers Etudiant.N°Elève
-
Tu me suis ?
CommentID=wLypP25cGfca1GF, PostID=71QCOzbAYdHB3OC
-
-
Salut @Francois DUPUIS et bienvenue au PPFC… 😉
Donne-moi un peu plus d’infos pour que je puisse t’aider…
-
Il s’agit d’une appli de création de rapport : c’est-à-dire ? Sa finalité c’est de générer un document Word ? PDF ? Ou simplement de stocker des données notées sur le terrain ?
-
Tu utilises SharePoint pour stocker tes données ? Si oui, il me faudrait le nom de tes listes et des colonnes de chaque liste.
-
Comment as-tu créé l’application ? A partir de SharePoint ? Ou c’est une application vide et tu as tout construit de A à Z ?
-
Si je comprends bien la base de la mécanique de ta solution, la gestion des rapports se fait en 2 étapes : d’abord on crée le rapport (avec le minimum d’informations), puis on le complète ultérieurement en revenant dessus en mode modification. C’est ça l’idée en gros ?
-
Tes ID ne collent pas… C’est-à-dire ?
-
Peux-tu nous mettre une capture de l’erreur que tu rencontres, en suivant les recommandations de ce post stp :
CommentID=WwDeKrYuQtyyCZH, PostID=61aRRyEq60id5pE
-
-
R3dKap
Membre1 avril 2022 à 14h41 en réponse à: Faire une boucle qui génère des enregistrements dans une table à partir d'un formulaire@RED nickel… Merci pour tous les éléments…
Alors, ce qui serait pas mal pour la suite c’est que tu mettes les vrais noms des écrans qu’il y a dans le PPT. Comme ça je pourrais y faire référence en les nommant précisément…
Juste une p’tite remarque : cet écran je l’appellerai plutôt Examens… 😉
Pour répondre à ton besoin initial qui est, je le reformule : lorsque je crée un nouvel examen pour une classe donnée, je veux associer chaque élève de cette classe à l’examen en question.
-
Tu confirmes ?
Du coup, je reformule techniquement maintenant : lorsque je suis sur l’écran Détails examen en mode création, à l’enregistrement je crée dans la liste Copies une ligne pour chaque élève de la classe pour l’examen qui est en train d’être créé.
-
Tu confirmes ?
Si c’est bien ça l’idée, voici comment procéder. Dans la suite de mes explications, comme je n’ai pas les noms réels de tes contrôles, je vais les nommer de manière suffisamment claire pour que tu comprennes à quoi je faire référence. Par exemple, sur cet écran :
Tu noteras au passage la nomenclature des contrôles (sauf pour le DataCardValue qui est particulière) :
xxxYyyyYyyy_ZZZ
où :
-
xxx = 2 à 3 lettres minuscules pour le type de contrôle (t’as une liste dispo ici en page 6 : Power Apps canvas app coding standards)
-
YyyyYyyy = au format “Pascal Case” (première lettre de chaque mot en majuscule) qui décrit à quoi sert le contrôle
-
ZZZ = 2 à 4 lettres en majuscule qui représente l’écran où se trouve le contrôle
Pour le ZZZ dans ce cas, j’ai choisi DETX pour “DETails eXamen”.
Donc, pour en revenir à ton besoin, voici ce que je propose… ATTENTION à bien respecter les majuscules/minuscules surtout au niveau des colonnes qui s’appellent Id ou ID (c’est pas les mêmes 😉).
Sur le btnSave_DETX.OnSelect :
SubmitForm(frmExamen_DETX)
Sur le frmExamen_DETX.OnSuccess :
ForAll(n Filter(n Etudiants; n Etu_cls_id = frmExamen_DETX.LastSubmit.Exm_cls_id.Idn ) As ItemEtudiant;n Patch(n Copies;n Defaults(Copies);n {n Cop_exm_id: frmExamen_DETX.LastSubmit.ID;n Cop_etu_id: ItemEtudiant.ID;n Cop_Statut: {Value: "A corriger"}n }n )n);;nBack()
Pour la colonne Cop_Statut j’ai supposé que c’était une colonne de type Choix. Si c’est plutôt une colonne de type Text, alors écris la ligne comme ceci :
Cop_Statut: "A corriger"
Dans la formule j’utilise la propriété LastSubmit du formulaire qui contient l’enregistrement qui vient d’être soumis. Cela me permet de connaître l’ID du nouvel examen qui vient d’être créé et attribué par SharePoint. Cela me permet aussi d’accéder à tous les autres champs de l’examen car on a plus accès aux données via les DataCards qui eux ont déjà été “réinitialisés” en interne.
Voilou… Essaie déjà ça et dis-moi ce que ça donne…
CommentID=JFvV7DkOnY3YHSk, PostID=RTKvQn2SLy4RdUK
-