French Power Platform User Group

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

Design Application

  • 1.  Design Application

    Posted Jun 28, 2021 12:27 PM
    bonjour

    Je souhaiterais rendre plus agréable cet écran en retirant les doublons de ma catégorie (en bleu) et ma sous catégorie(en vert). Commet réaliser cette opération?


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


  • 2.  RE: Design Application

    Gold Contributor
    Posted Jun 30, 2021 07:31 AM
    Salut Philippe,
    Est-ce que tu peux nous donner la formule qu'il y a dans la propriétés Items de ta galerie stp ?

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



  • 3.  RE: Design Application

    Posted Jun 30, 2021 10:04 AM
    Bonjour Emmanuel

    Dans la propriété ITEMS j'ai ce code qui permet de filtrer les questions en fonction de la période concernée. La liste des questions est différente au semestre


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



  • 4.  RE: Design Application

    Gold Contributor
    Posted Jun 30, 2021 10:11 AM
    Ok. Alors ce qu'il faudrait faire c'est d'abord de placer le résultat de cette formule dans une collection et que ce soit la collection qui alimente la galerie.
    C'est à dire que dans le OnVisible de ton écran où se trouve ta galerie, il faudrait mettre le code suivant :
    ClearCollect(colQuestions; <...tout ton code de ta capture ci-dessus...>)​

    Ensuite, dans le Items de ta galerie, il faudrait juste mettre : colQuestions.

    Est-ce que tu peux déjà faire ça et ensuite vérifier déjà que tu fonctionnes comme avant ?
    Une fois que ça sera fait, je te montrerais comment masquer les doublons de catégories/sous-catégories...

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



  • 5.  RE: Design Application

    Posted Jun 30, 2021 10:47 AM
    Emmanuel,
    Les modifications sont ok

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



  • 6.  RE: Design Application

    Posted Jun 30, 2021 11:37 AM
    Emmanuel

    Les formules sont ok dans mon application

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



  • 7.  RE: Design Application

    Gold Contributor
    Posted Jul 01, 2021 05:17 AM
    Ok nickel... Alors, en fait, on va faire le boulot côté OnVisible de ton écran où il y a la galerie, c'est à dire là où tu as mis le code hier.
    Remplace le ClearCollect(colQuestions; <...>) que tu as mis hier par le code ci-dessous :
    // Construire la liste des questions (rajout d'une colonne "CategSousCateg" qui concatène la catégorie et la sous-catégorie pour détecter la rupture dès qu'il y a un changement de l'une ou l'autre ; rajout d'une colonne "Rupture" qui vaudra "x" lorsqu'il y aura rupture de catégorie ou sous-catégorie)
    ClearCollect(
        colQuestions; 
        AddColumns(
            <...tout ton code de ta capture ci-dessus...>; 
            "CategSousCateg"; 
            <tonchampcategorie> & "|" & <tonchampsouscategorie>; 
            "Rupture";
            ""
        )
    )​​;;
    // Copie des questions dans une autre collection pour boucler dessus (car on ne peut pas patcher la collection sur laquelle on boucle)
    ClearCollect(colQuestionsLoop; colQuestions);;
    // Préparation de la collection qui servira à stocker la valeur précédente de CategSousCateg
    Clear(colPreviousCategSousCateg);;
    // Boucler et détecter les ruptures
    ForAll(
        colQuestionsLoop; 
        If(
            Last(colPreviousCategSousCateg).CategSousCateg <> ThisRecord.CategSousCateg; 
            Patch(
                colQuestions; 
                {ID: ThisRecord.ID}; 
                {Rupture: "x"}
            )
        );;
        Collect(colPreviousCategSousCateg; ThisRecord)
    );;
    // Nettoyage des collections temporaires
    Clear(colQuestionsLoop);;
    Clear(colPreviousCategSousCateg);;


    Ensuite, côté galerie :

    • tu laisses juste colQuestions dans le Items
    • sur tes libellés de catégorie et de sous-catégorie tu mets ceci dans leur propriété OnVisible : ThisItem.Rupture = "x"

    Voilou... Dis-moi si ça marche... J'ai testé le code chez moi sur une source de données bidon et ça marche donc, y'a pas de raison... Et n'hésite pas si t'as des questions sur la logique du code ci-dessus... Toujours intéressant de bien comprendre ce qu'il s'y passe... 😉

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



  • 8.  RE: Design Application

    Posted Jul 01, 2021 06:17 AM
    Bonjour Emmanuel

    Merci pour ce code que j'ai pu implémenter dans le OnVisible de mon écran.

    Seule la dernière action m'interpelle car je n'ai pas la propriété OnVisible sur mes labels Catégorie et sous catégories, cf copie écran ci dessous


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



  • 9.  RE: Design Application

    Gold Contributor
    Posted Jul 01, 2021 06:22 AM
    Pardon, je me suis trompé. C'est pas OnVisible, c'est juste Visible... 😉

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



  • 10.  RE: Design Application

    Posted Jul 01, 2021 08:17 AM
    Merci Emmanuel, je me doutais , cependant je n'obtiens pas le résultat souhaité

    Avant mise en place du code proposé

    Résultat avec le code proposé , cela ne garde que la première catégorie et sous catégorie, je perds donc Catégorie: Projets locaux et AIVP et stock AIVP "pur privatif"


    Ce que je voudrais faire









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



  • 11.  RE: Design Application

    Posted Jul 01, 2021 08:31 AM
    Emmanuel

    J'obtiens le bon résultat en mettant  monchampcatégoreieValue et monchampsouscatégorie.Value





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



  • 12.  RE: Design Application

    Gold Contributor
    Posted Jul 01, 2021 10:38 AM
    Exact, bien vu...
    Après, pour un meilleur rendu, tu peux te débrouiller pour rendre le fond bleu et vert toujours présents même lorsque le libellé d'une catégorie ou d'une sous-catégorie est masquée... Par exemple en mettant un rectangle derrière le libellé et en mettant la couleur sur ce rectangle plutôt que sur le libellé...

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



  • 13.  RE: Design Application

    Gold Contributor
    Posted Jul 01, 2021 10:42 AM
    Remarque : pour simplifier les choses j'ai concaténer la catégorie et la sous-catégorie pour détecter les ruptures sur l'un ou l'autre. Ce qui fait que tu pourrais potentiellement avoir ceci :

    Si jamais tu voulais faire exactement comme sur ta dernière capture Excel, ce serait un poil plus compliqué...

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



  • 14.  RE: Design Application

    Posted Jul 01, 2021 11:22 AM
    Merci Emmanuel pour cette disponibilité, je vais suivre les indications indiques avec le rectangle et d'après ce que j'ai vu sur youtube pour réaliser comme sur la dernière copie d'écran ce serait utiliser la fonction Group BY, quelque soit soit la método je suis preneur de tes conseils

    Ton aide est vraiment précieuse

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



  • 15.  RE: Design Application
    Best Answer

    Gold Contributor
    Posted Jul 01, 2021 11:27 AM
    Effectivement, tu pourrais utiliser le GroupBy() mais il est pas facile à manipuler. Tu pourrais aussi imbriquer des galeries, mais on ne peut en imbriquer que 2. Donc y'aurait un peu de boulot pour arriver au bon résultat souhaité...

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



  • 16.  RE: Design Application

    Posted Jul 13, 2021 01:42 PM
    Bonsoir Emmanuel

    Je me suis lancé dans l'utilisation du GroupBy et j'ai imbriqué 2 galeries, ci dessous le résultat

    J'ai 2 soucis :
                       le 1er est que le toggle de l'existence de la réponse ne se déclenche pas quand je saisi une donnée
                                      propriété Default =Not(
    IsBlank(
    LookUp(
    colReponses;
    'Libellé Période' = locForm.scLibPeriode && Etablissement.Value = LookUp(
    Users;
    Mail = gloUser.Email
    ).Etablissement.Value && Question = ThisItem.Question
    )
    )
    )
                       le 2ème est que le bouton enregistrer ne met pas a jour les données
    ci dessous le code du OnSelect
    ClearCollect(// charge les réponses actuelles
    colCurrentReponses;
    ReponsesAIVP
    );;
    ForAll(// Parcourir les réponses mises à jour par l'utilisateur
    colReponses;
    If(
    IsBlank(// si la réponse n'exite pas encore
    LookUp(
    colCurrentReponses;
    ID = colReponses[@ID]
    )
    );
    Patch(// la créer
    ReponsesAIVP;
    Defaults(ReponsesAIVP);
    {
    'Libellé Période': colReponses[@'Libellé Période'];
    Etablissement: colReponses[@Etablissement];
    CategorieQuestion: colReponses[@CategorieQuestion];
    SousCategorieQuestion: colReponses[@SousCategorieQuestion];
    Question: colReponses[@Question];
    Reponse: colReponses[@Reponse]
    }
    );
    First(// Sinon la modifier
    UpdateIf(
    ReponsesAIVP;
    ID = colReponses[@ID];
    {Reponse: colReponses[@Reponse]}
    )
    )
    )
    );;
    Notify(
    "Vos données ont été enregistrées avec succès.";
    NotificationType.Success
    );;
    Navigate(Accueil)

    la galerie Catégorie et sousCatégorie est obtenue par le code suivant
    GroupBy(
    AddColumns(
    Questions;
    "Categ";
    CategorieQuestion.Value;
    "SousCateg";
    SousCategorieQuestion.Value
    );
    "Categ";
    "SousCateg";
    "GroupByCategorie"
    )

    Pourrais tu m'aiguiller sur ces 2 problêmes

    Merci à toi

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



  • 17.  RE: Design Application

    Gold Contributor
    Posted Jul 13, 2021 05:29 PM

    Ouille... Autant de code non formatté -> super galère à lire. Est-ce que tu pourrais rééditer ton dernier post ci-dessus et recopier-coller le code de Power Apps (après l'avoir formatté dans Power Apps, indenté je veux dire) dans la popup de code de l'éditeur du forum en cliquant sur ce bouton :



    Et de manière générale, colle toujours ton code Power Apps dans cette popup : ça le rend beaucoup plus lisible... 😉

    Bon, sinon, je vais être cash : tu t'embarques dans un truc assez complexe et qui va pas être facile à réaliser et à stabiliser. Mais je salue l'effort...
    Je vais essayer de t'aider... Ca va pas être facile passke entre le GroupBy(), la double galerie et la mécanique de gestion dynamique des données, sans avoir l'appli sous la main ça va être coton...

    Souci n° 1

    Tu dis que le toggle de présence de réponse ne s'active pas lorsque tu saisis une donnée. Pourtant sur ta capture c'est bien le cas non ?

    Souci n° 2

    Je vais attendre que tu me formattes le code pour y jeter un oeil... 😉



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



  • 18.  RE: Design Application

    Posted Jul 14, 2021 05:21 AM
      |   view attached
    Bonjour Emmanuel
    Désolé pour le formatage du code, je n'avais pas été assez curieux sur tous les boutons existants dans le post
    Concernant le toggle d'existence il fonctionne lorsqu'il récupère des données déja saisies, mais lorsque je saisis une nouvelle donnée dans l'inputText vide ,il ne se déclenche pas (saisie du nombre 20)
    Not(
        IsBlank(
            LookUp(
                colReponses;
                scLibPeriode = locForm.scLibPeriode && scEtablissement.Value = LookUp(
                    Users;
                    Mail = gloUser.Email
                ).Etablissement.Value && scQuestion = ThisItem.Question
            )
        )
    )​

    Quand je compare l'ancienne version et la nouvelle, je vois que la propriété Par défaut est Inactif dans la V2 (galeries imbriquées) alors que dans la V1 Par défaut est Actif, le code dans Default est le même dans les 2 versions
    V1

    V2
    **************************************************************************************************************

    le code d'enregistrement du bouton disquette
    ClearCollect(// charge les réponses actuelles
        colCurrentReponses;
        ReponsesAIVP
    );;
    ForAll(// Parcourir les réponses mises à jour par l'utilisateur
        colReponses;
        If(
            IsBlank(// si la réponse n'exite pas encore
                LookUp(
                    colCurrentReponses;
                    ID = colReponses[@ID]
                )
            );
            Patch(// la créer
                ReponsesAIVP;
                Defaults(ReponsesAIVP);
                {
                    'Libellé Période': colReponses[@'Libellé Période'];
                    Etablissement: colReponses[@Etablissement];
                    CategorieQuestion: colReponses[@CategorieQuestion];
                    SousCategorieQuestion: colReponses[@SousCategorieQuestion];
                    Question: colReponses[@Question];
                    Reponse: colReponses[@Reponse]
                }
            );
            First(// Sinon la modifier
                UpdateIf(
                    ReponsesAIVP;
                    ID = colReponses[@ID];
                    {Reponse: colReponses[@Reponse]}
                )
            )
        )
    );;
    Notify(
        "Vos données ont été enregistrées avec succès.";
        NotificationType.Success
    );;
    Navigate(Accueil)​
    Concernant ce code c'est exactement le même qu'avec la galerie simple ou celui-ci fonctionne. En pièce jointe l'appli exportée, si besoin des listes sharepoint dis moi comment je peux te les envoyées .

    Si tu as une idée comment organiser différemment le questionnaire je suis preneur,. Pour rappel dans ce questionnaire il y a des themes qui peuvent avoir 1 ou plusieurs sous thèmes , et dans un sous thème il y a une ou plusieurs questions . J'avoue que l'imbrication de galerie est plus lisible mais je pars dans une galère, si seulement les utilisateurs pouvaient avoir des besoins simples......

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

    Attachment(s)



  • 19.  RE: Design Application

    Gold Contributor
    Posted Jul 14, 2021 06:20 PM
    Edited by EMMANUEL GALLIS Jul 14, 2021 06:21 PM
    Merci pour le formatage, c'est nickel ! Ca me permet de voir en 2s si le code semble correct ou pas.

    Tu peux me dire ce que tu as dans le OnChange du TextInput ?

    Ah, et si tu peux me décrire le besoin initial... Je pourrais peut-être avoir une idée sur comment l'implémenter autrement... Merci.

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



  • 20.  RE: Design Application

    Posted Jul 15, 2021 02:51 AM
    Bonjour Emmanuel

    Bien vu, il manquait le code dans le OnChange du TextInput. Cela fonctionne parfaitement.

    Le besoin initial est de mettre à disposition un questionnaire à une population d'utilisateurs sur une filière traitant du RGPD. La responsable du questionnaire m'a fait une maquette sur Excel que l'on a revu ensemble. Ce questionnaire devra être rempli trimestriellement, certaines questions apparaissent uniquement au semestre. Les questions sont regroupées en thèmes et dans chaque thème il y a 1 ou plusieurs sous thèmes.
    Particularité de certaines questions :
                                                          1) si la réponse est oui alors une nouvelle question apparaît

    une cartographie a-t-elle été réalisée ? oui/non
    si oui, combien de contrats sont concernés par une mise à jour?  

                                                           2) l'utilisateur est invité à saisir les données détail et le total est calculé par la somme des éléments disposés en dessous

     nb de demandes de droit d'accès total
    clients prospects
    collaborateurs
    autre
                                                               
                                                           3) et le plus compliqué :  faire un tableau variable comme ci dessous . (j'ai déja posté ce type de difficulté à laquelle tu as fais une proposition, et je suis en cours de reflexion sur le modèle de données)

    nb de violation de données déclarées CNIL 3

    cas 1 cas 2 Cas3
    causes de la violation monochoix
     - acte interne malveillant  
     - acte interne accidentel  
     - acte externe malveillant  
     - origine non humaine (virus informatqiue, catastrophe naturelle, etc…)  
     - inconnue  
       
    nature de la violation  multichoix
     - perte de confidentialité  
     - perte d'intégrité  
     - perte de disponibilité  
       
       
    origine de l'incident   monochoix
     - équipement perdu ou volé  
     - papier perdu, volé ou laissé accessible dans un endroit non sécurisé  
     - piratage, logiciel malveillant (ransonware, phishing…)  
     - mise au rebus de papier sans destruction physique  
     - mise au rebus d'appareils numérique sans effacementt sécurié  
     - publication non volontaire d'information  
     - données de la mauvaise personne affichée sur le portail client  
     - données personnelles envoyées à un mauvais destinataire  
     - informations personnelles divulguées de façon verbale  
     - autres   
       
    Estimation du niveau de gravité monochoix
     - négligeable  
     - limitée  
     - importante  
     - maximale  


    L'idée est de présenter de façon agréable les thèmes , sous thèmes et questions , c'est pourquoi ma V2 se présente ainsi


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



  • 21.  RE: Design Application

    Gold Contributor
    Posted Jul 15, 2021 05:13 AM
    Par rapport à ton besoin : pourquoi vouloir faire quelque chose de dynamique ? Qu'est-ce qui le justifie ? Est-ce que les questions qui constituent le formulaire changent en permanence ? Est-ce que vous avez une grande quantité de formulaires différents à produire ?

    Parce-que si le besoin c'est d'avoir un beau formulaire où tout est possible mais où les questions sont "fixes", alors le plus simple c'est d'utiliser un écran avec défilement dans Power Apps et de mettre chaque question dans un datacard...

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



  • 22.  RE: Design Application

    Posted Jul 16, 2021 02:18 AM
    Bonjour Emmanuel
    Les questions ne changent pas et sont fixes. Ce que tu proposes (écran avec défilement et chaque question dans un datacard) c'est de faire un formulaire , c'est bien ça ou pas?
    Merci d'avance

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



  • 23.  RE: Design Application

    Gold Contributor
    Posted Jul 16, 2021 04:59 AM
    Exact. Mais t'as 2 façon de faire un formulaire :
    • "manuellement" à l'aide d'un écran avec défilement : c'est toi qui doit tout construire de A à Z (avec la gestion des erreurs, etc.)
    • "automatiquement" à l'aide d'un contrôle formulaire : tu n'auras qu'a retravailler la mise en forme et tu bénéficieras de toute la mécanique native des formulaires Power Apps
    Perso, je te recommande la 2è solution, en supposant que dans ton cas une question correspondrait du coup à une colonne dans ta liste SharePoint qui va stocker les réponses...
    Et faudra que je t'explique du coup comment procéder pour la mise en forme du formulaire qui n'est pas forcément triviale...
    Qu'en penses-tu ?

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



  • 24.  RE: Design Application

    Posted Jul 16, 2021 05:08 AM
    Je suis ouvert à cette proposition pour voir les différentes possibilités, peux tu m'assurer que je pourrais traiter les 3 spécificités décrites dans la conversation

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



  • 25.  RE: Design Application

    Gold Contributor
    Posted Jul 16, 2021 08:04 AM
    Edited by EMMANUEL GALLIS Jul 16, 2021 08:09 AM

    Alors...

    "certaines questions apparaissent uniquement au semestre" : pas de soucis, on masque/affiche les datacards correspondants quand c'est le bon moment par rapport à la date du jour.

    "1) si la réponse est oui alors une nouvelle question apparaît" : pareil -> on affiche le datacard de la question suivante qui lui est liée en fonction de la réponse à la question en cours.

    "2) l'utilisateur est invité à saisir les données détail et le total est calculé par la somme des éléments disposés en dessous" : est-ce que les données détails sont toujours les mêmes ("nb de demandes de droit d'accès total", "clients prospects", "collaborateurs", "autre") ou est-ce qu'elles sont dynamiques ? Si elles sont fixes -> 4 datacards (1 pour chaque saisie) + 1 datacard de total (juste pour affichage).

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

    Et le regroupement par thème/sous-thème, tu le fais avec des datacards custom où tu mets des grands libellés avec une couleur de fond... D'ailleurs, tu pourrais même imaginer en faire un système pliable/dépliable pour afficher ou masquer le contenu d'un thème ou d'un sous-thème.

    Qu'en penses-tu ?

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



  • 26.  RE: Design Application

    Posted Jul 16, 2021 08:24 AM

     à ton point 2 oui elles sont fixes

    Toutes tes propositions m'agréent, pour le plier/déplier avec quel composant tu fais cela ?



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



  • 27.  RE: Design Application

    Gold Contributor
    Posted Jul 16, 2021 09:21 AM
    👍

    Pour le plier/déplier, c'est pas un composant, c'est juste une astuce pour afficher/masquer le contenu d'une section/sous-section :
    • Dans le datacard de la section, à côté du libellé du titre de la section tu mets un icône "Vers le bas" (ChevronDown)  avec :
      • OnSelect = UpdateContext({locShowSection1: Not(locShowSection1)})
      • Icon = If(locShowSection1; Icon.ChevronUp; Icon.ChevronDown)
    • Tu sélectionnes tous les datacards de la section et leur mets : OnVisible = locShowSection1
    Et voilà...

    Du coup, en termes de modèle de données pour ton questionnaire, tu devrais avoir à minima quelque chose comme ceci :
    • Questionnaire
      • ID Questionnaire
      • Question 1
      • Question 2
      • Question 3
      • ...
      • Question N
    • Déclarations CNIL
      • Questionnaire (pointe vers Questionnaire.'ID Questionnaire')
      • ID Déclaration
      • Cause violation
      • Nature violation
      • Origine incident
      • Niveau gravité
    Voilou...

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



  • 28.  RE: Design Application

    Posted Jul 16, 2021 10:51 AM
    ok merci pour toutes indications, je vais faire un exemple avec toute cette méthodo

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



  • 29.  RE: Design Application

    Gold Contributor
    Posted Jul 16, 2021 12:17 PM
    Il faudrait quand même qu'on se prenne quelques minutes lundi par exemple pour que je te montre comment manipuler efficacement les datacards dans un contrôle formulaire. Sinon tu vas péter un câble en 2/2... 😉 Si ça te dit bien sûr...

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



  • 30.  RE: Design Application

    Posted Jul 16, 2021 01:15 PM
    Merci Emmanuel, bien sur ça me dit , surtout que je viens de construire le début du questionnaire avec 6 questions (j'en aurai 64 + le bouton Violation CNIL) et j'ai des questions pour le Thème/sous thème pour insérer un label dans le datacard de la section (qu'appelles tu cela?)



    Ton heure sera la mienne, je te propose que l'on fasse par TEAMS

    Je suis zen, j'ai appris Power BI avec des tutos et le 1er reporting à produire était coton, power apps avec ton aide et ça m'a fait gagner un temps fou....

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



  • 31.  RE: Design Application

    Gold Contributor
    Posted Jul 17, 2021 06:47 AM
    Alors, quelques infos déjà pour construire ton formulaire (en avance sur la réunion de lundi 😋)...

    Si jamais tu veux donner un nom perso à ton contrôle formulaire, fais-le juste après l'avoir inséré sur ton écran. Parce-que si tu le fais à la fin après avoir fait toute ta mise en forme, au moment du renommage il te pète tout (j'ai perdu des jours entiers de boulot à cause de ça).


    Ensuite, dès que t'as inséré ton formulaire, le premier truc à faire c'est de choisir le nombre de colonnes que tu voudras pour le formater. C'est pareil, faut le faire au début parce-que sinon il te pète toute ta mise en forme si tu le fais plus tard.


    Dans ton cas, vu que tu auras une question par ligne, donc un champ par ligne, positionne le à 1.

    Ensuite, pour déplacer tes datacards vers le haut ou vers le bas, utilise le panneau Modifier les champs et glisse les datacards où tu les veux :


    Mais ATTENTION : lorsque tu déplaces un datacard avec cette technique, assure-toi qu'aucun autre datacard du formulaire ne soit masqué. Parce-que sinon il te mélange tout n'importe comment (ils ont mal géré les index de position des datacards et du coup ça foire tout).
    Du coup, lorsque dans ton formulaire tu prévois que certains datacards seront masqués (ce qui est ton cas), il faut prévoir sur ton écran un petit toggle qui, lorsqu'il est activé, rend visible la totalité des datacards avant que tu n'en déplaces un sans péter l'ordre des autres à côté.
    Par exemple, tu ajoutes un toggle togShowAllDataCards sur ton écran et sur chaque datacard de ton formulaire tu mets la propriété OnVisible à : togShowAllDataCards.Value [|| <et ton éventuelle condition à toi pour la visibilité du datacard>] (les crochets c'est pour dire que c'est optionnel).

    Ensuite, pour faire tes thèmes/sous-thème, toujours sur le panneau Modifier les champs, tu crées un datacard personnalisé :


    Et dans ce datacard, que tu positionnes au bon endroit par rapport à tes questions, tu mets un libellé qui prends toute la largeur, tu rajoutes l'icône de pliage/dépliage comme discuté précédemment et voilà ce que ça donne :



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



  • 32.  RE: Design Application

    Posted Jul 18, 2021 04:05 AM
    Bonjour Emmanuel

    Suite à tes recommandations de vendredi, je suis allé sur you tube et suis tombé sr la vidéo de Rezza Dorani ou il expliquait les datacard custom du coup en appliquant les formules que tu m'as donné, j'obtiens le résultat escompté


    1) affichage conditionnel de question
    2) plier/deplier pour le thème


    Je n'ai pas encore appliqué tes dernières recommandations. A lundi donc

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



  • 33.  RE: Design Application

    Posted Sep 16, 2021 02:58 AM
    Bonjour Emmanuel

    Je reprends le développement de mon questionnaire , et je souhaite enregistrer les données dans ma liste Sharepoint. Pour comprendre la mécanique je tente d'enregistrer 3 élements L'établissement (CE IDF) , la période (2021.06) et la réponses 1.1.1 qui est true sur la copie ci dessous

    L'icone disquette va me permettre d'enregistrer les données dans la liste sharepoint, ci dessous le code de l'icone,je tente d'enregistrer pour l'instant 3 éléments+l'ID
    ClearCollect(// charge les réponses actuelles
        colCurrentReponses;
        Questionnaire
    );;
    ForAll(// Parcourir les réponses mises à jour par l'utilisateur
        colReponses;
        If(
            IsBlank(// si la réponse n'exite pas encore
                LookUp(
                    colCurrentReponses;
                    ID = colReponses[@ID]
                )
            );
            Patch(// la créer
                Questionnaire;
                Defaults(Questionnaire);
                {
                    ID: colReponses[@ID];
                    Etablissement: colReponses[@Etablissement];
                    'Libellé Période': PeriodeChoisie.scLibPeriode;
                    Question01: colReponses[@Question01]
                    //Question2: colReponses[@Question2];
                    //Question3: colReponses[@Question3];
                    //Question4: colReponses[@Question4]
                }
            );
            First(// Sinon la modifier
                UpdateIf(
                    Questionnaire;
                    ID = colReponses[@ID];
                    {Question01: colReponses[@Question01]
                        //Question02: colReponses[@Question02];
                        //Question03: colReponses[@Question03];
                        //Question04: colReponses[@Question04]
    }
                )
            )
        )
    );;
    Notify(
        "Vos données ont été enregistrées avec succès.";
        NotificationType.Success
    );;
    Navigate(Accueil)​

    Par contre il faut certainement que j'enregistre la création ou la modification de la saisie utilisateur dans la collection locale, dans ta vidéo tu placait un toggle qui permet de savoir si la réponse existe ou pas. Dans mon formulaire de saisie je vais avoir 72 questions, dois je placer 72 toggle.En juillet tu m avais indiqué de créer une liste sharepoint comme ci dessous
    Pour info Question01 vaudra true, question02 vaudra 25 (cf copie d'écran de ma saisie)

    Merci de ton aide



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



  • 34.  RE: Design Application

    Gold Contributor
    Posted Sep 16, 2021 09:57 AM
    Salut Philippe,
    Alors tout d'abord, sur ton Patch(), pas besoin de patcher la colonne ID (c'est une colonne non modifiable d'ailleurs) :


    Le reste m'a l'air pas trop mal. Est-ce que ça marche déjà ?
    Pour ce qui est de mettre à jour la collection locale, de quelle collection s'agit-il déjà (j'y suis plus allé depuis un moment sur ma vidéo) ? colQuestions ? Pour le faire, tu pourrais simplement recharger les données de la liste Questions. Ou alors doubler le Patch() et le UpdateIf() pour patcher et updater la collection locale de la même manière.
    72 questions !! Ah ouais quand même... Ca fait beaucoup de colonnes dans ta liste SP... Mais bon, c'est franchement la solution la plus simple...
    Alors du coup ça me fait penser que si tu as une liste SP avec tes 72 colonnes (j'espère qu'il n'y aura pas de limites là-dessus) et que tu utilises un contrôle formulaire pour afficher tout ça, pas besoin du code ci-dessus (qui était nécessaire pour un formulaire dynamique). Y'a plus de code. Le contrôle formulaire est directement branché à la liste SP sur le bon item et un simple SubmitForm() sur ton bouton de sauvegarde suffit pour enregistrer tes données... Tu me suis ?

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



  • 35.  RE: Design Application

    Posted Oct 05, 2021 12:53 PM
    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
        ------------------------------