2013-05-20 59 views
0

我正在使用Active Directory。我能夠列出在部門工作的每個人的名單,但我不知道如何確定哪個人是經理。如何查找部門經理

public void MemberOf(string department) 
     { 
      DirectoryEntry de = new DirectoryEntry("LDAP://server.server.com"); 

      DirectorySearcher ds = new DirectorySearcher(de); 

      ds.Filter = ("(&(objectCategory=person)(objectClass=User)(department=" + department + "))"); 
      ds.SearchScope = SearchScope.Subtree; 

      foreach (SearchResult temp in ds.FindAll()) 
      { 
       string test1 = temp.Path; 
      } 
     } 

這將返回一個人列表,其中一個人是經理,其餘的是直接向經理報告。

+0

你怎麼知道?經理的「經理」屬性是否爲空?還是經理人有其他一些有區別的財產價值?經理例如屬於他的員工不屬於的特定組? –

+0

我不確定這是問題的一部分。經理A有他自己的經理。然後員工列出ManagerA作爲他們的經理。必須有一種簡單的方法來查看誰管理我想要的部門。 @marc_s –

+0

嗯,問題是:*部門*這樣('OU'容器)沒有管理器屬性。最有可能的是,像「經理人」小組或類似的東西可以檢查 - 這將是找到這些經理可靠的最簡單的方法。 –

回答

2

這不是最好的實現,但不知道你想用什麼...你將如何獲得數據...等等等等這是一個快速和骯髒的實現:

private void Test(string department) 
    { 
     //Create a dictionary using the manager as the key, employees for the values 
     List<Employee> employees = new List<Employee>(); 

     DirectoryEntry de = new DirectoryEntry("LDAP://server.server.com"); 
     DirectorySearcher ds = new DirectorySearcher(de); 

     ds.Filter = String.Format(("(&(objectCategory=person)(objectClass=User)(department={0}))"), department); 
     ds.SearchScope = SearchScope.Subtree; 

     foreach (SearchResult temp in ds.FindAll()) 
     { 
      Employee e = new Employee(); 

      e.Manager = temp.Properties["Manager"][0].ToString(); 
      e.UserId = temp.Properties["sAMAccountName"][0].ToString(); 
      e.Name = temp.Properties["displayName"][0].ToString(); 

      employees.Add(e); 
     } 
    } 

    public class Employee 
    { 
     public string Name { get; set; } 
     public string Manager { get; set; } 
     public string UserId { get; set; } 
    } 
+0

謝謝,這實際上幫助我達到了我需要的地方。 :) –

+0

仍然需要弄清楚如何判斷誰管理着一個部門,但是這確實幫助我克服了其他困難。 –