サンプルアプリのライブラリ側に共有フォルダ用のクラスを追加しました。
共有フォルダを表すクラス Volume クラスは DomainObject クラスを継承します。
そして Webアプリでデータソースとして使えるようにします。
<DataObject()>
Public NotInheritable ClassVolume
InheritsDomainObject
#Region" プライベートフィールド "
Private _keywords() As String
#End Region
#Region" フレンドコンストラクタ "
'DirectoryEntry を指定して Volume クラスの新しいインスタンスを初期化します。
Friend Sub New(entry AsDirectoryEntry)
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 NewObjectDisposedException(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 NewObjectDisposedException(Me.GetType().Name)
End If
ReturnDirectCast(MyBase.Entry.Properties.Item("uNCName").Value, String)
End Get
Set(value As String)
If MyBase.IsDisposed Then
Throw NewObjectDisposedException(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) AsVolume
Return DirectCast(DirectoryAccess.FindDirectoryObject(name, CategoryType.Volume), Volume)
End Function
'共有フォルダの一覧を取得します。このメソッドはデータバインド用です。
<DataObjectMethod(DataObjectMethodType.Select)>
Public Shared Function GetVolumes() AsIList(OfVolume)
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クラスのメソッドを呼んでますが、これについては別途書きます。