Actualité Tutoriels Liens contact dotnet-tech.com - Home - Tutoriels techniques avec code source Dotnet-tech.com : Les site sur les technologies .Net

Emploi by Jobintree

Construire une liste de contacts sur la base de l'ActiveDirectory


01/09/2004
Par Laurent Geffroy



Version PDF à télécharger
Code Source

Droit de diffusion:
L'ensemble ou partie de ce document ainsi que le code mis à disposition, ne peut être diffusé sur d'autres sites Web sans l'autorisation au préalable de son créateur.

Avant Propos :
Combien de fois m’a-t-on demandé Pourquoi il n’y a pas d’annuaire sur l’intranet ? Grrrrr. Maintenant, il y en a un ! Mais pour ceux qui souhaitent le mettre en place, il y a plusieurs questions organisationnelles à régler :

  • Qui le met à jour ? Les petits gars de l’informatique ont autre chose à faire que de renseigner les numéros de portables ! Il faut trouver une personne qui ne risque pas de vous mettre en l’air l’ensemble de votre AD !!
  • Combien de contacts et de requêtes par jour ? Le cas d’espèce concerne une petite centaine de noms et peu de requêtes quotidiennes. Pour des annuaires plus conséquents, il sera nécessaire de trouver une autre solution (stockage en base avec MAJ quotidienne par exemple ou optimisation du DataSet)
Ce tutoriel passe en revue plusieurs techniques :
  • L’accès à l’Active Directory,
  • La construction d’un DataSet,
  • La publication dans un DataGrid paginé,
  • La création d’un UserControl de publication et de recherche de contacts,
  • L’invocation d’un XML WebService
N’hésitez pas à télécharger et à utiliser les sources.

Sommaire:

1. La Classe d’accès à l’ActiveDirectory
1.1 La connexion à l’Active Directory
1.2 La construction de la table pour le DataSet
1.3 Accéder aux clés de l’ActiveDirectory
1.4 Insérer les données de l’ActiveDirectory dans mon DataSet
2. La construction du DataGrid et de la pagination
2.1 Le UserControl et le DataGrid
2.2 Le chargement du UserControl
2.3 Le Bind du DataGrid
2.4 La gestion de la navigation dans le DataGrid
2.5 La recherche
3. L’invocation du WebService
3.1 Le XML WebService
3.2 L’accès au XML WebService
4. Mon utilisateur dans l’ActiveDirectory et mon application Web
5. Pour conclure
6. En Savoir plus

1. La Classe d’accès à l’ActiveDirectory



Comme d’habitude, mon projet dispose d’une classe pour les accès et de 2 structures.

struct_connexion contient l’objet DirectoryEntry qui me permet d’accéder à mon ActiveDirectory

struct_resultat est quand à lui intégré dans struct_connexion.

Utilisez l’assembly System.DirectoryServices pour exploiter votre Active Directory


1.1 La connexion à l’Active Directory




Ma méthode Connexion prend 3 arguments, l’adresse du serveur ActiveDirectory, l’utilisateur habilité à y accéder et son mot de passe.

L’objet de connexion DirectoryEntry est stocké dans ma structure ainsi que l’état de la connexion (succès ou échec). Une vieille habitude d’ASP mais les erreurs de connexion peuvent aussi être renvoyées au niveau supérieur par un vulgaire throw.

1.2 La construction de la table pour le DataSet




Rien de très compliqué ici. On créé de toute pièce un DataTable qui correspondra au niveau du nom des champs aux clés LDAP. Vous allez ici faire le tri des données que vous souhaitez récupérer. Voici une liste des principales clés disponibles dans l’ActiveDirectory.

http://www.aspfr.com/forum.v2.aspx?ID=84360 pour une liste (trop) complète.

birthLocation
businessCategory
cn
co
company
countryCode
dc
department
description
displayName
displayNamePrintable
division
employeeID
employeeNumber
employeeType
givenName
initials
ipPhone
location
mail
mailAddress
middleName
mobile
name
notes
o
otherFacsimileTelephoneNumber
otherHomePhone
otherIpPhone
otherLoginWorkstations
otherMailbox
otherMobile
otherPager
otherTelephone
ou
pager
personalTitle
physicalDeliveryOfficeNamev
postalAddress
postalCode
postOfficeBox
sn
st
street
streetAddress
telephoneNumber
teletexTerminalIdentifier
telexNumber
title


1.3 Accéder aux clés de l’ActiveDirectory




Une fois connecté à mon annuaire et les données récupérées, ma méthode RetournePropriete me donne la valeur de la string. Elle attend l’objet SearchResult (qui contient un enregistrement de l’annuaire) et la clé.

1.4 Insérer les données de l’ActiveDirectory dans mon DataSet




Ma méthode Recherche va retourner le DataSet avec l’ensemble des données de mon annuaire. Elle utilise l’Objet DirectoryEntry, qui a été instancié lors de la connexion à mon annuaire, une valeur true ou false (true si je souhaite toutes les données), et une chaîne de recherche (si p_all est à false).

Si j’ai des résultats, je construis mon DataTable



