French Power Platform User Group

Please login or click SIGN UP FOR FREE to create your PowerPlatformUG account to join this user group.
Expand all | Collapse all

Popup

  • 1.  Popup

    Posted 13 days ago
    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.

    1. j'ai créé la liste sharepointLe champ Questionnaire ID est en lien avec le champ ID de mon questionnaire
    2. 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
    ------------------------------


  • 2.  RE: Popup

    Gold Contributor
    Posted 13 days ago

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



  • 3.  RE: Popup

    Posted 13 days ago
    Bonjour Emmanuel

    Merci pour ta réponse et je vais appliquer ta solution

    ------------------------------
    Philippe CULOT
    Data Analyst
    ------------------------------



  • 4.  RE: Popup

    Posted 12 days ago
    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
    ------------------------------



  • 5.  RE: Popup

    Gold Contributor
    Posted 12 days ago
    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
    ------------------------------



  • 6.  RE: Popup

    Posted 12 days ago
    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
    ------------------------------



  • 7.  RE: Popup

    Gold Contributor
    Posted 12 days ago
    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
    ------------------------------



  • 8.  RE: Popup

    Posted 12 days ago
    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
    ------------------------------



  • 9.  RE: Popup

    Gold Contributor
    Posted 12 days ago
    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
    ------------------------------



  • 10.  RE: Popup

    Posted 11 days ago
    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
    ------------------------------



  • 11.  RE: Popup

    Posted 11 days ago
    cette formule semble marcher
    Patch(
        colCurrentViolation;
        galViolation.Selected;
        {scNatureViolation: cbxNature.SelectedItems}
    )​


    ------------------------------
    Philippe CULOT
    Data Analyst
    ------------------------------



  • 12.  RE: Popup

    Gold Contributor
    Posted 11 days ago
    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
    ------------------------------



  • 13.  RE: Popup

    Posted 8 days ago
    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
    ------------------------------



  • 14.  RE: Popup

    Gold Contributor
    Posted 6 days ago
    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 qui s'incrémente à chaque fois ?

    ------------------------------
    EMMANUEL GALLIS
    Power Platform Consultant
    France
    ------------------------------



  • 15.  RE: Popup

    Posted 6 days ago
    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
    ------------------------------



  • 16.  RE: Popup

    Gold Contributor
    Posted 6 days ago
    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
    ------------------------------



  • 17.  RE: Popup

    Posted 5 days ago
    Bonjour Emmanuel

    Merci pour ton code , je l'ai adapté à ma situation
    ForAll(
        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
    ------------------------------



  • 18.  RE: Popup

    Gold Contributor
    Posted 3 days ago
    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
    ------------------------------



  • 19.  RE: Popup

    Posted 2 days ago
    Bonjour Emmanuel
    Merci bien, c'est ok

    ------------------------------
    Philippe CULOT
    Data Analyst
    ------------------------------