組織単位(OU)を表す OrganizationalUnit クラス(VB, C#)に実装したメンバについて説明します。
プロパティ
City(市区町村)、PostalCode(郵便番号)、Prefecture(都道府県)、Street(番地)は OU のプロパティ画面の全般タブに表示される項目で、DirectoryEntry.Properties プロパティの Item プロパティに属性名を指定して その Value プロパティに対して取得・設定してます。
StoredDomainObjects(直下のオブジェクト)は OU に格納されてるユーザやグループなどのオブジェクトのコレクションを取得します。
このプロパティは、アクセスされなければ取得(DirectoryAccess.GetStoredDomainObjects メソッドの呼出し)したくないのと、何回も取得したくないので、内部保持用の変数が Nothing/null の時だけ取得するようにしました。
そのためメソッドじゃなくプロパティとして実装しました。
メソッド
FindByPath(指定したパスの OU を検索)は Web アプリでのデータバインド用で、選択した OU を検索するのに使います。
他のオブジェクトの場合は FindByName メソッドで 選択したオブジェクトを検索(DirectoryAccess.FindDirectoryObject メソッドの呼出し)してます。
OU は名前だと一意じゃないので、一意になるスラッシュ区切りのパスを基に検索用の文字列となる distinguishedName 属性の値を生成します。
例えば virtual.proceed.local ドメインの開発部 OU にある一課 OU の distinguishedName 属性の値は次のようになります。
OU=一課,OU=開発部,DC=virtual,DC=proceed,DC=local
この値(識別名の形式)を生成してます。
ドメイン名は DirectoryAccess.DomainName プロパティで取得でき、内部的には Domain オブジェクトの Name プロパティの値を保持してます。
Dispose(使用されているリソースを解放)は StoredDomainObjects プロパティ保持用の変数が設定されてる場合に、各オブジェクトのリソースを解放(DirectoryAccess.DisposeItems メソッドの呼出し)するためにオーバーライドしてます。
DirectoryAccess.DisposeItems メソッドは Windows アプリで フォームのデザイナ側にある Dispose メソッド内でも使われてます。
内部で呼び出している DirectoryAccess クラスのメソッドについては別途書きます。