TREEVIEW ACTIVE DIRECTORY

 Tópico anterior Próximo tópico Novo tópico

TREEVIEW ACTIVE DIRECTORY

ASP.NET

 Compartilhe  Compartilhe  Compartilhe
#483919 - 14/08/2018 13:25:10

ALEVALE
JUNDIAI
Cadast. em:Março/2012


Boa tarde

Preciso de uma ajuda, na realidade não tenho muita familiaridade com o TreeView, preciso criar a estrutura do AD lendo somente as Unidades Organizações e as Sub unidades.
Eu até consegui no teste abaixo, listar elas, mas estou com dúvidas de como estrutura o resultado em um TreeView.
    
   Dim rootDSE As DirectoryEntry = New DirectoryEntry("LDAP://RootDSE")
        Dim defaultNamingContext As String = rootDSE.Properties("defaultNamingContext").Value.ToString()
        Dim orgUnits As List(Of String) = New List(Of String)()
        Dim startingPoint As DirectoryEntry = New DirectoryEntry("LDAP://" & defaultNamingContext)
        Dim searcher As DirectorySearcher = New DirectorySearcher(startingPoint)
        searcher.Filter = "(objectCategory=organizationalUnit)"

        For Each res As SearchResult In searcher.FindAll()
            orgUnits.Add(res.Path)
            MsgBox(res.GetDirectoryEntry().Name)
        Next

RESULTADO:
"OU=Americas,DC=domain,DC=teste"
"OU=SITE,DC=domain,DC=teste"
"OU=SITE,OU=SERVES,DC=domain,DC=teste"



---------------------------------------------------------------
"Já está provado por A+B que A+B num prova nada"
---------------------------------------------------------------

Resposta escolhida #483923 - 14/08/2018 14:22:00

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe

Última edição em 14/08/2018 14:23:12 por KERPLUNK

Você precisa é criar um Searcher pra trazer os objetos:

DirectoryEntry ADentry = new DirectoryEntry("LDAP://RootDSE/DC=server,DC=local", AD.LDAPUser, AD.Password, AuthenticationTypes.Secure);

DirectorySearcher Searcher = new DirectorySearcher(ADentry);
Searcher.Filter = ("(objectClass=*)");  //buscando todos os objetos.

// O primeiro item no resultado é sempre o domínio, por isso é só buscar os filhos dele
foreach (DirectoryEntry entry in Searcher.FindOne().GetDirectoryEntry().Children)
{
    if (ShouldAddNode(entry.SchemaClassName))
        TreeView1.Nodes.Add(GetChildNode(entry)); Aqui você adiciona no treeview os nós com seus filhos
}

private TreeNode GetChildNode(DirectoryEntry entry)
{
    TreeNode node = new TreeNode(entry.Name.Substring(entry.Name.IndexOf('=') + 1));

    foreach (DirectoryEntry childEntry in entry.Children)
    {
        if (ShouldAddNode(childEntry.SchemaClassName))
            node.Nodes.Add(GetChildNode(childEntry));
    }

    return node;
}


_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#483924 - 14/08/2018 14:25:02

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
O método ShouldAddNode no exemplo, é usado para filtrar apenas os tipos que você quiser, como OU(Organizational Unit) ou outro que quiser.

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#483986 - 16/08/2018 11:50:58

ALEVALE
JUNDIAI
Cadast. em:Março/2012


Obrigado, funcionando.

Fiz uma pequena alteração, pois preciso que quando o usuário clicar no nó do treeview ele capture o ldap da OU.
Só achei estranho uma coisa, que mesmo eu adicionando o value do nó (debugando ele captura correto) quando eu clico ele está trazendo a informação perdida, uma informação que não é a do nó correto.

    Private Function GetChildNode(ByVal entry As DirectoryEntry) As TreeNode
        Try
            Dim node As TreeNode = New TreeNode(entry.Name.Substring((entry.Name.IndexOf(Microsoft.VisualBasic.ChrW(61)) + 1)))

            For Each childEntry As DirectoryEntry In entry.Children
                If childEntry.SchemaClassName.ToString = "builtinDomain" Or childEntry.SchemaClassName.ToString = "container" Or childEntry.SchemaClassName = "organizationalUnit" Then
                    node.Value = CStr(childEntry.Properties("distinguishedName").Value).Replace("/", "\/")
                    node.ChildNodes.Add(GetChildNode(childEntry))
                End If
            Next

            Return node

        Catch ex As Exception

        End Try

    End Function


---------------------------------------------------------------
"Já está provado por A+B que A+B num prova nada"
---------------------------------------------------------------

 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por ALEVALE em 10/09/2018 10:54:18