3.6.2 リファレンスファイル管理に関する操作

リファレンスファイル管理に関する操作を実行する場合に使用するメソッドと,そのメソッドの発行順序について説明します。ここでは,次の操作について説明します。

これらの操作を実行する前に,まず,文書空間と接続してトランザクションを開始してください。また,コンテントロケーションをコンテントの相対パスで管理するために,CdbrSession::SetReferencePathメソッドでコンテント格納先ベースパスを設定しておく必要があります。

ここでは,リファレンスファイル文書の操作について説明します。リファレンスファイルを管理するバージョン付き文書のバージョンの操作については,「3.3.3 バージョン管理機能の操作」を参照してください。

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

<この項の構成>
(1) リファレンスファイル文書の作成
(2) リファレンスファイル文書の参照
(3) リファレンスファイル文書の更新
(4) リファレンスファイル文書の削除

(1) リファレンスファイル文書の作成

リファレンスファイル文書を作成して,DocumentBrokerサーバに格納する場合に使用するメソッドと,その発行順序について説明します。なお,リファレンス文書を登録するとき,登録するコンテントから全文検索インデクスは作成できません。全文検索インデクスを作成する場合は,CdbrDocument::CreateIndexメソッドまたはCdbrVersionableDocument::CreateIndexメソッドを実行して作成してください。

準備
オブジェクトの構成要素になるDMAオブジェクト作成用のDMAクラスの識別子を指定したSDBR_DMAINFO構造体(DMAオブジェクト生成用の構造体)を作成しておきます。
  • バージョンなし文書を作成する場合は,SDBR_DMAINFO構造体に,dmaClass_DocVersionクラスまたはそのサブクラスのクラス識別子を指定します。
  • バージョン付き文書を作成する場合は,SDBR_DMAINFO構造体に,dmaClass_ConfigurationHistoryクラスまたはそのサブクラスのクラス識別子と,dmaClass_DocVersionクラスまたはそのサブクラスのクラス識別子を指定します。
リファレンスファイルに必要な情報を持つSDBR_REFERENCE_PATHINFO構造体(リファレンスパス情報構造体)を作成しておきます。
  1. 文書を作成します。
    バージョンなし文書を作成する場合は,CdbrDocument::CreateObjectメソッドをコールします。バージョン付き文書を作成する場合は,CdbrVersionableDocument::CreateObjectメソッドをコールします。このとき,メソッドの引数にSDBR_REFERENCE_PATHINFO構造体(リファレンスパス情報構造体)を指定します。

リファレンスファイル文書を作成するコールシーケンスの例を次に示します。

リファレンスファイル文書を作成するコールシーケンス

//pTargetContentPathにコンテント格納先ベースパスを設定しておく
//…
pSession->Begin();
pSession->SetReferencePath(pTargetContentPath);
CdbrDocument Doc;
SDBR_REFERENCE_PATHINFO RefInfo;
//RefInfoにリファレンスファイル文書の登録に必要な情報を設定する
//…
//リファレンスファイル文書の作成および登録
Doc.CreateObject(pSession,
                1, DMAClassList, RefInfo,
                "MIME::application/x-edm-undefined", &pOIID);
Doc.ReleaseObject();
//処理の確定
pSession->Commit();

(2) リファレンスファイル文書の参照

すでにデータベースに登録されている文書と任意のディレクトリに登録されているコンテント(ファイル)を参照する場合に使用するメソッドと,そのメソッドの発行順序について説明します。

準備
オブジェクトの構成要素であるDMAオブジェクトのOIIDを,検索などによってあらかじめ取得しておきます。検索については,「4. オブジェクトの検索」を参照してください。
  • バージョンなし文書に接続する場合は,構成要素であるDMAオブジェクトの,DocVersionオブジェクトのOIIDを取得しておきます。
  • バージョン付き文書に接続する場合は,構成要素であるDMAオブジェクトの,ConfigurationHistoryオブジェクトのOIIDを取得しておきます。
取得するリファレンスファイルに必要な情報を持つSDBR_REFERENCE_PATHINFO構造体を作成しておきます。
  1. 参照するコンテントが含まれる文書に接続します。
    接続するオブジェクトに応じて,CdbrDocumentクラスまたはCdbrVersionableDocumentクラスの,SetOIIDメソッドまたはConnectObjectメソッドをコールします。
  2. 文書のコンテントデータを,指定したパス名のファイルに複写します。
    取得するリファレンスファイルに必要な情報を持つSDBR_REFERENCE_PATHINFO構造体を指定して,CdbrDocument::GetContentAndLockメソッドまたはCdbrVersionableDocument::GetContentAndLockメソッドをコールします。

