3.7.2 File Link連携機能に関する操作

File Link連携機能に関する操作を実行する場合に使用するメソッドと,そのメソッドの発行順序について説明します。ここでは,次の操作について説明します。なお,操作を実行する前に,まず,文書空間と接続してトランザクションを開始してください。

これらの操作は,CdbrDocumentクラスまたはCdbrVersionableDocumentクラスのメソッドを使用して実行します。これ以外の操作については,File Link連携機能を使用しないバージョンなし文書およびバージョン付き文書と同じように操作できます。詳細は,「3.2.3 文書の操作」および「3.3.3 バージョン管理機能の操作」を参照してください。また,それぞれの操作に使用するメソッドの詳細については,マニュアル「DocumentBroker Version 3 クラスライブラリ C++ リファレンス 基本機能編」を参照してください。

<この項の構成>
(1) File Link文書の作成
(2) File Link文書の参照
(3) File Link文書の更新
(4) File Link文書のレンディションの追加

(1) File Link文書の作成

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

準備
オブジェクトの構成要素になるDMAオブジェクト作成用のDMAクラスの識別子を指定したSDBR_DMAINFO構造体(DMAオブジェクト生成用の構造体)を作成しておきます。
  • バージョンなし文書を作成する場合は,SDBR_DMAINFO構造体に,dmaClass_DocVersionクラスまたはそのサブクラスのクラス識別子を指定します。
  • バージョン付き文書を作成する場合は,SDBR_DMAINFO構造体に,dmaClass_ConfigurationHistoryクラスまたはそのサブクラスの識別子と,dmaClass_DocVersionクラスまたはそのサブクラスの識別子を指定します。
File Link連携に必要な情報を指定したSDBR_FILELINK_PATHINFO構造体(File Linkパス情報構造体)を作成しておきます。この構造体には,登録するコンテントのファイルパスまたはディレクトリパス,FAM名,登録するファイルサーバのディレクトリパス,文書を削除した時のファイルサーバ上のコンテントの扱い方,コンテントの名称の生成方法などを指定します。
  1. 文書を作成します。
    バージョンなし文書を作成する場合は,CdbrDocument::CreateObjectメソッドをコールします。バージョン付き文書を作成する場合は,CdbrVersionableDocument::CreateObjectメソッドをコールします。このとき,メソッドの引数にSDBR_FILELINK_PATHINFO構造体(File Linkパス情報構造体)を指定します。

File Link文書を作成するコールシーケンスの例を次に示します。

File Link文書を作成するコールシーケンス

//あらかじめ登録する構造体DMAClassListとして作成しておく
//
//…
pSession->Begin();
CdbrDocument Doc;
SDBR_FILELINK_PATHINFO FileLinkInfo;
//FileLinkInfoにFile Link連携に必要な情報を設定する
//…
//File Link文書の作成および登録
Doc.CreateObject(pSession,
                1, DMAClassList, FileLinkInfo,
                "MIME::image/bmp", &pOIID);
Doc.ReleaseObject();
//処理の確定
pSession->Commit();

レンディションタイプについての注意事項
文書として登録するファイルの種類を表すレンディションタイプは,登録したファイルの拡張子からは設定されません。レンディションタイプは,CdbrDocument::CreateObjectメソッドまたはCdbrVersionableDocument::CreateObjectメソッドの引数として明示的に指定してください。この引数に指定した値がレンディションごとのファイルの種類を表すプロパティとして設定されます。

(2) File Link文書の参照

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

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

File Link文書を参照する場合の,コールシーケンスの例を次に示します。

File Link文書を参照するコールシーケンス

pSession->Begin();
//…
//検索によって参照するFile Link文書のOIIDを取得する
//…
CdbrDocument Doc;
SDBR_FILELINK_PATHINFO FileLinkPath;
//検索で取得したOIIDをオブジェクトに設定する
FileLinkPath.pFilePath="file:///tmp/temp.bmp"
Doc.SetOIID(pSession, pOIID);
//readロックを設定して,File Link文書のパス情報を取得する
//FileLinkPathのメンバpFileNameに指定したファイル
//またはディレクトリ下(この場合はファイル)に,
//取得したコンテントの内容が出力される
Doc.GetContentAndLock(FileLinkPath, NULL,
                     NULL, DMA_LOCK_READ);
