サンプルアプリのライブラリ側に共有フォルダ用のクラスを追加しました。
共有フォルダを表すクラス Volume クラスは DomainObject クラスを継承します。
そして Webアプリでデータソースとして使えるようにします。
<DataObject()>
Public NotInheritable Class Volume
Inherits DomainObject
#Region " プライベートフィールド "
Private _keywords() As String
#End Region
#Region " フレンドコンストラクタ "
'DirectoryEntry を指定して Volume クラスの新しいインスタンスを初期化します。
Friend Sub New(entry As DirectoryEntry)
MyBase.New(entry)
_keywords = entry.Properties.Item("keywords").Cast(Of String)().ToArray()
End Sub
#End Region
#Region " パブリックプロパティ "
'キーワードを取得または設定します。
Public Property Keywords As String()
Get
Return _keywords
End Get
Set(value As String())
If MyBase.IsDisposed Then
Throw New ObjectDisposedException(Me.GetType().Name)
End If
MyBase.Entry.Properties.Item("keywords").Value = value
_keywords = MyBase.Entry.Properties.Item("keywords").Cast(Of String)().ToArray()
End Set
End Property
'UNC パスを取得または設定します。
Public Property UncPath As String
Get
If MyBase.IsDisposed Then
Throw New ObjectDisposedException(Me.GetType().Name)
End If
Return DirectCast(MyBase.Entry.Properties.Item("uNCName").Value, String)
End Get
Set(value As String)
If MyBase.IsDisposed Then
Throw New ObjectDisposedException(Me.GetType().Name)
End If
MyBase.Entry.Properties.Item("uNCName").Value = value
End Set
End Property
#End Region
#Region " パブリックメソッド "
'指定した名前の共有フォルダを検索します。このメソッドはデータバインド用です。
<DataObjectMethod(DataObjectMethodType.Select)>
Public Shared Function FindByName(name As String) As Volume
Return DirectCast(DirectoryAccess.FindDirectoryObject(name, CategoryType.Volume), Volume)
End Function
'共有フォルダの一覧を取得します。このメソッドはデータバインド用です。
<DataObjectMethod(DataObjectMethodType.Select)>
Public Shared Function GetVolumes() As IList(Of Volume)
Return DirectoryAccess.GetVolumes() '共有フォルダを取得
End Function
#End Region
End Class
キーワードは複数登録できるので配列にしてます。(=> プロパティ画面)
取得で Nothing が返されないよう keywords 属性の値を配列にしたものを変数 _keywords に保持してそれを返すようにしてます。
設定で value が Nothing の場合は MyBase.Entry.Properties.Item("keywords").Value(PropertyValueCollection クラスの Value プロパティ)は Nothing になりますが、PropertyValueCollection インスタンスはコレクションが空になるだけです。
なので、MyBase.Entry.Properties.Item("keywords").Cast(Of String)().ToArray() は空の配列を返すため、_keywords が Nothing になることはないです。
データバインド用のメソッドは Webアプリで必要になります。内部で DirectoryAccess クラスのメソッドを呼んでますが、これについては別途書きます。