リファレンスファイル文書を参照する場合の,コールシーケンスの例を次に示します。

リファレンスファイル文書を参照するコールシーケンス

//pTargetContentPathにコンテント格納先ベースパスを設定しておく
//…
pSession->Begin();
pSession->SetReferencePath(pTargetContentPath);
//…
//検索によって参照するリファレンスファイル文書のOIIDを取得する
//…
CdbrDocument Doc;
SDBR_REFERENCE_PATHINFO RefInfo;
//RefInfoにリファレンスファイル文書のコンテント取得に必要な情報を設定する
//…
//検索で取得したOIIDをオブジェクトに設定する
Doc.SetOIID(pSession, pOIID);
//readロックを設定して,リファレンスファイル文書のコンテントを取得する
Doc.GetContentAndLock(RefInfo,
                     NULL, &lReferenceType, &pContentLocation,
                     DMA_LOCK_READ);
Doc.ReleaseObject();
dbrDelete(pContentLocation);
//処理の確定
pSession->Commit();

(3) リファレンスファイル文書の更新

すでにデータベースに登録されている文書と任意のディレクトリに登録されている文書のコンテントを編集して更新する場合に使用するメソッドと,そのメソッドの発行順序について説明します。なお,(2)と同様に,あらかじめ接続する文書の構成要素であるDMAオブジェクトのOIIDを取得しておきます。

  1. 更新する文書に接続します。
    接続するオブジェクトに応じて,CdbrDocumentクラスまたはCdbrVersionableDocumentクラスの,SetOIIDメソッドまたはConnectObjectメソッドをコールします。
  2. 文書のコンテントデータを,指定したパス名のファイルに複写します。
    取得するリファレンスファイルに必要な情報を持つSDBR_REFERENCE_PATHINFO構造体を指定して,CdbrDocument::GetContentAndLockメソッドまたはCdbrVersionableDocument::GetContentAndLockメソッドをコールします。
  3. ファイルを編集します。
  4. 編集したファイルで文書を更新します。
    登録するファイルの情報をSDBR_REFERENCE_PATHINFO構造体(リファレンスパス情報構造体)で指定して,CdbrDocument::UpdateContentAndRenditionTypeメソッドまたはCdbrVersionableDocument::UpdateContentAndRenditionTypeメソッドをコールします。

リファレンスファイル文書を更新する場合の,コールシーケンスの例を次に示します。

リファレンス文書を更新するコールシーケンス

//pTargetContentPathにコンテント格納先ベースパスを設定しておく
//…
pSession->Begin();
pSession->SetReferencePath(pTargetContentPath);
//…
//検索によって更新するマルチファイル文書のOIIDを取得する
//…
CdbrDocument Doc;
SDBR_REFERENCE_PATHINFO RefInfo;
//RefInfoにリファレンスファイル文書のコンテント取得に必要な情報を設定する
//…
//検索で取得したOIIDをオブジェクトに設定する
Doc.SetOIID(pSession, pOIID);
//writeロックを設定して,リファレンスファイル文書のコンテントを取得する
Doc.GetContentAndLock(RefInfo,
                     NULL, NULL, NULL,
                     DMA_LOCK_WRITE);
//…
//取得したコンテントの内容の更新する
//…
//RefInfoにリファレンスファイル文書の更新に必要な情報を設定する
//…
//リファレンスファイル文書を更新する
Doc.UpdateContentAndRenditionType(RefInfo,
                  "MIME::application/x-edm-undefined", NULL);
Doc.ReleaseObject();
//処理の確定
pSession->Commit();

(4) リファレンスファイル文書の削除

リファレンスファイル文書を削除するメソッドには,従来のメソッドとリファレンスファイル用のメソッドの2種類あります。ここでは,リファレンスファイル用のメソッドを使用して,リファレンスファイル文書を削除する場合の,コールシーケンスの例を次に示します。なお,(2)と同様に,あらかじめ接続する文書の構成要素であるDMAオブジェクトのOIIDを取得しておきます。

リファレンスファイル文書を削除するコールシーケンス

//pTargetContentPathにコンテント格納先ベースパスを設定しておく
//…
pSession->Begin();
pSession->SetReferencePath(pTargetContentPath);
//…
//検索によって削除する文書のOIIDを取得する
//…
CdbrDocument Doc;
SDBR_REFERENCE_PATHINFO RefInfo;
//RefInfoにリファレンスファイル文書の削除に必要な情報を設定する
//…
//検索で取得したOIIDをオブジェクトに設定する
Doc.SetOIID(pSession, pOIID);
//文書を削除する
Doc.RemoveObject(RefInfo);
Doc.ReleaseObject();
pSession->Commit();