Griser sélection si déjà répondue

  • Griser sélection si déjà répondue

    Posté par David sur 19 juin 2024 à 9h47

    Bonjour à tous,

    J’ai une application qui est quasiment finalisée, je suis sur les derniers détails, mais le dernier point est un peu au-dessus de mes maigres capacités.

    L’application dispose de 18 questions (sélectionnables via deux liste déroulante car il y a 6 thèmes) et un enregistrement enregistre la réponse à la question dans une liste SP.

    Plusieurs User devront répondre à ces questions dans le mois, et c’est mon problème :

    Je souhaiterais faire en sorte que les questions déjà répondues soit grisées (permettant aux utilisateurs de savoir visuellement ce à quoi ils ont déjà répondu).

    Ce qui pose le plus souci c’est que les cases devront être grisée individuellement, par exemple si je réponds à la question 7, elle doit être grisée à MA prochaine ouverture de l’appli, mais si un autre utilisateur ouvre l’appli, il doit n’avoir de grisé uniquement ce à quoi lui à répondu.

    Je me demande alors si c’est « rentable » de mettre en place un système pareil par rapport au gain visuel sachant qu’il faut que ça soit individualisé et que les cases se « dégrise » à nouveau chaque mois.

    Ma liste Sharepoint contenant les réponses dispose déjà d’une colonne “Date de l’audit” et “Auditeur”

    Merci d’avance pour votre aide, je ne sais pas trop comment programmer ça, et surtout, si c’est faisable et “facilement réalisable”.

    David a répondu Il y a 5 mois, 1 semaine 4 Membres · 13 Réponses
  • 13 Réponses
  • Annie

    Membre
    19 juin 2024 à 23h38

    Allo David, j’aimerais t’aider mais je suis débutante, cependant je veux savoir, car je suis à réaliser une app aussi dans le cadre de mon travail. J’ai une app concernant les AUDITS a réaliser et un autre en lien avec des analyses de sites. Donc je suis convaincue que les réponses vont m’aider.
    accepterais-tu de me partager une image de ton projet?

  • Maxime

    Membre
    20 juin 2024 à 9h36

    Hello David,

    Si je comprends ton besoin :

    • Tu as un formulaire qu’une personne X remplit sur un mois par exemple.
    • Tu veux que, à l’ouverture du formulaire, si la personne X a déjà répondu à la question, celle-ci doit être grisée. Est-ce que celle-ci doit rester éditable?

    Ce que je ne comprends pas, c’est, est-ce que plusieurs utilisateurs remplissent le même formulaire?

    Si il n’y a qu’une personne qui remplit le formulaire, alors tu peux écrire une condition comme celle-ci :

    <pre class=”language-javascript”>If(IsEmpty(ThisItem.ReponseDeTaQuestion);NeGrisePasTaQuestion;GriseTaQuestion)

    Tu peux placer cette condition par exemple dans le DisplayMode de ta carte et dire que si c’est vide alors tu es en DisplayMode.Edit sinon en DisplayMode.View

    Le IsEmpty() de ta formule teste si il y a quelque chose dans ton ThisItem.ReponseDeTaQuestion.

  • R3dKap

    Membre
    20 juin 2024 à 9h53

    Salut David,

    Comment fonctionne le système question/réponse dans ton application ?

    1. Tu as a une seule liste déroulante avec les questions et un seul champ de saisie en fonction de la question choisie ?
    2. Tu as plusieurs champs : un pour chaque réponse à chaque question ?

    La complexité de mise en oeuvre de la solution ne sera pas la même selon le cas… 😜

  • David

    Membre
    20 juin 2024 à 10h27

    Bonjour à vous deux, j’ai 18 questions qui sont regroupés sur 6 thèmes, en gros une première liste déroulante contient 6 choix qui définissent le thème, une seconde liste déroulante affiche les questions en lien avec le thème.

    Sur la section Items de la première liste j’ai ça : Distinct(‘Liste Questions LPA PowerApps’;‘Thème ‘)

    Et sur le second choix déroulant j’ai ça : Filter(‘Liste Questions LPA PowerApps’; ‘Thème ‘ = Dropdown1_2.Selected.Value)

    Le dropdown1_2 étant la première liste.

    L’enregistrement des réponses se fait via la fonction Patch dans une autre liste SharePoint ou d’autres infos apparaissent (Date / nom de la personne qui réponds aux questions).

    L’idée est bien d’uniquement griser les questions ayant déjà été traitées dans le mois par utilisateur (mais en les laissant sélectionnable, c’est uniquement visuel), Il faudrait donc j’imagine que la seconde liste déroulante puissent « aller chercher » dans la liste sharepoint avec une condition si le User() à déjà répondu à cette question afin de la griser si c’est le cas.

    Le nom de la colonne est Question, j’avais donc essayé quelque chose comme ça dans le Fill de ma liste déroulante : <If( !IsBlank(LookUp(TestDocumentRéponseLPA ; Question = Dropdown1_3.SelectedText)) ;color.grey)

    Mais en vain.

    Voilou j’espère avoir été clair 😉

  • R3dKap

    Membre
    20 juin 2024 à 10h32

    Merci pour les éléments…

    Où est saisie la réponse ? Y’a un champ en-dessous de la liste des questions pour saisir la réponse à une question choisie ?

    Note : Power Apps ne permet pas de griser des éléments dans une liste déroulante. Il va donc falloir jouer sur le “grisage” du champ où on saisit les réponses. D’où ma question précédente…

    Et sinon, oui effectivement il va falloir aller regarder dans la liste des réponses avec un LookUp() si l’utilisateur a déjà répondu à la question sélectionnée pour le mois et l’année en cours…

  • David

    Membre
    20 juin 2024 à 10h38

    D’accord merci, la réponse est renseignée dans la même liste Sharepoint qui contient les enregistrement, c’est une réponse multiple sous forme de curseur à 3 positions (vert / orange / rouge)

    Sur l’appli :

    et sur le doc de réponse :

  • Maxime

    Membre
    20 juin 2024 à 10h45

    Tu peux rajouter un label au dessus indiquant que la réponse à cette question est déjà enregistrée.

    Mais à ma connaissance, il n’est pas possible de modifier indépendamment d’une liste déroulante pour chaque Item.

  • R3dKap

    Membre
    20 juin 2024 à 11h02

    Aaaah voilà… Parfait. A ce moment-là voici comment faire…

    Sur la propriété DisplayMode du curseur, tu mets le code suivant :

    If(
    IsBlank(
    LookUp(
    AddColumns(
    TestDocumentRéponseLPA;
    Année;
    Year(TonChampDate);
    Mois;
    Month(TonChampDate)
    );
    TonChampThème.Value=DropdownThème.Selected.Value &&
    TonChampQuestion.Value=DropdownQuestion.Selected.Value &&
    Année=Year(Today()) &&
    Mois=Month(Today()) &&
    TonChampAuditeur=UtilisateurConnecté
    ).RougeOrangeVert
    );
    DisplayMode.Edit;
    DisplayMode.Disabled
    )

    Par contre je ne sais pas de quel type sont tes colonnes de thème, de question et d’auditeur. Donc à toi d’adapter en fonction… 😜

    Pour info, le AddColumns() sert à récupérer l’année et le mois de saisie de la réponse dans des colonnes dédiées car on ne peut pas utiliser les fonctions Year() et Month() dans le LookUp() car ces fonctions ne sont pas délégables à SharePoint.

  • David

    Membre
    20 juin 2024 à 11h20

    D’accord merci beaucoup ! j’essaie ça et je vous tiens au courant !

  • David

    Membre
    20 juin 2024 à 11h51

    Du coup j’ai deux soucis lorsque je rentre ce code :

    Le premier c’est que pour le dropdown des questions je ne peux pas mettre .selected.value, ça n’autorise que le selectedText (peut être car c’est en fonction du premier dropdown du thème), et pareil pour le matricule auditeur = User(), il ne reconnait pas.

    <div> </div>

    Par contre en supprimant les variable dropdown question et utilisateur çela fonctionne bien en fonction des thèmes.

    j’imagine que si je ne veux pas désactiver le curseur de choix mais uniquement afficher un message si déjà répondu je pourrais copier ce code sur la propriété visible d’un label.

    Le code en écriture :

    <div>
    <div>If(</div>
    <div> IsBlank(</div>
    <div> LookUp(</div>
    <div> AddColumns(</div>
    <div> TestDocumentRéponseLPA;</div>
    <div> Année;</div>
    <div> Year(‘Date de l”audit’);</div>
    <div> Mois;</div>
    <div> Month(‘Date de l”audit’)</div>
    <div> );</div>
    <div> Item.Value = Dropdown1_2.Selected.Value && Question.Value = Dropdown1_3.SelectedText && Année = Year(Today()) && Mois = Month(Today()) && ‘Matricule Auditeur’ = User()</div>
    <div> ).RougeOrangeVert</div>
    <div> );</div>
    <div> DisplayMode.Edit;</div>
    <div> DisplayMode.Disabled</div>
    <div> </div>
    <div> </div>
    <div>Merci bien </div>
    </div>

  • David

    Membre
    20 juin 2024 à 12h10

    Correction : du coup j’arrive à faire mon affaire pour le dropdown des questions, c’était juste Question.Value=Dropdown1_3.Selected.Question (et non .value pour celui-ci)

    J’ai également rajouté un ! devant le IsBlank pour “masquer” mon curseur si on trouve la question dans le doc de réponse, et non si on ne la trouve pas.

    Par contre pas possible pour filtrer en fonction de l’utilisateur je n’ai pas encore trouvé grâce à ton champ auditeur = Utilisateur connecté. J’avais essayé via : &&’Matricule_Auditeur’ = User()

  • R3dKap

    Membre
    20 juin 2024 à 12h24

    Sauf erreur de ma part, la colonne Question de la table des réponses est une colonne de Recherche qui pointe vers ta liste des questions et donc vers un champ spécifique de cette liste : laquelle ? Title ?

    C’est cette colonne-là qu’il faut que tu spécifies au niveau de Dropdown1_3 :

    Dropdown1_3.Selected.LaColonneEnQuestion

    Pour ce qui est de l’auditeur : quel est le type de la colonne Auditeur ? Personne ? Texte ? Si c’est texte, que stockes-tu dedans ? Adresse mail ? Nom ?

    Pour info : User() est une fonction qui renvoie un ENREGISTREMENT à 4 colonnes :

    Tu ne peux donc pas comparer ‘Matricule Auditeur‘ à User(). Tu me suis ? Si ton champ ‘Matricule Auditeur‘ contient un matricule qui est une donnée “custom”, où est-elle stockée dans Azure ? Dans quel champ de l’AD ?

  • David

    Membre
    20 juin 2024 à 12h33

    Ahhh super merci !

    En fait oui le champ spécifique de la liste s’appelle aussi question, c’est pour ça !

    Concernant le User effectivement ça m’a perdu, c’est bien une entrée texte qui prends via le .FullName !

    C’est fonctionnel désormais, Le curseur n’est plus utilisable si j’ai déjà répondu à la question selectionnée (En espérant que ça soit de nouveau sélectionnable à chaque début de mois)

    Comme les utilisateurs pourront parfois quand même poser la même question plusieurs fois dans le mois, je vais plutôt basculer la formule dans la propriété visible d’un label qui agira comme un message pour prévenir qu’un audit similaire à déjà été réalisé dans le mois

Connectez-vous pour répondre.