Original Message:
Sent: Oct 16, 2021 06:25 PM
From: EMMANUEL GALLIS
Subject: Popup
Effectivement, petite erreur sur la formule. Voici la bonne :
ForAll( galViolation.AllItems As LoopItem; Patch( colCurrentViolation; LoopItem; { scCauseViolation: LoopItem.cbxCause.Selected; scNatureViolation: LoopItem.cbxNature.SelectedItems; scOrigineIncident: LoopItem.cbxOrigine.SelectedItems; scNiveauGravite: LoopItem.cbxGravité.Selected } ))
------------------------------
EMMANUEL GALLIS
Power Platform Consultant
France
Original Message:
Sent: Oct 14, 2021 05:04 AM
From: Philippe CULOT
Subject: Popup
Bonjour Emmanuel
Merci pour ton code , je l'ai adapté à ma situationForAll( galViolation.AllItems As LoopItem; Patch( colCurrentViolation; LoopItem; { scCauseViolation: cbxCause.Selected; scNatureViolation: cbxNature.SelectedItems; scOrigineIncident: cbxOrigine.SelectedItems; scNiveauGravite: cbxGravité.Selected } ))
Cependant lorsque je saisis une valeur dans une liste exemple (Cause), la même valeur est répercutée lorsque j'appuie sur le bouton valider, ce qui veut dire que toute mes violations ont les mêmes enregistrements dans les listes déroulantes respectives
Comment modifier le code pour que l'enregistrement soit correct, c'est comme si il ne se préoccupait de la valeur de l'ID ?
Merci de ton aide
------------------------------
Philippe CULOT
Data Analyst
Original Message:
Sent: Oct 13, 2021 03:13 PM
From: EMMANUEL GALLIS
Subject: Popup
Argh! Je pense que je viens de trouver l'origine du pb (sur lequel j'ai pas mal bataillé y'a quelques années) : c'est le code qui se trouve dans le OnChange des listes déroulantes.
En fait, je ne sais pour quelle raison, l'événement OnChange d'une combo box est déclenché plusieurs fois dès lors qu'il se passe quelque chose sur le contrôle. Donc, on va laisser tomber cette méthode pour patcher la collection : supprime tous les codes des OnChange des combo box.
On va plutôt utiliser un bouton ENREGISTRER qui va balayer la galerie et mettre à jour la collection avec un code du style :
ForAll( galViolation.AllItems As LoopItem; Patch( colCurrentViolation; LoopItem; { scCauseViolation: cbxCause.SelectedItems; scNatureViolation: cbxNature.SelectedItems; scOrigineViolation: cbxOrigine.SelectedItems; scGravitéViolation: cbxGravité.SelectedItems } ))
------------------------------
EMMANUEL GALLIS
Power Platform Consultant
France
Original Message:
Sent: Oct 13, 2021 08:20 AM
From: Philippe CULOT
Subject: Popup
Bonjour Emmanuel
le code du bouton est
Collect(colCurrentViolation ; { 'Numero Cas Violation' : Last(colCurrentViolation).'Numero Cas Violation' +1 })
Celui-ci génère bien un numéro suivant mais d'autres lignes sans numéros .Dans mon exemple j'avais 3 violations et j'ai appuyé sur le bouton Ajouter une violation et j'ai obtenu le n°4 + 23 lignes sans numéro (car j'ai arrété le traitement)
En fait dans mon bouton j'ai ajouté l'icone plus (+) sans mettre de code sur celui-ci
et j'ai l'impression que c'est cela qui me génère ces lignes intempestives, je viens de le retirer et je n'ai plus ces lignes supplémentaires . Quelle est la bonne pratique si j'ajoute l'icone + avec le bouton?
------------------------------
Philippe CULOT
Data Analyst
Original Message:
Sent: Oct 13, 2021 07:59 AM
From: EMMANUEL GALLIS
Subject: Popup
Quel est le code du bouton AJOUTER UNE VIOLATION ?
Est-ce que tu peux cliquer dessus plusieurs fois (sans saisir de données) et vérifier qu'il ajoute bien qu'une seule ligne à chaque avec le N° qui s'incrémente à chaque fois ?
------------------------------
EMMANUEL GALLIS
Power Platform Consultant
France
Original Message:
Sent: Oct 11, 2021 12:26 PM
From: Philippe CULOT
Subject: Popup
Bonsoir Emmanuel
Nouveau problème
Scénario :
1) ajout d'une violation
2) remplissage de la liste Cause sans remplir les autres checkbox (Nature, Origine et Gravité)
3) ajout d'une autre violation, le résultat est que j'obtiens 2 violations supplémentaires et je perds la saisie de la cause dans la 1ère
------------------------------
Philippe CULOT
Data Analyst
Original Message:
Sent: Oct 08, 2021 03:54 AM
From: EMMANUEL GALLIS
Subject: Popup
Oui bien vu, c'est une autre façon d'y arriver. Le problème dans la formule précédente, c'était l'utilisation du champ ID dans la condition du Patch() puisqu'on voit qu'il est surligné en rouge. Mais ça me surprend car on voit bien le champ ID sur ta capture de la collection... Ca aurait été intéressant de creuser et de comprendre pourquoi...
Et pour répondre à ta question, il est possible que la prévisualisation des collections dans le menu Fichier > Collections affiche les noms internes des colonnes plutôt que les libellés d'affichage. J'avoue ne pas trop l'utiliser car on ne peut voir que les 5 premières lignes...
------------------------------
EMMANUEL GALLIS
Power Platform Consultant
France
Original Message:
Sent: Oct 08, 2021 03:49 AM
From: Philippe CULOT
Subject: Popup
cette formule semble marcherPatch( colCurrentViolation; galViolation.Selected; {scNatureViolation: cbxNature.SelectedItems})
------------------------------
Philippe CULOT
Data Analyst
Original Message:
Sent: Oct 08, 2021 03:36 AM
From: Philippe CULOT
Subject: Popup
Bonjour Emmanuel
J'avoue ne pas comprendre ou est le problème. La mise à jour de la collection doit se faire sur la ligne sélection donc ID de la collection
ci dessous la copie d'écrans de colCurrentViolation lorsque Etab=CEIDF et Periode=2021.06
Remarque d'ordre générale : Pourquoi les entêtes de la collection prennent les noms natifs de la colonne de site?
Ma liste Sharepoint
Mon appli Power Apps
et donc la formule pour mettre à jour la collection pour la zone de liste cbxNaure
Merci d'avance pour ton aide
------------------------------
Philippe CULOT
Data Analyst
Original Message:
Sent: Oct 07, 2021 04:18 PM
From: EMMANUEL GALLIS
Subject: Popup
Attention aux majuscules/minuscules : 'Numero cas violation' et pas 'Numero Cas Violation'... Ca vient peut-être de là... Vérifie aussi les autres champs tant qu'à faire... 😉
------------------------------
EMMANUEL GALLIS
Power Platform Consultant
France
Original Message:
Sent: Oct 07, 2021 10:54 AM
From: Philippe CULOT
Subject: Popup
Merci Emmanuel , j'avais réussi à résoudre le dernier point, mais je séchais encore sur la partie enregistrement.
je tente de mettre la formule que tu me proposes de mettre dans le OnChange de la liste déroulante Cause, le nom n'est 'Numero cas violation' n'est pas reconnu alors que tout va bien dans Collect(colCurrentViolation ; { 'Numero cas violation' : Last(colCurrentViolation).'Numero cas violation' + 1 } )
dans ma liste sharpoint le champ ne comporte pas le é donc Numero
------------------------------
Philippe CULOT
Data Analyst
Original Message:
Sent: Oct 07, 2021 10:29 AM
From: EMMANUEL GALLIS
Subject: Popup
Pour la création d'une nouvelle ligne, tu as le code sur le bouton Ajouter une violation que je t'ai donné plus haut.
Et pour le stocker des valeurs choisies dans les listes (tu as raison j'avais oublié cette partie), il faut mettre le code suivant dans le OnChange : Patch(colCurrentViolation; 'Numéro cas violation' = ThisItem.'Numéro cas violation'; {CauseViolation: cbxCauseViolation.SelectedItem})
(cbxCauseViolation étant la liste déroulante du champ Cause.
Et pareil pour les autre champs.
Et je viens de voir que le code que je t'ai donné pour le bouton devait plutôt être (vu que t'as pas de champ Id mais plutôt Numéro cas violation) :
Collect(colCurrentViolation ; { 'Numéro cas violation' : Last(colCurrentViolation).'Numéro cas violation' + 1 } )
------------------------------
EMMANUEL GALLIS
Power Platform Consultant
France
Original Message:
Sent: Oct 07, 2021 10:21 AM
From: Philippe CULOT
Subject: Popup
Bonjour Emmanuel
Ok merci pour la réponse .Il me faut coder la modification d'une valeur dans une ou plusieurs listes déroulantes et l'ajout des valeurs des listes déroulantes dans la collection lorsque l'utilisateur a créé une nouvelle ligne . Comment dois je procéder ?
Merci d'avance
------------------------------
Philippe CULOT
Data Analyst
Original Message:
Sent: Oct 07, 2021 10:13 AM
From: EMMANUEL GALLIS
Subject: Popup
Nickel... Après, mon design je l'ai fait sur Power Point donc faut l'adapter au reste de ton application pour que l'ensemble soit cohérent.
Sinon, pour répondre à ta question, tu peux mettre ton entête dans un contrôle Conteneur où tu définis le fond à "blanc" et tu le positionnes légèrement au-dessus de la bordure du haut de la galerie.
------------------------------
EMMANUEL GALLIS
Power Platform Consultant
France
Original Message:
Sent: Oct 07, 2021 05:31 AM
From: Philippe CULOT
Subject: Popup
Bonjour Emmanuel
avec ton message j'ai réussi à reproduire quasiment ton écran, j'ai juste un petit problème pour faire un bel affiche de l'entête comme tu l'as proposé, je l'ai cerclé de rouge
voici le mien
Comment faire pour faire le séparateur nickel entre l'entête et le 1er enregistrement de la gallery
Merci à toi
------------------------------
Philippe CULOT
Data Analyst
Original Message:
Sent: Oct 06, 2021 10:02 AM
From: Philippe CULOT
Subject: Popup
Bonjour Emmanuel
Merci pour ta réponse et je vais appliquer ta solution
------------------------------
Philippe CULOT
Data Analyst
Original Message:
Sent: Oct 06, 2021 09:50 AM
From: EMMANUEL GALLIS
Subject: Popup
Salut Philippe,
Merci pour ces éléments détaillés... Plusieurs choses...
Popup
A la base, le fait même d'utiliser le terme "popup" implique que l'on ne change pas d'écran : c'est une "fenêtre" qui vient s'afficher par-dessus l'écran actif (et donc en général on met un fond noir transparent "derrière" la popup pour faire en sorte que l'utilisateur ne puisse interagir qu'avec la popup en question et pas avec ce qu'il y a derrière.
Avantage : pas besoin de créer un nouvel écran (moins lourd), pas besoin de passer de données vers un autre écran ;
Inconvénient : alourdi l'écran concerné (donc la popup doit être peu complexe pour éviter d'avoir un écran monstrueux au final en terme de nombre de contrôles), peut-être besoin de passer des données à l'autre écran.
Dans ton cas, ça peu se discuter : on est sur une popup moyennement complexe. Donc, un autre écran pourquoi pas...
Bouton Déclaration du nombre de cas
Le code que tu mets dans le OnSelect peut être simplifié ainsi normalement :
ClearCollect( colCurrentViolation; Filter( 'Violation Donnees'; 'Questionnaire Id'.Id=ThisItem.ID ));;Navigate( Screen7; ScreenTransition.UnCoverRight)
En effet, comme ton bouton est à l'intérieur du formulaire qui pointe déjà sur l'item en cours, il suffit d'utiliser ThisItem.ID
pour conditionner le filtrage de Violation Donnees.
A la rigueur, je me demande s'il est pertinent de demander à l'utilisateur de saisir un nombre de cas puisque ce nombre correspondra au final simplement au comptage de lignes de Violation Donnees trouvées pour le questionnaire concerné.
Du coup, je proposerai bien de verrouiller le champ texte, de le réduire en taille (puisqu'il dépassera rarement 9 je suppose), de modifier le libellé du champ en "Violations notifiées aux personnes concernées" et celui du bouton en "Déclarer les violations".
Et le champ texte tu lui mets CountRows(colCurrentViolation)
pour l'alimenter.
Et c'est tout pour cet écran.
L'écran de saisie des violations
Cet écran, pour plus de lisibilité et pour une meilleure expérience utilisateur, je le ferais de la manière suivante :
En fait, il s'agirait d'utiliser une galerie avec dans Items : Sort(colCurrentViolation; "Numéro cas violation", SortOrder.Ascending)
Le code du bouton Ajouter une violation serait : Collect(colCurrentViolation ; { Id : Last(colCurrentViolation).Id + 1 } )
Dans le Items de la liste déroulante du champ Cause : Choices('Violation donnees'.CauseViolation)
(et faire de même pour les autres listes déroulantes ; attention de n'activer la sélection multiple que sur le champ Nature)
Dans le DefaultSelectedItems de la liste déroulante du champ Cause : ThisItem.CauseViolation
Faire de même pour les autres listes déroulantes (attention de n'activer la sélection multiple que sur le champ Nature).
Sur le bouton poubelle pour supprimer une ligne : Remove(colCurrentViolation; ThisItem)
Et sur le bouton Valider, c'est juste un Back() pour revenir à l'écran du formulaire.
------------------------------
EMMANUEL GALLIS
Power Platform Consultant
France
Original Message:
Sent: Oct 06, 2021 05:50 AM
From: Philippe CULOT
Subject: Popup
Bonjour Emmanuel
je reviens vers toi pour le point 3 (rappelé ci dessous)
"3) faire un tableau variable" : alors ça je le gèrerais ailleurs que dans le formulaire afin de le rendre complètement dynamique.
Voici comment je l'implémenterais :
- Une liste SharePoint pour stocker les déclarations avec une structure semblable à celle-ci :
- Questionnaire : lien vers un élément de la liste qui stocke les données du questionnaire
- ID déclaration
- Cause violation
- Nature violation
- Origine incident
- Niveau gravité
- Sur l'écran du questionnaire, je mettrais un bouton DECLARATIONS VIOLATIONS CNIL
- Affiche une popup qui liste les déclarations déjà rattachées au questionnaire en cours
- Permet de manipuler les déclarations (ajout, modification, suppression)
- Tout serait stocke en collection locale
A l'enregistrement du questionnaire, dans le OnSuccess du formulaire, on enregistre/met à jour les déclarations qui lui sont rattachées.
- j'ai créé la liste sharepointLe champ Questionnaire ID est en lien avec le champ ID de mon questionnaire
- j'ai créé le bouton qui ira sur la page des déclarationsDans la propriété DisplayMode du bouton j'ai mis le code suivant:
If( Or(IsBlank(Q72_83dcv.Text);Q72_83dcv.Text="0");DisplayMode.Disabled;Edit)
Q72_83dcv est le champ texte à gauche du bouton qui sera renseigné par l'utilisateur en indiquant le nombre de violations, si rien est mis ou zéro le bouton n'est pas activé
Dans le OnSelect du bouton, je crèe la collection des réponses déja existantes dans Violation Données
ClearCollect( colCurrentViolation; Filter( 'Violation Donnees'; 'Questionnaire Id'.Id=Value(LookUp( Questionnaire; scEtablissement.Value = gloEtab && scLibPeriode = PeriodeChoisie.'Libellé Période' ).ID) ));;Navigate( Screen7; ScreenTransition.UnCoverRight)
Quand tu parles de popup c'est en fait un nouvel écran , si c'est le cas , je l'ai ci dessous
j'ai connecté le formulaire à la collection ColCurrentViolation, est ce que c'est bien cela qu'il faut faire?
Dans la propriété Text de Questionnaire ID j'ai mis La formule ci-dessous, LookUp( Questionnaire; scEtablissement.Value = gloEtab && scLibPeriode = PeriodeChoisie.'Libellé Période').ID
dans le Champ Numéro Cas Violation en propriété items j'ai mis colCurrentViolation en Value le cham Numéro Cas violatio, ainsi je récupère bien les différentes valeurs existantes , mais après pour les zone de liste déroulante je sèche
Merci à toi
------------------------------
Philippe CULOT
Data Analyst
------------------------------