3.9.4 コンテナの操作

コンテナを使用した文書管理をする場合に使用するメソッドと,そのメソッドの発行順序について説明します。ここでは,次の操作について説明します。

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

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

<この項の構成>
(1) コンテナの作成
(2) コンテナと文書の関連づけ
(3) コンテナと文書の関連づけの解除
(4) 階層構造をたどったコンテナの取得
(5) コンテナの削除

(1) コンテナの作成

新しくコンテナを作成して,データベースに格納する場合,CdbrReferentialContainer::CreateObjectメソッドを使用します。メソッドの発行順序については,「3.2.3(1) 文書の作成」を参照してください。ここでは,コンテナとしてCdbrReferentialContainerオブジェクトを作成する場合の準備について示します。

準備
オブジェクトの構成要素になるDMAオブジェクト作成用のクラス識別子を指定した構造体(SDBR_DMAINFO構造体)を作成しておきます。
  • CdbrReferentialContainerオブジェクトを作成する場合は,SDBR_DMAINFO構造体に,dmaClass_Containerクラスまたはサブクラスの識別子を指定します。

(2) コンテナと文書の関連づけ

ここでは,コンテナと文書を関連づける場合に使用するメソッドと,そのメソッドの発行順序について説明します。

準備
オブジェクトの構成要素であるDMAオブジェクトのOIIDを,検索などによってあらかじめ取得しておきます。検索については「4. オブジェクトの検索」を参照してください。
  • CdbrReferentialContainerオブジェクトに接続する場合は,構成要素であるDMAオブジェクトのContainerオブジェクトのOIIDを取得しておきます。
  1. 文書を関連づけるコンテナと接続します。
    CdbrReferentialContainer::SetOIIDメソッドまたはCdbrReferentialContainer::ConnectObjectメソッドをコールします。
  2. コンテナとCdbrVersionableDocumentオブジェクトを関連づけます。
    CdbrReferentialContainer::LinkメソッドまたはCdbrReferentialContainer::LinkAndLockメソッドをコールします。このとき,直接型のコンテインメントを設定すると,コンテナは文書に対してフォルダとして機能します。参照型のコンテインメントを設定すると,コンテナは文書に対してインデクスとして機能します。

コンテナに文書を格納するコールシーケンスの例を次に示します。

コンテナに文書を格納するコールシーケンス

pSession->Begin();
//…
//検索によって関連づける文書およびコンテナのOIIDを取得する
//…
CdbrReferentialContainer Container;
//検索で取得したOIIDをオブジェクトに設定する
Container.SetOIID(pSession, pOIID);
//コンテナにwriteロックを設定して,コンテナと文書を
//直接型のコンテインメントで関連づける
Container.LinkAndLock(pVrDoc, DBR_CONTAINMENT_DIRECT,
                     DMA_LOCK_WRITE);
Container.ReleaseObject();
pSession->Commit();

(3) コンテナと文書の関連づけの解除

コンテナと文書の関連づけを解除する場合に使用するメソッドと,そのメソッドの発行順序について説明します。なお,(2)と同様に,あらかじめ接続する文書の構成要素のOIIDを取得しておきます。

  1. 関連づけを解除するコンテナと接続します。
    CdbrReferentialContainer::SetOIIDメソッドまたはCdbrReferentialContainer::ConnectObjectメソッドをコールします。
  2. コンテナが管理している文書の一覧を取得して,取得した文書一覧から関連づけを削除する文書のOIIDを取得します。
  3. コンテナと文書の関連づけを解除します。
    CdbrReferentialContainer::UnlinkメソッドまたはCdbrReferentialContainer::UnlinkAndLockメソッドをコールします。

コンテナと文書の関連づけを解除するコールシーケンスの例を次に示します。

コンテナと文書の関連づけを解除するコールシーケンス

pSession->Begin();
//…
//検索によって関連づけを解除するコンテナのOIIDを取得する
//…
CdbrReferentialContainer Container;
//検索で取得したOIIDをオブジェクトに設定する
Container.SetOIID(pSession, pOIID);
//コンテナが管理している文書の一覧を取得して,
//取得した文書一覧から関連づけを削除する文書のOIIDを取得する
Container.GetContainableListAndLock(&bContinue,
                                 DBR_CONTAINMENT_REFERENTIAL,
                                 0,NULL,10,&pObjList,
                                 DMA_LOCK_READ);
//コンテナにwriteロックを設定して,
//文書との関連づけを解除する
Container.UnlinkAndLock(pVrDoc, DMA_LOCK_WRITE);
Container.ReleaseObject();
pSession->Commit();

(4) 階層構造をたどったコンテナの取得

コンテナは,階層構造を付けて管理できます。ここでは,階層を付けて管理されている特定のコンテナを,階層構造をたどって取得する場合に使用するメソッドと,そのメソッドの発行順序について説明します。この説明では,ユーザ定義プロパティとして定義されているコンテナの名称を基に取得します。

準備
最上位のコンテナのOIIDを,検索などによって取得しておきます。
  1. 階層構造の最上位に位置するコンテナに接続します。
    CdbrReferentialContainer::SetOIIDメソッドまたはCdbrReferentialContainer::ConnectObjectメソッドをコールします。
  2. コンテナのプロパティを取得します。
    CdbrReferentialContainer::GetPropertyValuesメソッドをコールします。
  3. コンテナが包含しているコンテナの一覧を取得します。
    CdbrReferentialContainer::GetContainableListAndLockメソッドまたはCdbrReferentialContainer::GetContainableListメソッドをコールします。
  4. 取得したプロパティから,該当する値のプロパティを持つコンテナを取得します。

階層構造をたどってコンテナを検索するコールシーケンスの例を次に示します。ここでは,直接型のコンテインメントで関連づけられているコンテナを検索します。

階層構造をたどってコンテナを検索するコールシーケンス

pSession->Begin();
CdbrReferentialContainer Container;
//最上位のコンテナのOIIDを設定する
Container.SetOIID(pSession, RootOIID);
//最上位のコンテナのプロパティを取得する
Container.GetPropertyValues(2, PropDef, &pPropList);
//最上位のコンテナと直接型のコンテインメントで関連づけられている
//下位のコンテナの一覧を取得する
Container.GetContainableList(&bContinue,
                            DBR_CONTAINMENT_DIRECT, 2,
                            pPropDef, 10, &pObjList);
//取得したコンテナから検索する値のプロパティを持つコンテナを取得する
//…
Container.ReleaseObject();
pSession->Commit();

(5) コンテナの削除

コンテナの削除には,CdbrReferentialContainer::RemoveObjectメソッドを使用します。これによって,DMAオブジェクトのContainerオブジェクトとDirectContainmentRelationshipオブジェクトおよびReferentialContainmentRelationshipオブジェクトが削除されます。このとき,削除したコンテナが包含していたオブジェクトに当たる文書やコンテナは削除されません。RemoveObjectメソッドの使用方法については,「3.2.3(4)文書の削除」を参照してください。

コンテナを削除するコールシーケンスの例を次に示します。

コンテナを削除するコールシーケンス

pSession->Begin();
//…
//検索によって削除するコンテナのOIIDを取得する
//…
CdbrReferentialContainer Container;
//検索で取得したOIIDをオブジェクトに設定する
Container.SetOIID(pSession, pOIID);
//コンテナを削除する
Container.RemoveObject();
Container.ReleaseObject();
pSession->Commit();