Quantcast
Channel: わんくま同盟
Viewing all articles
Browse latest Browse all 994

グループのネストしているすべてのメンバーを表示する画面のWebアプリのコード(VB)

$
0
0

グループのネストしているすべてのメンバーを表示する画面の Web アプリの VB のコードです。

'イベントハンドラ

Protected Sub Page_Load(ByVal sender As Object, ByVal e AsEventArgs) Handles Me.Load

  If String.IsNullOrEmpty(Request.QueryString("name")) Then

    Return

  End If

  If Me.IsPostBack Then

    Return

  End If

 

  Me.AddChildNode()   '子ノードを追加

End Sub

 

'プライベートメソッド

'子ノードを追加

Private Sub AddChildNode()

  Using group = DomainGroup.FindByName(Request.QueryString("name"))   'グループを検索

    Dim node As NewTreeNode(group.Name)

    Me.MemberTreeView.Nodes.Add(node)

    Dim members = DirectoryAccess.GetMembers(group)   'グループのメンバーを取得

    For Each member In members

      Me.AddChildNode(node, member)   '子ノードを追加

      member.Dispose()

    Next

  End Using

End Sub

 

'子ノードを追加

Private Sub AddChildNode(node AsTreeNode, member AsDomainObject)

  Dim childNode = CreateNode(member)   'ノードを作成

  node.ChildNodes.Add(childNode)

  If member.Category = CategoryType.Group Then

    Dim subMembers = DirectoryAccess.GetMembers(DirectCast(member, DomainGroup))   'グループのメンバーを取得

    For Each subMember In subMembers

      Me.AddChildNode(childNode, subMember)   '子ノードを追加

      subMember.Dispose()

    Next

  End If

End Sub

 

'指定したメンバーのノードを作成

Private Function CreateNode(member AsDomainObject) AsTreeNode

  Dim displayName AsString   '表示するテキスト

  Select Case member.Category

    CaseCategoryType.User

      Dim user = DirectCast(member, DomainUser)

      displayName = String.Format("{0}({1}{2}:{3}/{4})",

        user, user.LastName, user.FirstName, user.DisplayPath, user.Name)

    CaseCategoryType.Group

      Dim group = DirectCast(member, DomainGroup)

      displayName = String.Format("{0}({1}:{2})", group, group.Scope, group.DisplayPath)

    CaseCategoryType.Computer

      Dim pc = DirectCast(member, Computer)

      Dim sp As String = Nothing

      If pc.OperatingSystemServicePack IsNot Nothing Then

        sp = pc.OperatingSystemServicePack.Replace("Service Pack ", " SP")

      End If

      displayName = String.Format("{0}({1}{2}:{3})", pc, pc.OperatingSystem, sp, pc.Role)

    Case Else   'CategoryType.ForeignSecurityPrincipal

      displayName = String.Format("{0}({1})", member, member.Name)

  End Select

  Return NewTreeNode(displayName, member.Name)

End Function

 

内容的には Windows アプリと同じです。

対象のグループの情報は AddChildNode メソッドでクエリ文字列から name(名前)を取得して DomainGroup.FindByName メソッドを呼び出して取得してます。

DomainGroup.FindByName メソッドはグループリスト画面の詳細表示用 FormView のデータソースになってる ObjectDataSource の SelectMethod に指定されてるメソッドです。

※実装コードはこちら

 

 

Active Directory 関連 Blog

http://www.pbyk.com/blog/bloglist.html


Viewing all articles
Browse latest Browse all 994

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>