が私に簡単に行く直接レポートを取得するには、これが私の最初の質問ですために。私はイントラネットベースのレポートツール(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
ああ - はい、それは 'Reports'(LDAP表示名:' directReports')と呼ばれています。 –