この特集のトップページへ
Chapter 5:ビジネスロジック層の構築

head2.gif 5.6.2 共有プロパティの使い方
 共有プロパティは,SharedPropertyGroupManagerオブジェクト,SharedPropertyGroupオブジェクト,SharedPropertyオブジェクトという3つのオブジェクトで階層化されて管理される(Fig.5-58)。SharedPropertyGroupManagerは,階層のルートとなるオブジェクトである。この配下にプロパティをグループ化するSharedPropertyGroupオブジェクトが存在し,個々のSharedPropertyGroupオブジェクトの配下に実際に値を保存するSharedPropertyオブジェクトが含まれることになる。

Fig.5-58 共有プロパティの階層構造
fig5_58.gif

 

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オブジェクトを実体化する。

【引数】

name 作成するSharedPropertyGroupオブジェクトの名前
dwIsoMode どのようにロックするかを決めるフラグ。次のいずれかの定数を指定する
定数 解説
LockSetGet 0 SharedPropertyGroupオブジェクトに含まれるプロパティ(SharedPropertyオブジェクト)の値を参照したり変更したりしようとしたときに,排他ロックをかける
LockMethod 1 あるCOMオブジェクトによってSharedPropertyGroupオブジェクトが取得されたときに,別のCOMオブジェクトが同じ名前のSharedPropertyGroupオブジェクトにアクセスできないようにロックをかける
dwRelMode 作成したSharedPropertyGroupオブジェクトをいつ破棄するかを指定するフラグ。次のいずれかの定数を指定する
定数 解説
Standard 0 すべてのCOMオブジェクトがSharedPropertyGroupオブジェクトの参照を解放したとき,自動的に破棄される
Process 1 SharedPropertyGroupオブジェクトを作成したプロセスが終了するまで,SharedPropertyGroupオブジェクトを保持する
fExists 引数nameに指定した名前と同じSharedPropertyGroupオブジェクトがすでに存在しているかどうかを示すフラグ。このメソッドから戻ったとき,引数nameに指定した名前と同じSharedPropertyGroupオブジェクトがすでに存在していればTrueが,そうでなければFalseが,それぞれ格納される。また,Trueが格納された場合には,SharedPropertyGroupオブジェクトを新規に作成するのではなく,既存のSharedPropertyGroupオブジェクトが返される。そして,dwIsoMode引数とdwRelMode引数に渡した変数には,そのSharedPropertyGroupオブジェクトの作成時に使われた定数の値が格納される

【戻り値】作成されたSharedPropertyGroupオブジェクト,もしくは既存のSharedPropertyGroupオブジェクトが戻る。

Table 5-15 Groupプロパティ

【書式】Property Group(name As String) As SharedPropertyGroup

【用途】既存のSharedPropertyGroupオブジェクトを得る。

【引数】

name 取得したいSharedPropertyGroupオブジェクトの名前(CreatePropertyGroupメソッドの第1引数で指定するものと同じ名前)

【戻り値】引数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-16Table 5-17)。

Table 5-16 CreatePropertyByPosisionメソッド

【書式】Function CreatePropertyByPosition(Index As Long, fExists As Boolean) As SharedProperty

【用途】番号で指定した新しいSharedPropertyオブジェクトを生成する,あるいは既存のSharedPropertyオブジェクトを取得する

【引数】

index 生成するSharedPropertyオブジェクトに関連付けるプロパティの番号
fExists 引数indexに指定された番号のSharedPropertyオブジェクトがすでに存在しているかどうかを示すフラグ。このメソッドから戻ったときに,もしSharedPropertyオブジェクトが存在していればTrueが,そうでなければFalseが,それぞれ格納される

【戻り値】新規に生成された,あるいは既存のSharedPropertyオブジェクトが戻る。新規にSharedPropertyオブジェクトが生成された場合,そのSharedPropertyオブジェクトが保持する値(Valueプロパティ)は0に初期化される。

Table 5-17 CreatePropertyメソッド

【書式】Function CreateProperty(name As String, fExists As Boolean) As SharedProperty

【用途】名前で指定する新しいSharedPropertyオブジェクトを生成する,あるいは既存のSharedPropertyオブジェクトを取得する

【引数】

name 生成するSharedPropertyオブジェクトに関連付ける名前
fExists 引数nameに指定された名前のSharedPropertyオブジェクトがすでに存在しているかどうかを示すフラグ。このメソッドから戻ったときに,もしSharedPropertyオブジェクトが存在していればTrueが,そうでなければFalseが,それぞれ格納される

【戻り値】新規に作成された,あるいは既存の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-18Table 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オブジェクトを取得する

【引数】

Index 取得するSharedPropertyオブジェクトに関連付けられた番号

【戻り値】実体化されたSharedPropertyオブジェクトが戻る。引数Indexに指定した番号に関連付けられたSharedPropertyオブジェクトが存在しないときにはNothingが戻り,実行時エラーが発生する。

Table 5-19 Propertyプロパティ

【書式】Property Property(name As String) As SharedProperty

【用途】名前で指定する既存のSharedPropertyオブジェクトを取得する

【引数】

name 取得するSharedPropertyオブジェクトに関連付けられた名前

【戻り値】実体化されたSharedPropertyオブジェクトが戻る。引数nameに指定した名前に関連付けられたSharedPropertyオブジェクトが存在しないときにはNothingが戻り,実行時エラーが発生する。

 

3)SharedPropertyオブジェクトの操作

 SharedPropertyGroupオブジェクトのCreatePropertyメソッド,CreatePropertyByPositionメソッド,Propertyプロパティ,PropertyByPositionプロパティのいずれかのメソッドで取得したSharedPropertyオブジェクトが実際に値を保持できるオブジェクトである。SharedPropertyオブジェクトは,Valueプロパティというただ1つのプロパティのみを保持している。このValueプロパティに値を代入することによって,共有プロパティ内に値を保存する。

objSharedProp.Value = 

 ValueプロパティはVARIANT型である。よって,数値,文字列,オブジェクトなど,任意の値を格納することができる。

prevpg.gif Chapter 5-2 11/16 nextpg.gif