3.8.4 文書間リレーションに関する操作

文書間リレーションに関する操作を実行する場合に使用するメソッドと,そのメソッドの発行順序について説明します。ここでは,次の操作について説明します。

これらの操作を実行する前に,まず,文書空間と接続してトランザクションを開始してください。

それぞれの操作に使用するメソッドの詳細については,マニュアル「DocumentBroker Version 3 クラスライブラリ C++ リファレンス 基本機能編」を参照してください。

<この項の構成>
(1) 文書間リレーションの設定
(2) 文書のリレーション情報の一覧取得
(3) リレーション先文書およびリレーション元文書の参照
(4) リレーションに対するプロパティの設定
(5) リレーションの削除

(1) 文書間リレーションの設定

文書間リレーションは,リレーション元文書に接続した状態で設定します。

準備
リレーション元オブジェクトおよびリレーション先オブジェクトの構成要素であるDMAオブジェクトのOIIDを,検索などによってあらかじめ取得します。
  • CdbrDocumentオブジェクトに文書間リレーションを設定する場合は,DMAオブジェクトのDocVersionオブジェクトのOIIDを取得します。
  • CdbrVersionableDocumentオブジェクトに文書間リレーションを設定する場合は,DMAオブジェクトのConfigurationHistoryオブジェクトのOIIDを取得します。
  1. リレーション元文書にする文書に接続します。
    接続するオブジェクトに応じて,次のどちらかのクラスのSetOIIDメソッドまたはConnectObjectメソッドをコールします。
    • CdbrDocumentクラス
    • CdbrVersionableDocumentクラス
  2. リレーション先文書を指定して,文書間リレーションを設定します。
    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を,検索などによってあらかじめ取得します。
  1. リレーション元文書からリレーション情報の一覧を取得する場合は,リレーション元文書にする文書に接続します。
    リレーション先文書からリレーション情報の一覧を取得する場合は,リレーション先文書に接続します。
    接続するオブジェクトに応じて,次のどちらかのクラスのSetOIIDメソッドまたはConnectObjectメソッドをコールします。
    • CdbrDocumentクラス
    • CdbrVersionableDocumentクラス
  2. リレーション情報の一覧を取得します。
    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構造体に設定します。ただし,ここで設定できるプロパティは,ユーザ定義プロパティだけです。
  1. リレーション元文書に接続します。
    接続するオブジェクトに応じて,次のどちらかのクラスのSetOIIDメソッドまたはConnectObjectメソッドをコールします。
    • CdbrDocumentクラス
    • CdbrVersionableDocumentクラス
  2. リレーションにプロパティを設定します。
    PutRelationPropertyValuesメソッドをコールします。

リレーションにプロパティを設定するコールシーケンスの例を次に示します。

リレーションにプロパティを設定するコールシーケンス

pSession->Begin();
//…
//リレーション元文書のOIIDとリレーション識別子を取得する
//…
//リレーションに設定するプロパティの値を設定した
//プロパティ構造体を作成しておく
//…
CdbrDocument Doc;
//リレーション元文書に接続する
Doc.SetOIID(pSession,pOIID);
//リレーションにプロパティを設定する
Doc.PutRelationPropertyValues(pRelId, PropList);
Doc.ReleaseObject();
//処理の確定
pSession->Commit();

(5) リレーションの削除

ここでは,文書間リレーションを削除する操作について説明します。文書間リレーションは,次のように削除できます。

リレーションを削除する場合は,リレーション元文書に接続した状態から削除します。

準備
  • リレーション元文書のOIIDを,検索などによってあらかじめ取得します。
  • 特定のリレーションを削除する場合は,リレーション識別子を取得します。リレーション識別子は,CreateRelationメソッド,GetRelationListAndLockメソッドまたはGetRelationListメソッドのどれかで取得します。
  1. リレーション元文書に接続します。
    接続するオブジェクトに応じて,次のどれかのクラスのSetOIIDメソッドまたはConnectObjectメソッドをコールします。
  2. リレーションを削除します。
    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();