Doc.ReleaseObject();
//処理の確定
pSession->Commit();

(3) File Link文書の更新

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

SDBR_FILELINK_PATHINFO構造体に設定する値については「(1) File Link文書の作成」を参照してください。

  1. 更新する文書に接続します。
    接続するオブジェクトに応じて,CdbrDocumentクラスまたはCdbrVersionableDocumentクラスの,SetOIIDメソッドまたはConnectObjectメソッドをコールします。
  2. 文書のコンテントデータを,指定したパス名のファイルに複写します。
    取得した情報を格納するSDBR_FILELINK_PATHINFO構造体を指定して,CdbrDocument::GetContentAndLockメソッドまたはCdbrVersionableDocument::GetContentAndLockメソッドをコールします。
    なお,コンテントのリンク情報としてディレクトリパスが登録されている場合(SDBR_FILELINK_PATHINFO構造体のメンバpFilePathにディレクトリパスを指定してCreateObjectメソッドをコールした文書を参照する場合)は,メンバpFileNameに指定した名前のディレクトリが作成され,そのディレクトリ下に登録したディレクトリおよびサブディレクトリ下のすべてのファイルが取得されます。
  3. ファイルを編集します。
  4. 編集したファイルで文書を更新します。
    登録するファイルの情報をSDBR_FILELINK_PATHINFO構造体(File Linkパス情報構造体)で指定して,CdbrDocument::UpdateContentメソッドまたはCdbrVersionableDocument::UpdateContentメソッドをコールします。

File Link文書を更新する場合の,コールシーケンスの例を次に示します。

File Link文書を更新するコールシーケンス

pSession->Begin();
//…
//検索によって更新するFile Link文書のOIIDを取得する
//…
CdbrDocument Doc;
SDBR_FILELINK_PATHINFO FileLinkPath;
//検索で取得したOIIDをオブジェクトに設定する
Doc.SetOIID(pSession, pOIID);
//writeロックを設定して,File Link文書のパス情報を取得する
//取得したコンテントの内容の更新する
//…
//File Link文書を更新する
Doc.UpdateContent(FileLinkPath, NULL);
Doc.ReleaseObject();
//処理の確定
pSession->Commit();

(4) File Link文書のレンディションの追加

File Link文書のレンディションを追加するには,CdbrDocumentクラスおよびCdbrVersionableDocumentクラスのAddRenditionメソッドを使用します。CreateObjectメソッドと同様に,追加するレンディションのファイルまたはディレクトリ情報をSDBR_FILELINK_PATHINFO構造体に指定します。

すでにデータベースに登録されている文書に対して,File Link連携機能を使用するレンディションを追加する場合に使用するメソッドと,そのメソッドの発行順序について説明します。なお,(2)と同様に,あらかじめ接続する文書の構成要素であるDMAオブジェクトのOIIDを取得しておきます。

  1. レンディションを追加する文書に接続します。
    接続するオブジェクトに応じて,CdbrDocumentクラスまたはCdbrVersionableDocumentクラスの,SetOIIDメソッドまたはConnectObjectメソッドをコールします。
  2. レンディションを追加します。
    AddRenditionメソッドをコールします。このとき,サブレンディションに登録するコンテントの情報として,SDBR_FILELINK_PATHINFO構造体を指定します。

File Link連携機能を使用するレンディションを追加するコールシーケンスの例を次に示します。

File Link連携機能を使用するレンディションを追加するコールシーケンス

pSession->Begin();
//…
//レンディションを追加する文書のOIIDを取得する
//レンディションに設定するdbrProp_RetrievalNameプロパティの値を
//構造体PropListに登録する
//…
CdbrDocument Doc;
SDBR_FILELINK_PATHINFO FileLinkInfo;
//FileLinkInfoにFile Link連携に必要な情報を設定する
//…
//レンディションを追加する文書に接続する
Doc.SetOIID(pSession,pOIID);
//レンディションを追加して,プロパティを設定する
Doc.AddRendition(FileLinkInfo,
                "MIME::image/bmp",&PropList);
Doc.ReleaseObject();
//処理の確定
pSession->Commit();