2013-02-13 179 views
1

現在,我想要拿出2 DropDownList s,一個員工DropDownList和另一個,經理DropDownList如何根據員工下拉列表的值填充經理下拉列表?

首先,我不熟悉如何Active Directory中的作品,但已經做了一些研究,我沒有發現類似下面這是我理解的代碼,代表經理定義:

Dim deEmployee As New DirectoryEntry("LDAP://CN=John Employee,OU=Sales,DC=Corp,DC=com") 

    deEmployee.[Property]("manager") = "CN=Peter Manager,OU=Sales,DC=Corp,DC=com" 
    deEmployee.CommitChanges() 

由於存在多種manageers ,我可以像上面所做的那樣硬編碼名稱= CN=Peter Manager

什麼組代表Active Directory中的管理器,我可以使用而不是CN=Peter Manager

對我來說,更大的問題是,如果我從第一個DropDownList中選擇員工,它如何與該員工的經理填充第二個DropDownList

從我所說的,部門是將員工與經理聯繫起來的屬性,但我如何在代碼中使用它?

在正常的級聯下拉列表中,我可以選擇員工,並在第一個下拉列表中選擇員工所屬的部門,然後在第二個下拉列表中,我可以選擇部門=第一個下拉列表中的部門列表。

這是查詢數據庫,但在我的情況下,我們正在查詢活動目錄。

有人可以展示如何鏈接員工在第一DropDownList和經理在第二DropDownList基於部門之間的關係?

回答

1

AD中沒有內置的管理員組,只有組織添加了一個,才能夠直接從組或OU中查詢他們。

員工沒有自動鏈接到經理,因此您必須查詢部門並選擇正確的用戶作爲經理。

您將需要編寫一個查詢,得到所有用戶除選擇的用戶一個部門,這樣的事情應該工作:

Imports System.DirectoryServices 

... 

Protected Sub EmployeeChanged(sender as object, e as EventArgs) Handles ddlEmployees.SelectedIndexChanged 

    Dim selectedUser as new DirectoryEntry(ddlEmployees.SelectedValue) 'assuming your Value on the empoyees dropdown is the LDAP object path 
    Dim domainRoot as new DirectoryEntry("LDAP://DC=corp,DC=com") 
    Dim searcher as new DirectorySearcher() 
    searcher.SearchRoot = domainRoot 
    searcher.Filter = "(&(objectClass=user)(department=" & selectedUser.Properties("department").Value & "))" 

    Dim results as SearchResultCollection = searcher.FindAll() 

    For Each result as SearchResult in results 

     Dim de as DirectoryEntry = result.GetDirectoryEntry() 

     If de IsNot Nothing Then 

      If Not de.Properties("samaccountname").Value.ToString().ToLower() = selectedUser.Properties("samaccountname").Value.ToString().ToLower() Then 

       ddlManagers.Items.Add(de.Properties("displayName").Value.ToString(), de.Properties("distinguishedName").Value.ToString()) 

      End If 

     End If 

    Next 

End Sub 

欲瞭解更多信息,編寫LDAP查詢:http://technet.microsoft.com/en-us/library/aa996205(v=exchg.65).aspx

+0

謝謝你非常。我遇到了以下錯誤:'超載解析失敗,因爲沒有可訪問'添加'接受這個數量的參數' 在以下行:'ddlManagers.Items.Add(de.Properties(「displayName」)。Value.ToString( ),de.Properties(「distinguishedName」)。Value.ToString())'。我似乎無法弄清楚。 – 2013-02-14 14:43:25

+0

這很奇怪...嘗試將其更改爲Dim newItem作爲新ListItem(de.Properties(「displayName」).value.ToString(),de.Properties(「distinguishedName」).value.ToString()) ddlManagers。 Items.Add(newItem)' – Sean 2013-02-14 15:10:24

+0

謝謝@Sean。現在,我得到這個: '類型'System.DirectoryServices.SearchResult'的值不能轉換爲'System.DirectoryServices.DirectoryEntry'。' 在這條線: '昏暗德作爲的DirectoryEntry = CTYPE(結果,的DirectoryEntry)' – 2013-02-14 15:21:38