Полегче со мной, это мой первый вопрос;)
Я потратил много времени на поиски, но не нашел того, что искал.У меня есть инструмент для создания отчетов на основе интрасети (VB.Net + ASP.Net Integrated Windows Authentication), который ищет пользователей и менеджеров из таблицы SQL Server 2005, чтобы свести отчеты к уровню менеджера.
В настоящее время эта таблица ведется вручную, и меня попросили сделать ее более динамичной, поскольку она будет расширена для гораздо большего числа пользователей.Поэтому я ищу связь с Active Directory для создания таблицы Org на внутреннем сервере, которая заменит текущую введенную вручную.
Мне удобно получать пользовательские данные из AD, но не такКонечно, в отношении наилучшего подхода к настройке я подумал о следующей таблице:
CREATE TABLE dbo.Employees
(
EmpID nvarchar(8) PRIMARY KEY,
EmpName nvarchar(30),
EmpNo nvarchar(15),
EmpEmail nvarChar(255),
EmpTitle nvarchar(255),
MgrID nvarchar(8) FOREIGN KEY REFERENCES Employees(EmpID)
)
GO
EmpID
будет NetworkID
(sAMAccountName).
Тогда это будетнужно заполнить из AD, я думаю, через рекурсивные вызовы, чтобы заполнить поля.
Тогда я не уверен, как структурировать код так, чтобы он охватывал каждого сотрудника каждого менеджера, начиная с определенного уровня.
В настоящее время я использую нижеследующее, чтобы получить прямые отчеты для данного менеджера:
Public Function GetDirectReports(ByVal ADFullName As String) As ArrayList
Dim adItems As ArrayList = New ArrayList
Dim rootEntry As New DirectoryEntry("LDAP://" & ADFullName)
Dim searcher As New DirectorySearcher(rootEntry)
searcher.PropertiesToLoad.Add("directReports")
searcher.PropertiesToLoad.Add("sAMAccountName")
searcher.PropertiesToLoad.Add("cn")
searcher.PageSize = 5
searcher.ServerTimeLimit = New TimeSpan(0, 0, 30)
searcher.ClientTimeout = New TimeSpan(0, 10, 0)
Dim queryResults As SearchResultCollection
queryResults = searcher.FindAll()
Dim x As Integer
For Each result As SearchResult In queryResults
For x = 0 To result.Properties("directReports").Count - 1
adItems.Add(New ADReports(result.Properties("directReports")(x), _
ExtractUser(result.Properties("directReports")(x))))
Next
Next
Return adItems
End Function
Private Function ExtractUser(ByVal username) As String
Return Split(Split(username, "CN=")(1), ",")(0)
End Function
Любые комментарии, предложения и помощь будут очень благодарны :)