IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

LDAP & List<IDictionaryEnumerator> - Comment Simplifier ce code ?


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Étudiant
    Inscrit en
    Janvier 2004
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2004
    Messages : 279
    Par défaut LDAP & List<IDictionaryEnumerator> - Comment Simplifier ce code ?
    Hello !

    Bon, vu mon code, j'ai l'impression de ne pas utiliser les bonnes classes ou les bons objets.

    Voici ce que je dois réaliser :

    Recherche LDAP -> Retourne les propriétés. -> Possibilité d'aller les consulter Key/Value une par une, comme je le souhaite.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    // Classe LDAP
    // Méthode de listage : 
    
    // (...)
    IDictionaryEnumerator dir = null;
    List<IDictionaryEnumerator> listDir = new List<IDictionaryEnumerator>();
    
                        DirectoryEntry entry = result.GetDirectoryEntry();
    
                        dir = entry.Properties.GetEnumerator();
                        listDir.Add(dir);
    // (...)
    return listDir;
    
    
    ///////////////////////////////////
    
    // Classe Form1.cs
    
    // (...)
    
    private void ListerPCs()
            {
                try
                {
                    ListViewItem item = null;
                    List<IDictionaryEnumerator> listDir = new List<IDictionaryEnumerator>();                
    
                    listDir = engine.ldap.listAllComputer(); // ---> ici je récupère ma liste depuis ma classe LDAP ci dessus...
    
                    foreach (IDictionaryEnumerator dir in listDir)
                    {
                        String cn = null;
                        String os = null;
                        String osVer = null;
                        String osSP = null;
                        String Desc = null;
                        while (dir.MoveNext())
                        {
                            if (dir.Key.ToString().ToLower().Equals("cn"))
                            {
                                IDictionaryEnumerator val = (IDictionaryEnumerator)dir.Value;
                                while (val.MoveNext())
                                {
                                    if(val.Key.ToString().ToLower().Equals("value"))
                                        cn = dir.Value.ToString();
                                } 
                            }                        
                        }
                        item = new ListViewItem(new String[] { cn, os, osVer, osSP, Desc });
                        lviewInfo.Items.Add(item);
                    }
                }
    Le code en GRAS me parait un peu long pour l'utilisation que j'en fais.

    Je sais exactement quels champs je dois récupérer :
    Les clés suivantes :
    cn
    operatingSystem
    operatingSystemVersion
    operatingSystemServicePack
    Description


    Existe-t-il un moyen de simplifier mes lignes de code ? Peut-être en utilisant autre chose qu'un IDictionnaryEnumerator par exemple, je ne sais pas ...

    Pouvez-vous me guider ?

    MErci.

  2. #2
    Membre émérite
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
           IDictionaryEnumerator val = (IDictionaryEnumerator)dir.Value;
           while (val.MoveNext())
           {
     
           }
    La tu as réécrit le comportement d'une boucle foreach.

  3. #3
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    De ce que je vois, il n'y a pas de raison dans ton code de manipuler directement des Enumerator. Le plus simple AMHA est de faire renvoyer à ta première fonction non pas une liste d'énumérateurs une liste de dico, et tu pourras donc parcourir chaque dico avec un foreach classique plutôt que de devoir recourir à un bidule.MoveNext() moche.

    [EDIT] posté en même temps que harz, amis ça tombe bien parce que nos posts se complètent

  4. #4
    Membre éclairé
    Étudiant
    Inscrit en
    Janvier 2004
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2004
    Messages : 279
    Par défaut
    J'ai finalement résolu mon problème en traitant les données brutes résultant des requêtes LDAP :


    Dans mon code principal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    System.DirectoryServices.SearchResultCollection srCol = engine.ldap.listAllComputer();
     
    foreach (System.DirectoryServices.SearchResult result in srCol)
                    {
                        String cn = null;
                        String os = null;
                        String osVer = null;
                        String osSP = null;
                        String Desc = null;
     
                        System.DirectoryServices.DirectoryEntry entry = result.GetDirectoryEntry();
     
                        cn = entry.Properties["cn"].Value != null ? entry.Properties["cn"].Value.ToString() : String.Empty;
    (...)


    Dans le code principal de l'autre coté j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public SearchResultCollection listAllComputer()
        {
            try
            {
                filter("(objectClass=Computer)");
     
                if (searcher != null)
                {
                    return searcher.FindAll();
                }
                else
                    return null;
            }
            catch (Exception e)
            {
                throw e;
            }
        }
    Ca fonctionne nickel, et je suis en train de génériser tout cela encore + ...

    (passage en paramètre à une fonction de la série des propriétés dont on veut connaitre les valeurs, etc...)

    Merci.

  5. #5
    Membre émérite
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Par défaut
    Citation Envoyé par Guulh Voir le message
    [EDIT] posté en même temps que harz, amis ça tombe bien parce que nos posts se complètent
    Sauf qu'il y avait une faute dans le mien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment simplifier mon code javascript?
    Par Nighthawk dans le forum jQuery
    Réponses: 2
    Dernier message: 15/07/2015, 10h15
  2. Comment simplifier ce code en une fonction simple ?
    Par roleca dans le forum Langage
    Réponses: 10
    Dernier message: 05/09/2014, 17h31
  3. comment simplifier ce code ?
    Par laurentSc dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 09/09/2013, 19h38
  4. [XL-2007] Comment simplifier mon code VBA SVP?
    Par anthooooony dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/02/2012, 10h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo