この特集のトップページへ
>
Chapter 5:ビジネスロジック層の構築
5.6.2 共有プロパティの使い方
共有プロパティは,SharedPropertyGroupManagerオブジェクト,SharedPropertyGroupオブジェクト,SharedPropertyオブジェクトという3つのオブジェクトで階層化されて管理される(Fig.5-58)。SharedPropertyGroupManagerは,階層のルートとなるオブジェクトである。この配下にプロパティをグループ化するSharedPropertyGroupオブジェクトが存在し,個々のSharedPropertyGroupオブジェクトの配下に実際に値を保存するSharedPropertyオブジェクトが含まれることになる。
Fig.5-58 共有プロパティの階層構造
1)SharedPropertyGroupManagerオブジェクトの操作
共有プロパティを使うためには,まず,プロパティをグループ化するためのSharedPropertyGroupオブジェクトを作成することから始める。そのためには,SharedPropertyGroupManagerコンポーネントを実体化し,それに備わるCreatePropertyGroupメソッドを呼び出す。
SharedPropertyGroupManagerコンポーネントのプログラムIDは,“MTxSpm.SharedPropertyGroupManager.1”である。よって,次のようにして,SharedPropertyGroupManagerコンポーネントを実体化する。
Dim objSharedPropGroupManager As SharedPropertyGroupManager Set objSharedPropGroupManager = _ CreateObject("MTxSpm.SharedPropertyGroupManager.1")
なお,共有プロパティで使われるSharedPropertyGroupManagerオブジェクト,ShredPropertyGroupオブジェクト,SharedPropertyオブジェクトの型情報は,COM+ Services Type Libraryに含まれている。よって,共有プロパティを利用するときには,このライブラリを参照設定する必要がある。
SharedPropertyGroupManagerオブジェクトには,CreatePropertyGroupメソッド(Table 5-14)とGroupプロパティ(Table 5-15)が備わっている。
Table 5-14 CreatePropertyGroupメソッド
【書式】Function CreatePropertyGroup( name As String, dwIsoMode As Long, dwRelMode As Long, fExists As Boolean ) As SharedPropertyGroup 【用途】SharedPropertyGroupオブジェクトを新規に作成する,または既存のSharedPropertyGroupオブジェクトを実体化する。 【引数】
【戻り値】作成されたSharedPropertyGroupオブジェクト,もしくは既存のSharedPropertyGroupオブジェクトが戻る。 |
Table 5-15 Groupプロパティ
【書式】Property Group(name As String) As SharedPropertyGroup 【用途】既存のSharedPropertyGroupオブジェクトを得る。 【引数】
【戻り値】引数nameで指定した名前のSharedPropertyGroupオブジェクトが戻る。もし引数nameで指定した名前のSharedPropertyGroupオブジェクトが存在しなかったときには,Nothingが戻り,実行時エラーが発生する。 |
新しくSharedPropertyGroupオブジェクトを作るには,SharedPropertyGroupManagerオブジェクトのCreatePropertyGroupメソッドを呼び出す。たとえば,“mysharedgroup”という名前のSharedPropertyGroupオブジェクトを実体化するのであれば,次のようにする。
Dim objSharedPropGroup As SharedPropertyGroup Dim bExists As Boolean Set objSharedPropGroup = _ objSharedPropGroupManager.CreatePropertyGroup( _ "mysharedgroup", _ LockSetGet, _ Standard, _ bExists )
CreatePropertyGroupメソッドは,第1引数で指定された名前のSharedPropertyGroupオブジェクトを作成し,そのオブジェクトを返すものである。もし,第1引数に指定した名前と同じSharedPropertyGroupオブジェクトが存在しているのであれば,その存在しているSharedPropertyGroupオブジェクトを返す。第4引数は,新規に作成されたSharedPropertyGroupオブジェクトが戻されたのか,それとも既存のSharedPropertyGroupオブジェクトが戻されたのかを示すフラグである。もし新規にSharedPropertyGroupオブジェクトが戻されたのであれば第4引数に指定されていた変数にFalseが,既存のSharedPropertyGroupオブジェクトが返されたのであればTrueが,それぞれ格納される。
CreatePropertyGroupメソッドで作成したSharedPropertyGroupオブジェクトは,SharedPropertyGroupManagerオブジェクトのGroupプロパティを使って,いつでも参照することができる。
Set objSharedPropGroup = _ objSharedPropGroupManager.Group("グループ名")
グループ名とは,CreatePropertyGroupメソッドを呼び出したときに第1引数に指定した名前である。
CreatePropertyGroupメソッドやGroupプロパティで取得したSharedPropertyGroupオブジェクトは,メソッドから戻るまでのあいだだけ有効である。よって,取得したSharedPropertyGroupオブジェクトをCOMオブジェクト内の変数などに保存しておき,次にメソッドが呼び出されたときにその変数の内容を参照して利用することはできない。
ここで,CreatePropertyGroupメソッドの第2引数と第3引数について補足説明をしておく。
まず第2引数であるが,これはロックのタイミングをかけるのはいつなのかを決定するもので,LockSetGet定数かLockMethod定数のいずれかを指定する。
- LockSetGet定数
- SharedPropertyGroupオブジェクトに含まれているプロパティ(配下のSharedPropertyオブジェクトの持つ値)を参照したり設定したりしたときに排他的ロックがかかる。
- LockMethod定数
- あるCOMオブジェクトがSharedPropertyGroupオブジェクトを取得した時点でロックがかかり,そのオブジェクトを解放するまで(オブジェクトを参照している変数にNothingが格納されるまで),別のCOMオブジェクトが同じグループ名(CreatePropertyGroupメソッドの第1引数で指定される名前)を持つSharedPropertyGroupオブジェクトを取得することができなくなる。
第3引数は,作成したSharedPropertyGroupオブジェクトを破棄するタイミングを指定するものである。Standard定数を指定すると,すべてのCOMオブジェクトがSharedPropertyGroupオブジェクトを手放したときに自動的に破棄されるが,Process定数を指定すると,SharedPropertyGroupオブジェクトを生成した(つまり,SharedPropertyGroupManagerオブジェクトのCreatePropertyGroupメソッドを呼び出した)プロセスが終了まで破棄されなくなる。もしCOM+アプリケーションの[アクティブ化]のプロパティで[サーバーアプリケーション]が設定されているならば,「プロセスが終了する」ということは「COM+アプリケーションがシャットダウンされる」ということと同じ意味である。
2)SharedPropertyGroupオブジェクトの操作
さて,SharedPropertyGroupManagerオブジェクトのCreatePropertyGroupメソッドで新規のSharedPropertyGroupオブジェクトを生成した場合,もしくはGroupプロパティを使って既存のSharedPropertyGroupオブジェクトを取得した場合,そのSharedPropertyGroupオブジェクトに含まれる個々のプロパティを操作することができる。先に説明したように,共有プロパティで実際に値を保持するのは,SharedPropertyオブジェクトである。よって,新しく値の格納領域を作るには,SharedPropertyGroupオブジェクトの配下にSharedPropertyオブジェクトを生成する。
SharedPropertyGroupオブジェクトの配下には,2種類のSharedPropertyオブジェクトを生成することができる。1つは番号で指定するSharedPropertyオブジェクトであり,もう1つは名前で指定するSharedPropertyオブジェクトである。番号を指定するSharedPropertyオブジェクトを生成するにはSharedPropertyGroupオブジェクトのCreatePropertyByPositionメソッドを,名前で指定するSharedPropertyオブジェクトを生成するには同じくSharedPropertyGroupオブジェクトのCreatePropertyメソッドを,それぞれ利用する(Table 5-16,Table 5-17)。
Table 5-16 CreatePropertyByPosisionメソッド
【書式】Function CreatePropertyByPosition(Index As Long, fExists As Boolean) As SharedProperty 【用途】番号で指定した新しいSharedPropertyオブジェクトを生成する,あるいは既存のSharedPropertyオブジェクトを取得する 【引数】
【戻り値】新規に生成された,あるいは既存のSharedPropertyオブジェクトが戻る。新規にSharedPropertyオブジェクトが生成された場合,そのSharedPropertyオブジェクトが保持する値(Valueプロパティ)は0に初期化される。 |
Table 5-17 CreatePropertyメソッド
【書式】Function CreateProperty(name As String, fExists As Boolean) As SharedProperty 【用途】名前で指定する新しいSharedPropertyオブジェクトを生成する,あるいは既存のSharedPropertyオブジェクトを取得する 【引数】
【戻り値】新規に作成された,あるいは既存のSharedPropertyオブジェクトが戻る。新規にSharedPropertyオブジェクトが生成された場合,そのSharedPropertyオブジェクトが保持する値(Valueプロパティ)は0に初期化される。 |
たとえば,“myProperty”という名前のSharedPropertyオブジェクトを生成するには,次のようにする。
Dim objSharedProp As SharedProperty Set objSharedProp = _ objSharedPropGroup.CreateProperty("myProperty", bExists)
なお,そのSharedPropertyGroupオブジェクトの配下にすでに同じ番号もしくは名前のSharedPropertyオブジェクトが存在するときにCreatePropertyByPositionメソッドやCreatePropertyメソッドを呼び出した場合,新規に作成するのではなく,既存のSharedPropertyGroupオブジェクトを返す。このとき,第2引数で指定した変数にはTrueが格納される。
CreatePropertyByPositionメソッドやCreatePropertyメソッドで作成したSharedPropertyオブジェクトは,SharedPropertyGroupオブジェクトのPropertyByPositionプロパティやPropertyプロパティを使うことで,いつでも参照できる(Table 5-18,Table 5-19)。たとえば,“myProperty”という名前のSharedPropertyオブジェクトを取得するには,次のようにすればよい。
Set objSharedProp = _ objSharedPropGroup.Property("myProperty")
CreatePropertyメソッド,CreatePropertyByPositionメソッド,Propertyプロパティ,PropertyByPositionプロパティで取得したSharedPropertyオブジェクトは,メソッドから戻るまでのあいだだけ有効である。よって,取得したSharedPropertyオブジェクトをCOMオブジェクト内の変数などに保存しておき,次にメソッドが呼び出されたときにその変数の値を参照して利用するようなことはできない。
Table 5-18 PropertyByPositionプロパティ
【書式】Property PropertyByPosition(Index As Long) As SharedProperty 【用途】番号で指定する既存のSharedPropertyオブジェクトを取得する 【引数】
【戻り値】実体化されたSharedPropertyオブジェクトが戻る。引数Indexに指定した番号に関連付けられたSharedPropertyオブジェクトが存在しないときにはNothingが戻り,実行時エラーが発生する。 |
Table 5-19 Propertyプロパティ
【書式】Property Property(name As String) As SharedProperty 【用途】名前で指定する既存のSharedPropertyオブジェクトを取得する 【引数】
【戻り値】実体化されたSharedPropertyオブジェクトが戻る。引数nameに指定した名前に関連付けられたSharedPropertyオブジェクトが存在しないときにはNothingが戻り,実行時エラーが発生する。 |
3)SharedPropertyオブジェクトの操作
SharedPropertyGroupオブジェクトのCreatePropertyメソッド,CreatePropertyByPositionメソッド,Propertyプロパティ,PropertyByPositionプロパティのいずれかのメソッドで取得したSharedPropertyオブジェクトが実際に値を保持できるオブジェクトである。SharedPropertyオブジェクトは,Valueプロパティというただ1つのプロパティのみを保持している。このValueプロパティに値を代入することによって,共有プロパティ内に値を保存する。
objSharedProp.Value = 値
ValueプロパティはVARIANT型である。よって,数値,文字列,オブジェクトなど,任意の値を格納することができる。
Chapter 5-2 11/16 |