Recherche sur le blog

mardi 29 septembre 2015

[WD20] Récupérer l'e-mail dans l'AD avec .NET

Si vous avez besoin, pour une raison une autre, de récupérer des informations depuis l'Active Directory pour l'utilisateur déjà connecté sans utiliser les fonctions de la famille LDAP*, alors vous pouvez utiliser l'assemblage "System.DirectoryServices" de .NET. Dans l'explorateur de projets, effectuez un clic droit sur "Assemblages .NET" puis choisissez l'option "Utiliser un assemblage" du menu contextuel.

La première étape consiste à initialiser les variables pour lancer la recherche. Pour cela on a besoin de trois types d'objets :
  • DirectoryEntry : qui encapsule un nœud/un objet dans la hiérarchie de l'AD.
  • DirectorySearcher : pour rechercher à partir d'une position spécifique.
  • Environment.UserName : nom de l'utilisateur authentifié. 
Exemple :   
Ensuite il faut initialiser le filtre de la recherche et indiquer les propriétés que l'on souhaite récupérer. Dans notre exemple nous souhaitons obtenir l'e-mail ("mail") mais également d'autres informations (comme le prénom et le nom).
On doit ensuite lancer la recherche à l'aide de la fonction "FindOne", qui va simplement renvoyer le premier objet répondant aux critères. Si la variable qui en résulte est différente de Null, alors on peut parcourir les propriétés. Pour rappel, Windev ne gère pas les tableaux .NET, il va donc être impossible de récupérer un objet en indiquant la clé ou l'index. Pour contourner nous avons utilisé une boucle de type "POUR TOUT" (équivalent à un "foreach" en C#) afin de parcourir l'ensemble des noms de propriétés. Ensuite, nous avons récupéré une collection d'objets correspondants à la clé "mail" grâce à la procédure "get_Item()". Il ne reste plus qu'à parcourir cette collection pour récupérer la valeur. Normalement il n'y en a qu'une puisqu'on a demandé à ne reprendre que le premier objet correspondant à nos critères de recherche. On stocke donc la valeur dans une simple variable chaine.

Voici un bout de code complet (cliquez sur l'image pour la télécharger) :
        

Bon développement !

Aucun commentaire: