2.6.6 プロパティの操作

ここでは,プロパティの操作について説明します。

<この項の構成>
(1) プロパティの操作で使用する構造体
(2) プロパティの初期値の設定
(3) プロパティの更新
(4) プロパティの取得

(1) プロパティの操作で使用する構造体

プロパティの操作には,プロパティ構造体(SDBR_PROP構造体)およびプロパティリスト構造体(SDBR_PROPLIST構造体)を使用します。

プロパティ構造体のメンバは,プロパティ識別子,プロパティのデータ型,基本単位,基本単位ごとに決まった要素数,および設定するプロパティの値です。複数のプロパティの値を設定する場合は,プロパティ構造体を配列で作成します。プロパティリスト構造体には,プロパティ構造体の数を指定します。

プロパティに値を設定する場合は,まずプロパティ構造体およびプロパティリスト構造体に値を設定して,その構造体を引数に指定してメソッドをコールします。また,プロパティの値を取得する場合は,これらの構造体を出力の引数に指定してメソッドをコールします。

次に,プロパティの値を設定する場合の,プロパティ構造体およびプロパティリスト構造体の指定例を示します。ここでは,ユーザ定義プロパティusrProp_Numberに25を設定するためのプロパティ構造体およびプロパティリスト構造体を作成します。

プロパティ構造体およびプロパティリスト構造体の指定例

SDBR_PROP Props;
SDBR_PROPLIST Proplist;
DmaInteger32 lNum;

lNum=25L;
Props.PropId=usrProp_Number;
Props.lType=DMA_DATATYPE_INTEGER32;
Props.lCardinality=DMA_CARDINALITY_SINGLE;
Props.lCount=1;
Props.uniValue.plInteger32=&lNum;
Proplist.lCount=1;
Proplist.pItem=&Props;

(2) プロパティの初期値の設定

プロパティの初期値は,CreateObjectメソッドによってオブジェクトを作成するときに設定されます。このときに設定されるプロパティには,ユーザが作成時に明示的に値を指定するプロパティと,システムによって値が設定されるプロパティがあります。

ユーザが初期値を設定する場合,CreateObjectメソッドの引数に指定するSDBR_DMAINFO構造体のメンバとして,プロパティリスト構造体のアドレスを指定します。

(3) プロパティの更新

ここでは,プロパティの更新について説明します。

(a) PutPropertyValuesメソッドによる更新

プロパティの値は,CdbrDMAクラスで定義されているPutPropertyValuesメソッドをコールして更新します。更新するプロパティの情報を設定したプロパティ構造体とプロパティリスト構造体を,メソッドの引数に指定します。

プロパティを更新するコールシーケンスの例を次に示します。

プロパティを更新するコールシーケンス

pSession->Begin();
CdbrDocument ObjDoc;
SDBR_PROP Prop;
SDBR_PROPLIST Proplist;
//Prop,Proplistに値を設定しておく
//…
//ObjDocにOIIDを設定する
ObjDoc.SetOIID(pSession,pOIID);
//プロパティを更新する
ObjDoc.PutPropertyValues(&Proplist);
ObjDoc.ReleaseObject();
pSession->Commit();

なお,次に示すクラスでも,引数が異なるPutPropertyValuesメソッドが提供されています。

(b) PutPropertyValuesメソッド以外のメソッドによるプロパティの更新

次のプロパティを更新する場合には,PutPropertyValuesメソッド以外のメソッドを使用します。

レンディション,リレーションおよびコンテインメントについては,「3. クラスライブラリで実現する文書管理」を参照してください。また,それぞれのメソッドの詳細については,マニュアル「DocumentBroker Version 3 クラスライブラリ C++ リファレンス 基本機能編」を参照してください。

(4) プロパティの取得

ここではプロパティの取得について説明します。

(a) GetPropertyValuesAndLockメソッドおよびGetPropertyValuesメソッドによるプロパティの取得

オブジェクトのプロパティに設定されている値を取得するには,CdbrDMAクラスで定義されているGetPropertyValuesAndLockメソッドまたはGetPropertyValuesメソッドをコールします。GetPropertyValuesAndLockメソッドをコールすると,プロパティの取得と同時に処理に必要なロックを設定できます。

これらのメソッドの引数には,プロパティ定義情報構造体(SDBR_PROPDEF構造体)を指定します。プロパティ定義情報構造体には,値を取得するプロパティのプロパティ識別子を指定します。取得した値は,プロパティ構造体およびプロパティリスト構造体に出力されます。

プロパティを取得するコールシーケンスの例を次に示します。この例では,usrProp_NumberプロパティとusrProp_Authorプロパティの値を取得します。

プロパティを取得するコールシーケンス

CdbrDocument ObjDoc;
pSession->Begin();
SDBR_PROPDEF   PropDef[2];
SDBR_PROPLIST* pPropList = NULL;
SDBR_PROP*     pProp = NULL;
//PropDef構造体にプロパティ識別子を設定する
PropDef[0].PropId = usrProp_Number;
PropDef[1].PropId = usrProp_Author;
//ObjDocにOIIDを設定する
ObjDoc.SetOIID(pSession,pOIID);
//プロパティを取得する
ObjDoc.GetPropertyValuesAndLock(2, PropDef, &pPropList,
                               DMA_LOCK_READ);
ObjDoc.ReleaseObject();
pSession->Commit();

なお,次に示すクラスでも,引数が異なるGetPropertyValuesAndLockメソッドおよびGetPropertyValuesメソッドが提供されています。

(b) GetPropertyValuesメソッド以外のメソッドによるプロパティの取得

GetPropertyValuesAndLockメソッドおよびGetPropertyValuesメソッド以外に,次のメソッドでプロパティを取得することもできます。

また,次のプロパティを取得する場合は,GetPropertyValuesメソッド以外のメソッドを使用します。

レンディション,リレーションおよびコンテインメントについては,「3. クラスライブラリで実現する文書管理」を参照してください。また,それぞれのメソッドの詳細については,マニュアル「DocumentBroker Version 3 クラスライブラリ C++ リファレンス 基本機能編」を参照してください。