Double lookup

Étiquetté : , ,

  • Double lookup

    Posté par Karlemagne sur 1 avril 2022 à 12h14

    Bonjour à tous,

    Sur une table Dataverse (que je vais appelé T1), est-il possible d’avoir 2 colonnes de recherche (CR1 et CR2) en 1:N vers une même table (T2) ne comportant que 2 colonnes (C1 et C2)? Mon idée serait que dans une appli Power Apps je puisse avoir un form avec une combobox affichant les données de T2.C1, et que je patch ensuite T1 avec la valeur de C1 en CR1, et C2 en CR2.

    Ce n’est peut-être pas très clair expliqué comme ceci, donc si besoin de plus de détail, pas de soucis.

    Cordialement

    PostID=71QCOzbAYdHB3OC

    Karlemagne a répondu Il y a 7 mois, 2 semaines 1 Membre · 4 Réponses
  • 4 Réponses
  • R3dKap

    Membre
    1 avril 2022 à 15h51

    @Karlemagne oui c’est tout à fait possible… Pas de limite là-dessus à mon avis…

    La seule remarque que je pourrais faire par rapport à ce que tu décris c’est : pourquoi CR1 pointerait vers T2.C1 et CR2 pointerait vers T2.C2 ?

    Surtout qu’attention… Si T2.C1 est une colonne à valeurs uniques (comme un identifiant par ex.) alors pas de soucis : lorsque tu brancheras une liste déroulante dessus tu verras des valeurs uniques.
    Mais si T2.C2 est une colonne où tu peux retrouver plusieurs fois la même valeur sur des enregistrements différents (comme un statut par ex.) : lorsque tu brancheras une liste déroulante dessus tu auras des tas de doublons et faudra que tu ajoutes un Distinct() pour les éliminer ; bref, ça devient moins propre.

    L’idée serait plutôt d’avoir T1.CR1 qui pointe vers T2.C1 (une colonne identifiante à valeurs uniques) et T1.CR2 qui point aussi vers T2.C1. Cela ne t’empêchera pas de récupérer n’importe quelle colonne de T2 en faisant un LookUp(T2; C1 = T1.CR1) ou LookUp(T2; C1 = T1.CR2).

    Par ex. :

    • Une table Etudiant avec : n° élève, nom, prénom, etc.

    • Une table Bureau des élèves avec :

      • Président : recherche vers Etudiant.N°Elève

      • Secrétaire : recherche vers Etudiant.N°Elève

      • Trésorier : recherche vers Etudiant.N°Elève

    Tu me suis ?

    CommentID=wLypP25cGfca1GF, PostID=71QCOzbAYdHB3OC

    • Karlemagne

      Membre
      2 avril 2022 à 11h38

      @R3dKap, je te suis parfaitement.

      A vrai dire, j’étais vraiment sur la bonne voie avec le LookUp.
      Pour ce qui est de mes colonnes C1 et C2, ce ne sont que des valeurs uniques, sans doublons possible.
      Côté combobox, j’utilise une disposition double, avec la valeur de C2 comme texte principal, et celle de C1 comme texte secondaire.
      Lorsque je clique sur mon bouton de validation, je patch un nouvel enregistrement avec la valeur de T1.C1 dans ma colonne CR1 avec

      Patch(n     T1;n     Defaults(T1);n     {n          CR1:Combobox1.Selectedn     }n)

      Suite à ta proposition, que j’avais presque trouvé à force de tourner autour, j’ai rajouté la ligne

      CR2:LookUp(T2;C2 = T1.CR2);

      seulement PowerApps me sort une erreur sur le = en me disant que les types sont incompatible pour la comparaison… Ma colonne C2 est de type Nombre entier. J’ai essayer avec une au format Texte, mais cela ne change rien.

      SubCommentID=8crrmYJakL9PkP6, CommentID=wLypP25cGfca1GF, PostID=71QCOzbAYdHB3OC

  • R3dKap

    Membre
    4 avril 2022 à 11h14

    Alors si j’ai bien compris ce que tu veux faire, c’est qu’après avoir choisi l’élément de T2 tu veux créer une ligne dans T1 CR1 pointe sur l’élément de T2 et où CR2 récupère la valeur de C2 pour l’élément de T2 en question. Cela implique que ta colonne CR2 dans T1 est simplement de type Nombre et pas une colonne de recherche.

    Si c’est bien ça l’idée, ta ligne CR2 dans le patch doit être écrite comme ceci, sauf erreur de ma part :

    CR2: Combobox1.Selected.CR2

    En effet, dans Dataverse, un champ de recherche donne accès à l’ensemble des colonnes de la liste cible (pas comme dans SharePoint où il n’y a que Id et Value et où t’es obligé de faire un LookUp() pour aller voir les autres colonnes de la liste cible).

    CommentID=j31DBiWuFNinMqX, PostID=71QCOzbAYdHB3OC

    • Karlemagne

      Membre
      5 avril 2022 à 11h12

      Merci pour ton retour @R3dKap. Effectivement cela fonctionne mieux mais en modifiant légèrement. Voici ce que j’ai mis :

      CR2:Value(Combobox1.Selected.C2)

      C2 étant une colonne text récupérant la valeur d’une colonne nombre que j’appellerais C2′, manip que j’ai du faire parce que ma combobox ne voulait pas me prendre ma colonne nombre en compte…

      SubCommentID=OnfEjvKU32I5KCP, CommentID=j31DBiWuFNinMqX, PostID=71QCOzbAYdHB3OC

Connectez-vous pour répondre.