이 날 쉽게 이동 직접 보고서를 얻기 위해,이 내 첫 번째 질문입니다 에 대한. 인트라넷 기반보고 도구 (VB.Net + ASP.Net Windows 통합 인증)는 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
모든 의견 제안 및 도움은 매우 극명하게 될 것이다 :
은 기본적으로 내가 할 것 인 것이다
VB.NET/.NET 프레임 워크의 ** 버전 **을 사용하고 있습니까? 'directReports' 속성은 회사가 AD에 추가 한 맞춤 속성입니까 ?? –
VS2005 sp1 및 2.0 아니요, 광고에 내장되어 있습니다. AFAIK – SWa
아, 그래요. 예, 보고서 (LDAP 표시 이름 :'directReports')라고합니다. –