Faire une boucle qui génère des enregistrements dans une table à partir d'un formulaire

  • Faire une boucle qui génère des enregistrements dans une table à partir d'un formulaire

    Posté par RED sur 23 novembre 2021 at 14h56

    Bonjour à tous,

    Pour commencer je suis plutôt débutant et autodidacte sur la PowerPlatform. J’essaye de faire des outils à droite, à gauche qui me permettent d’automatiser des tâches sans prétendre être expert en quoi que ce soit (Excel, Sharepoint, PowerApps, Access…). Je ne suis pas développeur de métier mais j’adore apprendre de nouvelles choses. 😏

    Je travaille actuellement sur un projet personnel qui facilite la correction de copies d’enseignants. J’ai donc créé une base de données ACCESS dans laquelle on peut trouver les tables suivantes :

    • Année scolaire
    • Classes
    • Etudiants (liste de tous les étudiants en relation avec la table Classes)
    • Barèmes (pour chaque examen)
    • Critères d’évaluation (pour chaque barème)
    • Niveaux de réussite (pour chaque critères d’évaluation)
    • Examens (attribué à une classe, associé à un barème)
    • Copies (pour statuer sur l’avancement d’une correction, à quel étudiant et pour quel examen)
    • Corrections (on y trouvera donc la notation de l’enseignant par critère)

    J’ai exporté cette BDD dans Sharepoint car c’est la cible de stockage de ces données.

    J’ai déjà créé tous les formulaires pour créer, modifier ou supprimer des enregistrements dans ces tables, à quelques détails près comme le fait de supprimer un enregistrement d’une table liée à une autre table. Mais ce sera le sujet d’un autre post.

    Ce que je souhaiterai, c’est attribuer un examen à chaque élève lorsque je désigne la classe à laquelle ils appartiennent.

    Par exemple : Dans un formulaire permettant de créer un examen “BTS Blanc”, lorsque je sélectionne la classe “BTS Marketing” qui passe l’examen, chaque élève appartenant à cette classe soit associé à cet examen. Autrement dit, dans une table “Copies” avec des champs “Examen” et “Etudiant”, une boucle créera des enregistrements qui associera “BTS Blanc” et par exemple, les étudiant “Harry Cover”, “Sarah Croche”, “Hercule Danlapante”… à travers la sélection de la classe “BTS Marketing” à laquelles ces étudiants appartiennent.

    Je ne cache pas que je ne suis pas certain de l’architecture de ma BDD mais j’ai essayé de prendre en compte le fait que les étudiants d’une classe changent chaque année, qu’une classe même si elle porte le même nom n’appartient pas à la même “promotion” (en tenant compte d’un marqueur annuel). Aussi, qu’un examen est unique même si un barème peut être réutilisé. Chaque copie est unique d’où le fait de séparer la table “Copies” et la table “Corrections”.

    Je pensais regarder du côté des fonctions Patch ou ForAll, ou peut-être faut-il simplement copier la liste des étudiants filtrée par la classe à laquelle ils appartiennent et la coller dans ma table “Copies” pour ensuite y dupliquer également le nom de l’examen qui leur est associé… Mais ça me paraît être un peu du bricolage, et je ne sais pas trop comment m’y prendre et par quoi commencer.

    Si quelqu’un peut m’orienter pour que je puisse continuer mon projet, merci d’avance.

    En espérant avoir été assez clair dans mes explications. 😊

    PostID=RTKvQn2SLy4RdUK

    RED a répondu 11 months, 3 weeks ago 1 Membre · 12 Réponses
  • 12 Réponses
  • Theophile CHIN-NIN

    Member
    23 novembre 2021 at 15h21

    Hello!

    Je pense que la cible est plutôt Power Automate dans votre cas.

    Vous pouvez déclencher un flow automatisé : Lorsqu’un élément est créé dans la table Examen.

    Ensuite lister tous les élèves liés à la classe sélectionnée dans l’élément examen, puis pour chaque élève, créez un élément dans la table Copies.

    Un usage à chaque outil : Pensez à l’accronyme AAA

    A : Agir : Agir sur les données via Power Apps

    A : Automatiser : Automatiser des traitements (tel que la création en boucle d’éléments lors qu’un évènement se produit) via Power Automate

    A : Analyser : Analyser et consolider les données dans Power BI

    Théo

    CommentID=rhMAotumIdq7Kh9, PostID=RTKvQn2SLy4RdUK

  • R3dKap

    Member
    24 novembre 2021 at 9h45

    Bonjour @RED,

    Alors la première chose à faire selon moi c’est de vérifier et valider effectivement ton modèle de données. Dans cette optique je te recommande vivement de représenter schématiquement tes listes/colonnes et les relations entre tes listes à l’aide de ce modèle de PPT. Une fois que c’est fait, poste-le ici pour que l’on puisse le vérifier… Il faut absolument que ton modèle de données soit correctement construit pour t’assurer qu’il répondra à tous les besoins de ton application. Remarque : dans ton cas, au vu de sa complexité, il serait intéressant que tu rajoutes les cardinalités des relations : indiquer s’il s’agit de relations 1-1 ou 1-n ou n-n. Ca serait top aussi si tu pouvais nous fournir quelques lignes de données pour chaque liste histoire que l’on voie comment elles se remplissent selon toi… Si tu nous fournis tout ça on sera en mesure de t’accompagner sur toutes les problématiques de ton application… 😉

    Ensuite, pour ce qui est de rattacher chaque élève d’une classe à un examen lors de la création de ce dernier, effectivement un Patch() pourrait largement suffire (et t’éviterais un flow, qui pourrait marcher aussi bien sûr). Il suffirait de lui fournir une petite collection avec les données à créer dans la table Copies, collection créée auparavant avec un petit ForAll(). Là ce serait optimisé au niveau des perfs…

    CommentID=RhRYAnLmGUDJm5x, PostID=RTKvQn2SLy4RdUK

  • RED

    Member
    21 mars 2022 at 14h51

    Bonjour à tous! Je déterre (allez… je dépoussière) ce post car j’ai eu beaucoup de travail ces 4 derniers moi et je n’ai pas eu de temps à consacrer à mon projet.

    À l’époque, voici ce que j’avais produit (voir PowerPoint). En espérant que cela soit intelligible.

    Je vais moi-même m’y replonger pour vite m’y remettre.

    CommentID=pzbLJH61YTp3mQJ, PostID=RTKvQn2SLy4RdUK

  • R3dKap

    Member
    22 mars 2022 at 9h36

    Ah oui effectivement… c’est de la Walking Dead App là… 😅

    Allez, je regarde ça à tête reposée et je reviens vers toi…

    CommentID=ajI7Z9DAIdJoCrm, PostID=RTKvQn2SLy4RdUK

  • R3dKap

    Member
    22 mars 2022 at 9h49

    Alors, c’est vraiment pas mal du tout… Je vois que t’as généré le modèle de données avec Power Query à partir de SharePoint… Top ! 👍 Moi-même j’ai une copine qui m’a montré ça récemment. Faudrait voir à l’occase comment automatiquement retirer certains champs inintéressants. Bref…

    Il me manque juste un p’tit truc : si tu peux me rajouter au-dessus de chaque tableau des slides 5, 6, 7 le nom de la table correspondante ça serait top.

    J’attends ta nouvelle version…

    CommentID=N42osij5ONqfJvW, PostID=RTKvQn2SLy4RdUK

  • R3dKap

    Member
    22 mars 2022 at 9h50

    Ah, laisse tomber… Je viens de voir que t’avais préfixé toutes tes colonnes avec un trigramme indiquant la liste… Donc, c’est bon…

    CommentID=u5W349Ku5VfK46w, PostID=RTKvQn2SLy4RdUK

  • R3dKap

    Member
    22 mars 2022 at 9h54

    Ok, c’est bon, j’ai compris ton modèle de données…

    Dis-nous comment on peut t’aider… 😊

    CommentID=NVJjrv9Joa4y64X, PostID=RTKvQn2SLy4RdUK

  • RED

    Member
    28 mars 2022 at 12h34

    Merci d’avoir pris le temps de regarder ma BDD.

    J’ai ajouté les noms des tables avec un petit commentaire en slide 7. Pour l’histoire, j’ai d’abord commencé à faire des tables à partir d’Access. Je les ai ensuite transférées vers Sharepoint d’où la création des champs inintéressants. Et pensant pouvoir les gérer à partir d’Access, je pensais que les mettre à jour sous Access se répercuterait dans Sharepoint… mais non, et d’où la présence du suffixe “1” des tables. Alors je sais qu’il existe une manière de faire une sorte de lien bidirectionnel entre les 2 mais je suis limité par les droits admin que je n’ai pas malheureusement. Et de toute façon ça m’arrange, je souhaite que tout se fasse à partir de Sharepoint.

    Alors dans un 1er temps, j’ai besoin d’attribuer un examen à chaque élève lorsque je désigne la classe à laquelle ils appartiennent.

    Si “BTS Marketing” contient Elève1, Elève2, Elève3, Elève4, Elève5 et que j’attribue “Examen Alpha” à BTS Marketing, il faut que, automatiquement, chaque élève soit associé à “Examen Alpha”.

    Autrement dit, dans la table t_examens1 j’ajoute une ligne et je mentionne dans chaque champ le nom de l’examen, le statut “À corriger”, la date, l’année scolaire, la barème associé et la classe associée (respectivement exm_label, exm_statut, exm_date, exm_anS_id, exm_bar_id, exm_cls_id). Il faut qu’automatiquement dans la table t_copies1, il y ait autant de lignes de créées que d’étudiants dans la classe BTS Marketing. Il y aura donc automatiquement 5 nouvelles lignes, avec le statut “À corriger”, l’ID de l’étudiant concerné (5 différents bien sûr) et l’ID de l’examen concerné (respectivement cop_statut, cop_etu_id, cop_exm_id).

    Il faut également que cela fonctionne dans l’autre sens, c’est-à-dire que si par exemple j’ai fait cette association d’examen1 à une classe1 mais que je me suis trompé de classe, si je réaffecte l’examen1 à une classe2, cela doit effacer les enregistrements pour la classe1 et les recréer pour la classe2.

    Le but final ce cette petite boucle est de pouvoir se rendre sur le “dashboard” d’un étudiant en particulier et de voir tous les examens auxquels il a participé. Et comme j’utilise des tables relationnelles, je ne sais pas encore comment faire exactement mais je suis sûr que c’est possible.

    Enfin, je ne compte pas faire que de la création de barème, de la correction et de l’attribution de notes à travers l’appli. J’envisage par la suite de pouvoir exploiter ces informations pour “personnaliser” des bilans par classe et par élève en fonction des résultats. Mais on verra ça bien plus tard 😅 qui sait, à travers Power BI ou Excel. Je préfèrerais Excel car plus accessible.

    CommentID=ndYGivE1PSOEbQA, PostID=RTKvQn2SLy4RdUK

  • R3dKap

    Member
    28 mars 2022 at 19h35

    Q1. Ok… Donc, juste pour être sûr de chez sûr, le modèle de données que tu viens d’envoyer dans ton dernier post représente précisément ce que tu as à l’heure actuelle dans SharePoint, on est bien d’accord ? C’est pour qu’on parle de la même chose par la suite et que je puisse facilement faire référence à tes listes et des colonnes avec leur vrai nom.

    Q2. Avant d’aborder les questions techniques de mise en oeuvre d’un besoin “métier”, c’est quoi l’idée générale ? Tu vas développer une application Power Apps canvas from scratch ? Tu as déjà commencé ? Où en es-tu ?

    Parce-que par exemple pour créer une ligne pour chaque élève dans la liste des examens, il faut des éléments comme l’année, la date de l’examen, etc. Et j’ai besoin de savoir comment tu as organisé la gestion des élèves et des classes dans ton application… Tu as utilisé des formulaires ?

    On commence à rentrer dans le dur. Donc il me faut un peu de contexte technique maintenant… 😉

    Si t’as des captures de ce que tu as déjà produit jusque là, n’hésite pas…

    CommentID=ZTyDe0SvsxOunta, PostID=RTKvQn2SLy4RdUK

  • RED

    Member
    31 mars 2022 at 15h03

    Q1. Oui c’est ce que j’ai dans Sharepoint, ça na pas bougé depuis 11/2021.

    Q2. J’ai déjà commencé à développer une appli from scratch, déjà pour m’approprier Power Apps ce qui n’a pas été simple au départ, et puis pour faire exactement ce que je souhaite. Sachant que je n’ai suivi aucune formation fournie par Microsoft. Mais maintenant que je sais qu’elles existent, je vais prendre le temps de les faire (si je trouve quelques heures…)

    J’ai mis des screenshots des fenêtre et quelques tables en PJ.

    Pour gérer les étudiants et les notes, j’ai fait ça de manière hiérarchique.

    Par exemple, je crée une classe. Je rentre dans la classe et j’ajoute des étudiants 1 par 1 (pour le moment, car j’aimerais simplifier cette saisie comme par exemple importer une liste). Pour la classe et l’étudiant je peux saisir des champs comme indiqués en BDD. Je peux les modifier et je peux indirectement les supprimer. En effet, j’utilise des tables relationnelles et Power Apps ne me laisse pas supprimer une classe si des élèves y sont encore associés. Il faut donc que je supprimer les élèves 1 par 1 avant de supprimer la classe. Et cela pour à peu près tout car je ne sais pas encore gérer et sécuriser ce genre de manipulation.

    Pour la création des barèmes, c’est pareil. Je crée un barème. Je rentre dans le barème et j’ajoute des critères 1 par 1. Puis je rentre dans chaque critère et j’ajoute plusieurs niveaux de réussite. Je peux également les éditer, les supprimer (toujours avec la contrainte des tables relationnelles ci-dessus).

    Maintenant, il faut que j’attribue un examen à une classe et donc à ses membres. D’où ce sujet de post. L’examen, tout comme la copie ainsi que la correction aura un statut. En gros, un examen est considéré comme corrigé lorsque toutes les copies seront au statut corrigé, et que chaque correction est terminée. Autrement dit, chaque correction appliquée à une copie doit être terminée. Ainsi si full correction ok, et si full copies corrigées, alors examen = corrigé.

    Ceci dans le but d’anticiper la correction naturelle d’un prof. Il est en pleine correction, et boom, il faut aller chercher les gosses : la copie n’est pas encore corrigée complètement, elle reste au statut “En cours”, autrement dit sur papier, une note finale n’a pas été attribuée. Mais je pense que tu vois où je veux en venir…

    Ensuite, je compte cliquer sur un examen “Non corrigé” et là apparaitra la liste de tous les étudiants associés à cet examen. Certaines copies seront corrigées, d’autres en cours… voilà où j’en suis maintenant.

    CommentID=GT2mL0B6xzP3luN, PostID=RTKvQn2SLy4RdUK

  • R3dKap

    Member
    1 avril 2022 at 14h41

    @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.

    1. 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éé.

    1. 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

  • RED

    Member
    7 avril 2022 at 12h47

    Merci pour ta réponse 👍 , je regarde ça dès que j’ai un peu de temps et je reviens par ici 😊

    CommentID=Tc76Vjx4pNDo94X, PostID=RTKvQn2SLy4RdUK

Connectez-vous pour répondre.