Afficher une champ conditionnellement dans un formulaire

  • Afficher une champ conditionnellement dans un formulaire

    Posté par Patrice sur 10 février 2023 à 14h53

    Bonjour,

    Je suis totalement débutant avec PowerApps et mes souvenirs de programmation sont très lointains … Ma question risque donc de vous paraître triviale 😀

    J’ai créé un liste de produits (dans une liste SharePoint) que j’affiche dans une galerie de la page d’accueil de mon app. J’ai ensuite crée un deuxième écran permettant de voir les détails d’un produit à partir de la sélection de la page d’accueil. So far, so good

    Dans cette liste de produits, j’ai des colonnes permettant de préciser des options (couleur, taille etc.). Toutefois tous les produits n’ont pas les mêmes options. Dans l’écran de détails du produit, je souhaiterai afficher uniquement les options correspondant au produit sélectionné. Sachant que ces options sont des colonnes de type “choix”, je me suis dit qu’une valeur, “non” par exemple, dans ces colonnes permettait d’être la condition pour afficher l’option ou non. Si la valeur est “non” la datacard de l’option serait rendue invisible.

    J’ai donc essayé de modifier le contrôle VISIBLE en remplaçant “true” par un if() mais je n’arrive pas à trouver une formule qui me permet de trouver la valeur de la colonne et de la comparer avec ma condition.

    Quelqu’un serait-il assez aimable pour m’aider ?

    Avec tous mes remerciements,

    Patrice

    PostID=kzwCxhYFoKUahh9

    Patrice a répondu Il y a 9 mois, 1 semaine 1 Membre · 7 Réponses
  • 7 Réponses
  • DavidZed

    Membre
    10 février 2023 à 15h44

    Hello Patrice ,

    Dans ce cas de figure, tu n’as pas besoin de mettre un If(), seul importe que le résultat de ta formule soit un booléen.

    Si ton paramètre dans ta liste Sharepoint est bien une colonne de type “oui/non” (Booléeen),

    tu peux mettre directement dans le .Visible des datacards concernés : ThisItem.’Nom de ta colonne Yes/No’

    Si ta colonne est de type choix, par exemple ‘Catégorie’ : (“Outil”, “Pièce de rechange”, “Consommable”)

    et que tu souhaites mettre un champ visible uniquement pour les produit de type Outil ou Consommable, tu pourras mettre dans le .Visible de la Datacard : ThisItem.Catégorie.Value=”Outil” || ThisItem.Catégorie.Value=”Consommable”

    le || étant un “ou”

    CommentID=guPSJOYd7Ek11PS, PostID=kzwCxhYFoKUahh9

  • DavidZed

    Membre
    10 février 2023 à 15h47

    Attention, parfois il est plus pertinent de mettre la condition de visibilité directement sur le contrôle du formulaire (un toggle pour un champ oui / non), cela permettra de faire apparaitre ou de maquer le champ sans avoir à valider le formulaire.

    CommentID=D0CBhA468youIgZ, PostID=kzwCxhYFoKUahh9

  • Patrice

    Membre
    10 février 2023 à 16h15

    Merci David. Effectivement ce que tu proposes fonctionne parfaitement. Mais ce n’est pas tout à faut ce à quoi je pensais.

    Je pense que j’ai du mal m’exprimer concernant les options. Dans ma liste de produits, j’ai des colonnes communes à tous les produits (nom, marque, référence etc.) et des colonnes qui font référence à des options spécifiques à certains produits. Par exemple un produit sera concerné par une colonne “Matière” (avec choix Bois, Aluminium, PVC) mais cette colonne devra être ignorée pour un autre produit qui lui pourra être concerné par une autre colonne d’option (Par exemple un choix de couleurs). (Note : Je procède ainsi pour avoir sur une liste simple et éviter d’avoir plusieurs listes avec des “jointures”. Mais peut être n’est-ce pas la bonne approche)

    Donc au moment de remplir la liste dans SharePoint si l’option est pertinente pour le produit je choisis une des possibilités, sinon je laisse le colonne vide ou je mets une valeur genre NON ou qqchose comme cela. C’est cela que j’aimerai pouvoir utiliser dans l’application.

    CommentID=gTNGLIBtFx9eYU0, PostID=kzwCxhYFoKUahh9

  • DavidZed

    Membre
    10 février 2023 à 16h57

    Alors, ça me paraît faisable d’ajouter dans chaque liste de choix pour tes options, un choix du type “Non concerné”

    et de mettre dans le .Visible du datacard : ThisItem.Choice.Value<>”Non concerné”

    Le soucis, c’est que ce choix va apparaitre dans la ComboBox, et si l’utilisateur le sélectionne, il rendra l’option invisible

    Alors il faudra filtrer la Datasource du ComboBox pour masquer ce choix : Filter(Choices([@’Sample List’].Choice),Value<>”Non concerné”)

    Et là normalement, tu ne pourras sélectionner ce choix que via la liste Sharepoint

    Mais je pense à une autre approche, qui selon moi est plus efficace :

    Ajouter une colonne à choix multiples “Options”, et mettre dans la liste de choix, tous les nom des colonnes d’option “modulables” (en respectant la casse)

    Dans le Visible de chaque Datacard à masquer / afficher en fonction du contexte, mettre cette simple formule : Self.DisplayName in ThisItem.Options.Value

    et voici le résultat :

    CommentID=ZtLy5WkUJR7zSad, PostID=kzwCxhYFoKUahh9

  • Patrice

    Membre
    10 février 2023 à 17h08

    Mille merci. J’en étais, laborieusement, à me dire que ThisItem.Choice.Value<>”Non concerné” pouvait peut être faire l’affaire quand j’ai reçu ton post 😀 et ce que tu proposes me parait bien plus pertinent. Je vais revoir mon approche.

    Encore merci pour ta réactivité et ton aide.

    CommentID=mmblJM9gGZTZOdx, PostID=kzwCxhYFoKUahh9

  • DavidZed

    Membre
    10 février 2023 à 17h21

    Pas de soucis, l’exercice me profite aussi, ça me fait travailler les méninges 😄

    J’en profite pour te donner quelques conseils pour la suite, car tu vas très certainement arriver sur ces étapes :

    • Si tu veux qu’un de ces champs, dont l’affichage dépend du type de produit, soit obligatoire quand il est visible, dans le .Required du Datacard : Self.Visible : Le champ sera obligatoire seulement si le datacard est affiché

    • De même, si tu veux effacer les valeurs dans les colonnes qui ne sont pas affichées, dans le .Update du datacard, tu peux remplacer un DatacardValue12.Text par : If(Self.Visible,DataCardValue12.Text,Blank())

    C’est un moyen efficace d’optimiser une appli de récupérer la valeur du paramètre d’un contrôle (enfin dans la plupart des cas)

    CommentID=KeonYbamMn6XEoW, PostID=kzwCxhYFoKUahh9

    • Patrice

      Membre
      11 février 2023 à 10h21

      Ravi que cela puisse aussi te satisfaire.En tous cas tes conseils sont précieux. J’ai fait le test ce matin et cela tourne comme une horloge.

      SubCommentID=mmdRH7R1c8JHPEw, CommentID=KeonYbamMn6XEoW, PostID=kzwCxhYFoKUahh9

Connectez-vous pour répondre.