Répondre à: Colonne Lookup dans dataverse

  • R3dKap

    Membre
    14 février 2023 à 17h18

    Ok, alors voici comment procéder…

    Commence par ajouter une datacard personnalisée à ton formulaire. Ajoutes-y un libellé puis une combo box appelée DataCardValueIngénieurs (zone de liste déroulante) et assure-toi que sa propriété SelectMultiple est bien à true.

    Dans le Items de ta combo box où tu veux choisir les ingénieurs, met juste : Utilisateurs. En fait, on considère que ta combo box sert à sélectionner des personnes, donc on pointe directement sur la table des utilisateurs. Assure-toi que tu choisisses bien la colonne Nom complet pour afficher le nom des utilisateurs dans la liste déroulante.

    Reste à gérer les valeurs par défaut de la combo box et l’enregistrement/chargement des ingénieurs rattachés à une prestation.

    Je vais supposer que tu as un formulaire sur ton écran directement branché sur ta table Prestation ; et que ta colonne principale (qui est de type ‘Identificateur unique‘) s’appelle Prestation (c’est souvent le même nom que la table elle-même).

    Je vais aussi supposer que tu as bien une table Prestations_Utilisateurs avec 2 colonnes :

    • Prestation : un lookup vers ta table Prestation

    • Utilisateur : un lookup vers la table Utilisateurs

    Sur le DefaultSelectedItems de DataCardValueIngénieurs mets le code suivant :

    Filter(n    Utilisateurs; n    systemuserid in ShowColumns(n        Filter(n            Prestations_Utilisateurs; n            Prestation.Prestation = varSelectedPrestation.Prestationn        ); n        "systemuserid"n    )n)

    Le Filter() de niveau 2 va chercher tous les utilisateurs rattachés à la prestation qui est en train d’être éditée.

    Le Filter() tout en haut va chercher ces utilisateurs directement dans la table Utilisateurs.

    Je suppose que la prestation en cours d’édition (potentiellement choisie sur un écran précédent dans une galerie) se trouve dans une variable varSelectedPrestation.

    Dans le OnSuccess de ton formulaire, met le code suivant pour rattacher les utilisateurs choisis à la prestation sélectionnée :

    RemoveIf(Prestations_Utilisateurs; Prestation.Prestation = Form1.LastSubmit.Prestation);;nForAll(n    DataCardValueIngénieurs.SelectedItems As Ingénieur;n    Patch(n        Prestations_Utilisateurs;n        Defaults(Prestations_Utilisateurs);n        {n            Prestation: varSelectedPrestation;n            Utilisateur: Ingénieurn        }n    )n)

    En fait on fait de l’annule-et-remplace…

    Voilà… J’ai écris ça un peu à l’arrache… Le principe est là… Si tu as des erreurs, n’hésite pas à revenir vers moi. J’essaierais de reproduire ton cas plus précisément demain pour corriger 2 ou 3 petites choses si nécessaire.

    CommentID=qwCzQUj8OVUU52Z, PostID=z324iIg1fpvSr5r