3.8.4 文書間リレーションに関する操作
(1) 文書間リレーションの設定
文書間リレーションは,リレーション元文書に接続した状態で設定します。
- 準備
- リレーション元オブジェクトおよびリレーション先オブジェクトの構成要素であるDMAオブジェクトのOIIDを,検索などによってあらかじめ取得します。
- CdbrDocumentオブジェクトに文書間リレーションを設定する場合は,DMAオブジェクトのDocVersionオブジェクトのOIIDを取得します。
- CdbrVersionableDocumentオブジェクトに文書間リレーションを設定する場合は,DMAオブジェクトのConfigurationHistoryオブジェクトのOIIDを取得します。
- リレーション元文書にする文書に接続します。
接続するオブジェクトに応じて,次のどちらかのクラスのSetOIIDメソッドまたはConnectObjectメソッドをコールします。
- CdbrDocumentクラス
- CdbrVersionableDocumentクラス
- リレーション先文書を指定して,文書間リレーションを設定します。
CreateRelationメソッドをコールします。
文書間リレーションを設定するコールシーケンスの例を次に示します。
- 文書間リレーションを設定するコールシーケンス
pSession->Begin();
//…
//リレーション元文書とリレーション先文書のOIIDを取得する
//…
CdbrDocument Doc1, Doc2;
//リレーション元文書に接続する
Doc1.SetOIID(pSession,pOIID);
//リレーション先文書に接続する
Doc2.SetOIID(pSession,pOIID2);
//文書間リレーションを設定する
Doc1.CreateRelation(&Doc2,NULL,ppRelId);
Doc1.ReleaseObject();
Doc2.ReleaseObject();
//処理の確定
pSession->Commit();
(2) 文書のリレーション情報の一覧取得
ここでは,文書のリレーション情報の一覧を取得する操作として,次の二つの操作について説明します。
- リレーション元文書からリレーション情報の一覧を取得する
リレーション先文書とリレーションについての情報が取得できます。このとき,すでにリレーション先文書が削除されたリレーションについての情報も取得できます。
- リレーション先文書からリレーション情報の一覧を取得する
リレーション元文書とリレーションについての情報が取得できます。
それぞれ,リレーション元文書またはリレーション先文書に接続した状態から参照します。
- 準備
- リレーション元文書からリレーション情報の一覧を取得する場合は,リレーション元文書のDMAオブジェクトのOIIDを,検索などによってあらかじめ取得します。
- リレーション先文書からリレーション情報の一覧を取得する場合は,リレーション先文書のDMAオブジェクトのOIIDを,検索などによってあらかじめ取得します。
- リレーション元文書からリレーション情報の一覧を取得する場合は,リレーション元文書にする文書に接続します。
リレーション先文書からリレーション情報の一覧を取得する場合は,リレーション先文書に接続します。
接続するオブジェクトに応じて,次のどちらかのクラスのSetOIIDメソッドまたはConnectObjectメソッドをコールします。
- CdbrDocumentクラス
- CdbrVersionableDocumentクラス
- リレーション情報の一覧を取得します。
GetRelationListAndLockメソッドまたはGetRelationListメソッドをコールします。その文書をリレーション元文書とする情報の一覧を取得するか,その文書をリレーション先文書とする情報の一覧を取得するかは,引数lRelationendStatusに設定します。
- 接続した文書をリレーション元文書とするリレーション情報の一覧を取得する場合は,引数に「DBR_RELATIONEND_HEAD」を指定します。
- 接続した文書をリレーション先文書とするリレーション情報の一覧を取得する場合は,引数に「DBR_RELATIONEND_TAIL」を指定します。
リレーション情報は,リレーション情報構造体として取得できます。リレーション情報構造体では,次の情報が取得できます。
- リレーション先文書またはリレーション元文書のOIID
- リレーション先文書またはリレーション元文書のオブジェクトの種類
- リレーション識別子
- リレーション先文書またはリレーション元文書のプロパティ
- リレーションのプロパティ
リレーション元文書からリレーション先文書の一覧を取得するコールシーケンスの例を次に示します。
- リレーション元文書からリレーション先文書の一覧を取得するコールシーケンス
pSession->Begin();
//…
//リレーション元文書とリレーション先文書のOIIDを取得する
//…
CdbrDocument Doc;
DmaBoolean bContinue = DMA_TRUE;
//リレーション元文書に接続する
Doc.SetOIID(pSession,pOIID);
//リレーション先文書の一覧を取得する
Doc.GetRelationListAndLock(&bContinue, DBR_CLASS_ALL, 0,
NULL, 0, NULL, 10,
ppRelationList,
DBR_RELATIONEND_HEAD,
DBR_RELATIONEND_STATUS_ALL,
DMA_LOCK_READ);
Doc.ReleaseObject();
//処理の確定
pSession->Commit();
(3) リレーション先文書およびリレーション元文書の参照
リレーション先文書およびリレーション元文書を参照する場合は,「(2)文書のリレーション情報の一覧取得」で取得したリレーション情報構造体に設定されたOIIDを基に,リレーション先文書またはリレーション元文書に接続して,参照してください。
(4) リレーションに対するプロパティの設定
ここでは,リレーションにプロパティを設定する操作について説明します。
- 準備
- リレーション元文書のDMAオブジェクトのOIIDを,検索などによって取得します。
- リレーションに設定するプロパティを,SDBR_PROP構造体およびSDBR_PROPLIST構造体に設定します。ただし,ここで設定できるプロパティは,ユーザ定義プロパティだけです。
- リレーション元文書に接続します。
接続するオブジェクトに応じて,次のどちらかのクラスのSetOIIDメソッドまたはConnectObjectメソッドをコールします。
- CdbrDocumentクラス
- CdbrVersionableDocumentクラス
- リレーションにプロパティを設定します。
PutRelationPropertyValuesメソッドをコールします。
リレーションにプロパティを設定するコールシーケンスの例を次に示します。
- リレーションにプロパティを設定するコールシーケンス
pSession->Begin();
//…
//リレーション元文書のOIIDとリレーション識別子を取得する
//…
//リレーションに設定するプロパティの値を設定した
//プロパティ構造体を作成しておく
//…
CdbrDocument Doc;
//リレーション元文書に接続する
Doc.SetOIID(pSession,pOIID);
//リレーションにプロパティを設定する
Doc.PutRelationPropertyValues(pRelId, PropList);
Doc.ReleaseObject();
//処理の確定
pSession->Commit();
(5) リレーションの削除
ここでは,文書間リレーションを削除する操作について説明します。文書間リレーションは,次のように削除できます。
- リレーション識別子を指定して,特定のリレーションだけ削除する
- 接続した文書をリレーション元文書とする,すべてのリレーションを削除する
- リレーション先文書が削除されているリレーションをすべて削除する
リレーションを削除する場合は,リレーション元文書に接続した状態から削除します。
- 準備
- リレーション元文書のOIIDを,検索などによってあらかじめ取得します。
- 特定のリレーションを削除する場合は,リレーション識別子を取得します。リレーション識別子は,CreateRelationメソッド,GetRelationListAndLockメソッドまたはGetRelationListメソッドのどれかで取得します。
- リレーション元文書に接続します。
接続するオブジェクトに応じて,次のどれかのクラスのSetOIIDメソッドまたはConnectObjectメソッドをコールします。
- リレーションを削除します。
RemoveRelationメソッドをコールします。どのリレーションを削除するかは,引数lRelIdCountとppRelIdsに設定します。
- 特定のリレーションを削除する場合は,lRelIdCountに削除するリレーションの数を,ppRelIdsに削除するリレーションのリレーション識別子のポインタを指定します。
- 接続した文書をリレーション元文書とするすべてのリレーションを削除する場合は,lRelIdCountにDBR_RELATION_ALLを,ppRelIdsにNULLを指定します。
- リレーション先文書が削除されているリレーションをすべて削除する場合は,lRelIdCountにDBR_RELATION_END_NOT_EXISTを,ppRelIdsにNULLを指定します。
リレーションを削除するコールシーケンスの例を示します。
- リレーションを削除するコールシーケンス
pSession->Begin();
//…
//リレーション元文書のOIIDとリレーション識別子を取得する
//…
CdbrDocument Doc;
//リレーション元文書に接続する
Doc.SetOIID(pSession,pOIID);
//リレーション先文書の一覧を取得する
Doc.RemoveRelation(1, ppRelIds);
Doc.ReleaseObject();
//処理の確定
pSession->Commit();