組織単位(OU)を表す OrganizationalUnit クラスの C# のコードです。
[DataObject()]
public sealed class OrganizationalUnit : DomainObject
{
#region プライベートフィールド
private List<DomainObject> _storedObjects;
#endregion
#region インターナルコンストラクタ
//DirectoryEntry を指定して OrganizationalUnit クラスの新しいインスタンスを初期化します。
internal OrganizationalUnit(DirectoryEntry entry)
: base(entry)
{
}
#endregion
#region パブリックプロパティ
//市区町村を取得または設定します。
public string City
{
get
{
if (base.IsDisposed)
{
throw new ObjectDisposedException(this.GetType().Name);
}
return (string)base.Entry.Properties["l"].Value;
}
set
{
if (base.IsDisposed)
{
throw new ObjectDisposedException(this.GetType().Name);
}
base.Entry.Properties["l"].Value = value;
}
}
//郵便番号を取得または設定します。
public string PostalCode
{
get
{
if (base.IsDisposed)
{
throw new ObjectDisposedException(this.GetType().Name);
}
return (string)base.Entry.Properties["postalCode"].Value;
}
set
{
if (base.IsDisposed)
{
throw new ObjectDisposedException(this.GetType().Name);
}
base.Entry.Properties["postalCode"].Value = value;
}
}
//都道府県を取得または設定します。
public string Prefecture
{
get
{
if (base.IsDisposed)
{
throw new ObjectDisposedException(this.GetType().Name);
}
return (string)base.Entry.Properties["st"].Value;
}
set
{
if (base.IsDisposed)
{
throw new ObjectDisposedException(this.GetType().Name);
}
base.Entry.Properties["st"].Value = value;
}
}
//直下のオブジェクトを取得します。
public IList<DomainObject> StoredDomainObjects
{
get
{
if (base.IsDisposed)
{
throw new ObjectDisposedException(this.GetType().Name);
}
if (_storedObjects == null)
{
_storedObjects = DirectoryAccess.GetStoredDomainObjects(this); //直下のオブジェクトを取得
}
return _storedObjects;
}
}
//番地を取得または設定します。
public string Street
{
get
{
if (base.IsDisposed)
{
throw new ObjectDisposedException(this.GetType().Name);
}
return (string)base.Entry.Properties["street"].Value;
}
set
{
if (base.IsDisposed)
{
throw new ObjectDisposedException(this.GetType().Name);
}
base.Entry.Properties["street"].Value = value;
}
}
#endregion
#region パブリックメソッド
//指定したパスの組織単位(OU)を検索します。このメソッドはデータバインド用です。
[DataObjectMethod(DataObjectMethodType.Select)]
public static OrganizationalUnit FindByPath(string path)
{
//distinguishedNameを生成
var ouNames = path.Split('/').Reverse();
var sb = new StringBuilder();
foreach (var ouName in ouNames)
{
sb.AppendFormat("OU={0},", ouName);
}
foreach (var dc in DirectoryAccess.DomainName.Split('.'))
{
sb.AppendFormat("OU={0},", dc);
}
sb.Length--;
return (OrganizationalUnit)DirectoryAccess.FindDirectoryObject(sb.ToString(), CategoryType.OrganizationalUnit);
}
#endregion
#region プロテクトメソッド
//使用されているリソースを解放します。
protected override void Dispose(bool disposing)
{
if (_storedObjects != null)
{
DirectoryAccess.DisposeItems(_storedObjects); //リソースを解放
_storedObjects = null;
}
base.Dispose(disposing);
}
#endregion
}
プロパティ・メソッドの説明と 内部で呼び出している DirectoryAccess クラスのメソッドについては別途書きます。