Il est nécessaire ici d’opérer un tri au risque de remonter l’utilisateur ASPNET ! En effet, je ne remonte que les utilisateurs qui ont un displayName et des coordonnées (telephone, mail ou mobile).

Dès lors, je créé un DataRow et j’ajoute les valeurs dans les champs grâce à la méthode RetournePropriete décrite plus haut.



Ne pas oublier l’ajout de la table dans le DataSet

2. La construction du DataGrid et de la pagination



Pour des questions évidentes de modularité, j’ai créé un UserControl qui sera placé dans une page ASPX. Ce UserControl contient la grille et tous les modules d’accès et de recherche dans l’ActiveDirectory

2.1 Le UserControl et le DataGrid




La partie supérieure servira pour lancer des actions. txt_recherche permet la saisie de la chaîne de caractères de recherche, bt_cherche, lance la sélection, bt_all permet de revenir à une liste non filtrée. lb_erreur affiche les éventuels messages d’échec.

Mon DataGrid, dg dispose d’une méthode pour le classement « Grid_SortCommand » et pour la pagination « Grid_Change ». Notez également les Expressions de tri sur les Colonnes qui correspondent aux noms des champs du DataSet.

2.2 Le chargement du UserControl




J’ajoute 4 attributs à mon DataGrid ce qui me permet de stocker différents états :
  • Le mode de tri, ascendant ou descendant,
  • Le champ de tri, par défaut «sn »,
  • Le type d’affichage (tout ou le résultat d’une recherche –true ou false-),
  • La chaîne de filtre
J’invoque alors BindGrid avec les paramètres d’affichage et de contenu).

bt_all n’est visible que si j’ai appliqué un filtre. Ce bouton permet de revenir à l’affichage complet de l’annuaire.

2.3 Le Bind du DataGrid




Ma méthode Affichage me construit le DataSet. Elle est détaillée dans la section 3.2.

Si mon DataSet contient au moins un table et un enregistrement, je place la DataTable dans mon DataView que je tri en fonction des paramètres de la méthode.

On gère ensuite la page en cours et je bind mon DataView dans mon DataGrid.

2.4 La gestion de la navigation dans le DataGrid




On retrouve ici les méthodes Grid_Change pour le changement de page qui affecte la nouvelle page en cours et reprends des valeurs des attributs du DataGrid pour construire correctement le DataSet et le tri, et Grid_SortCommand qui gère le tri ascendant et descendant.

Je bind mon DataGrid à chaque fois.

2.5 La recherche




bt_all_Click permet de revenir à l’affichage global, sans filtre.

bt_rechercher_Client lance la recherche en fonction du mot clé saisi.

3. L’invocation du WebService



J’ai choisi dans cet exemple d’accéder à l’ActiveDirectory par un XML pour 2 raisons :
  • C’est un bon cas pratique, l’occasion de montrer l’utilisation des WebServices
  • Dans le cas d’espèce, je souhaitais ajouter la fonctionnalité d’annuaire dans une application SharePoint.
Les règles de sécurité m’empêchaient tout simplement d’accéder à l’annuaire. D’où l’idée de passer par une couche tiers, le WebService !

3.1 Le XML WebService




Mon WebService attend les paramètres de connexion et de recherche. En cas d’erreur, le WebService retournera un DataSet vide.

N’oubliez pas la description du WebService, cela ne coûte rien.

3.2 L’accès au XML WebService




Après avoir ajouter une WebReference vers le WebService qui retourne les données de l’annuaire, on invoque la WebMethod MonAnnuaire avec les paramètres de connexion et de recherche… Tout simplement. Le WebService retourne un DataSet.

4. Mon utilisateur dans l’ActiveDirectory et mon application Web



Dans l’ActiveDirectory, j’ai renseigné mon compte utilisateur de la manière suivante :



J’ajoute ma ligne directe en cliquant sur Autre



Je précise mes autres numéros dans l’onglet « Téléphones »



Enfin, j’ajoute mon titre, mon service et mon site dans le champ Société.



Voici le résultat dans mon application Web ! Le tour est joué.



5. Pour conclure



Malgré la richesse des points abordés, le développement peut être amélioré sur plusieurs points :
  • Sur l’optimisation du DataSet, notamment si les données récupérées sont importantes
  • Sur le mode de récupération. Un tableau des propriétés LDAP pourrait être conçu pour construire rapidement le DataTable par une boucle.
J’espère que ce tutoriel vous a aidé à maîtriser l’accès à votre annuaire LDAP.

6. En Savoir plus



Objets ActiveDirectory
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vbconIntroductionToADSIObjectsInVisualStudio.asp

Rechercher les informations Utilisateurs dans AD (VB.NET)
http://www.123aspx.com/redir.aspx?res=30841

Accéder à l’ActiveDirectory
http://www.15seconds.com/issue/020730.htm

Optimiser son DataSet
http://www.eggheadcafe.com/articles/20031219.asp

L’auteur : Laurent GEFFROY
http://www.laurentgeffroy.com lgeffroy-at-club-internet.fr









Accueil - Tutoriels & Articles - Liens - A Propos de l'auteur dotnet-tech.com : le site des technologies .net

www.dotnet-tech.com - 2003-2007