3.5.2 マルチファイル管理に関する操作

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

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

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

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

<この項の構成>
(1) マルチファイル文書の作成
(2) マルチファイル文書の参照
(3) マルチファイル文書の更新

(1) マルチファイル文書の作成

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

準備
オブジェクトの構成要素になるDMAオブジェクト作成用のDMAクラスの識別子を指定したSDBR_DMAINFO構造体(DMAオブジェクト生成用の構造体)を作成しておきます。
  • バージョンなし文書を作成する場合は,SDBR_DMAINFO構造体に,dmaClass_DocVersionクラスまたはそのサブクラスのクラス識別子を指定します。
  • バージョン付き文書を作成する場合は,SDBR_DMAINFO構造体に,dmaClass_ConfigurationHistoryクラスまたはそのサブクラスの識別子と,dmaClass_DocVersionクラスまたはそのサブクラスの識別子を指定します。
また,登録するファイル数およびファイルパスの情報を持つSDBR_PATHLIST構造体(ファイルパス情報リスト構造体)を作成しておきます。
  1. 文書を作成します。
    バージョンなし文書を作成する場合は,CdbrDocument::CreateObjectメソッドをコールします。バージョン付き文書を作成する場合は,CdbrVersionableDocument::CreateObjectメソッドをコールします。このとき,メソッドの引数にSDBR_PATHLIST構造体(ファイルパス情報リスト構造体),レンディションタイプなどを指定します。
    文書作成時に登録したレンディションがマスタレンディションとなります。
    作成した文書をコンテナと関連づける場合については,「3.9 コンテナを使用した文書管理」を参照してください。
レンディションタイプについての注意事項
文書として登録するファイルの種類を表すレンディションタイプは,登録したファイルの拡張子からは設定されません。レンディションタイプは,CdbrDocument::CreateObjectメソッドまたはCdbrVersionableDocument::CreateObjectメソッドの引数として明示的に指定してください。この引数に指定した値がレンディションごとのファイルの種類を表すプロパティとして設定されます。
なお,マルチファイル文書では,レンディションタイプは変更できません。

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

マルチファイル文書を作成するコールシーケンス
//あらかじめ登録する内容を構造体DMAClassListとして作成しておく

//…
pSession->Begin();
CdbrDocument Doc;
SDBR_PATHLIST PathList;
//マルチファイル文書の作成および登録
Doc.CreateObject(pSession,
                1, DMAClassList, PathList,
                "MIME::application/x-edm-undefined", &pOIID);
Doc.ReleaseObject();
//処理の確定
pSession->Commit();

(2) マルチファイル文書の参照

すでにデータベースに登録されている文書とコンテントとして登録されているファイルを参照する場合に使用するメソッドと,そのメソッドの発行順序について説明します。マルチファイル管理を使用して登録した文書は,コンテントを一括して取得できます。

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

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

なお,このコールシーケンスは,UNIXの場合です。Windowsの場合は,GetContentAndLockメソッドの引数に指定するファイルパスを,「"file:///c:¥temp"」のように指定してください。

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

pSession->Begin();
//…
//検索によって参照するマルチファイル文書のOIIDを取得する
//…
CdbrDocument Doc;
SDBR_CONTENTLIST* pContentList=NULL;
//検索で取得したOIIDをオブジェクトに設定する
Doc.SetOIID(pSession, pOIID);
//readロックを設定して,マルチファイル文書の複数コンテントの情報を取得する
Doc.GetContentInfo(NULL, &pContentList,
                  DMA_LOCK_READ);
//readロックを設定して,マルチファイル文書の複数コンテントを取得する
Doc.GetContentAndLock("file:///tmp",
                     *pContentList, NULL,
                     DMA_LOCK_READ);
Doc.ReleaseObject();
dbrDelete(pContentList);
//処理の確定
pSession->Commit();

(3) マルチファイル文書の更新

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

  1. 更新するコンテントが含まれる文書に接続します。
    接続するオブジェクトに応じて,CdbrDocumentクラスまたはCdbrVersionableDocumentクラスの,SetOIIDメソッドまたはConnectObjectメソッドをコールします。
  2. 更新するコンテントの情報を取得します。
    CdbrDocument::GetContentInfoメソッドまたはCdbrVersionableDocument::GetContentInfoメソッドをコールします。
  3. 文書のコンテントデータを,指定したパス名のファイルに複写します。
    取得するファイルの複写先のパス名を指定して,CdbrDocument::GetContentAndLockメソッドまたはCdbrVersionableDocument::GetContentAndLockメソッドをコールします。このとき,dbrDocument::GetContentInfoメソッドまたはCdbrVersionableDocument::GetContentInfoメソッドで取得したSDBR_CONTENTLIST構造体(コンテント情報リスト構造体)を指定します。
  4. ファイルを編集します。
  5. 編集したファイルで文書を更新します。
    登録するファイルの情報をSDBR_PATHLIST構造体(ファイルパス情報リスト構造体)で指定して,CdbrDocument::UpdateContentメソッドまたはCdbrVersionableDocument::UpdateContentメソッドをコールします。

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

なお,このコールシーケンスは,UNIXの場合です。Windowsの場合は,GetContentAndLockメソッドおよびUpdateContentメソッドの引数に指定するファイルパスを,「"file:///c:¥temp"」のように指定してください。

マルチファイル文書を更新するコールシーケンス

pSession->Begin();
//…
//検索によって更新するマルチファイル文書のOIIDを取得する
//…
CdbrDocument Doc;
SDBR_CONTENTLIST* pContentList=NULL;
//検索で取得したOIIDをオブジェクトに設定する
Doc.SetOIID(pSession, pOIID);
//writeロックを設定して,マルチファイル文書の複数コンテントの情報を取得する
Doc.GetContentInfo(NULL, &pContentList,
                  DMA_LOCK_WRITE);
//writeロックを設定して,マルチファイル文書の複数コンテントを取得する
Doc.GetContentAndLock("file:///tmp",
                     *pContentList, NULL,
                     DMA_LOCK_WRITE);
//…
//取得したコンテントの内容の更新する
//…
//マルチファイル文書を更新する
Doc.UpdateContent(&PathList,
                  "MIME::application/x-edm-undefined");
Doc.ReleaseObject();
//処理の確定
pSession->Commit();