
Griser sélection si déjà répondue
Griser sélection si déjà répondue
Posté par David sur 19 juin 2024 at 9h47Bonjour à 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 10 months, 2 weeks ago 4 Membres · 13 Réponses- 13 Réponses
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?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.
Salut David,
Comment fonctionne le système question/réponse dans ton application ?
- Tu as a une seule liste déroulante avec les questions et un seul champ de saisie en fonction de la question choisie ?
- 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… 😜
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 😉
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…
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 :
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.
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.
D’accord merci beaucoup ! j’essaie ça et je vous tiens au courant !
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>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()
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 ?
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.