3.2.3 文書の操作
文書の基本的な操作を実行する場合に使用するメソッドと,そのメソッドの発行順序の例を説明します。
ここでは,次の操作について説明します。
これらの操作を実行する前に,まず,文書空間と接続してトランザクションを開始してください。
また,DocumentBrokerサーバがネットワーク上に存在する場合,DocumentBrokerサーバに文書を登録したりDocumentBrokerサーバの文書をクライアントで参照したりする場合にはあらかじめファイル転送サービスを起動しておく必要があります。ファイル転送機能については,マニュアル「DocumentBroker Version 3 システム導入・運用ガイド」を参照してください。
なお,この例では,操作する文書としてCdbrDocumentオブジェクトを使用します。
それぞれの操作に使用するメソッドの詳細については,マニュアル「DocumentBroker Version 3 クラスライブラリ C++ リファレンス 基本機能編」を参照してください。
- <この項の構成>
- (1) 文書の作成
- (2) 文書の参照
- (3) 文書の更新
- (4) 文書の削除
(1) 文書の作成
新しく文書を作成して,データベースに格納する場合に使用するメソッドと,そのメソッドの発行順序について説明します。なお,文書を登録するとき,全文検索インデクスを同時に作成できます。全文検索インデクスの作成については,「4.4.3 全文検索インデクスの作成」を参照してください。
- 準備
- オブジェクトの構成要素になるDMAオブジェクト作成用のクラス識別子を指定した構造体(SDBR_DMAINFO構造体)を作成しておきます。
- CdbrDocumentオブジェクトを作成する場合は,SDBR_DMAINFO構造体に,dmaClass_DocVersionクラスまたはそのサブクラスのクラス識別子を指定します。
- CdbrVersionableDocumentオブジェクトを作成する場合は,SDBR_DMAINFO構造体に,dmaClass_ConfigurationHistoryクラスまたはそのサブクラスの識別子と,dmaClass_DocVersionクラスまたはそのサブクラスの識別子を指定します。
このとき,dmaClass_DocVersionクラスのサブクラスとして,edmClass_VersionTracedDocVersionクラスもしくはそのサブクラス,またはedmClass_VersionTracedComponentDocVersionクラスもしくはそのサブクラスを指定した場合だけ,構成管理コンテナの構成要素として管理できます。構成管理コンテナについては,「3.10 構成管理コンテナを使用した文書の構成管理」を参照してください。
- 文書(CdbrDocumentオブジェクト)を作成します。
CdbrDocument::CreateObjectメソッドをコールします。このとき,登録するファイルやファイルの種類(レンディションタイプ)などを指定します。
文書を作成,登録するコールシーケンスの例を次に示します。
作成した文書をコンテナと関連づける場合については,「3.9 コンテナを使用した文書管理」を参照してください。
なお,このコールシーケンスは,UNIXの場合です。Windowsの場合は,CreateObjectメソッドの引数に指定するファイルパスを,「"file:///c:¥temp¥sample.txt"」のように指定してください。
- 文書を作成,登録するコールシーケンス
- //あらかじめ登録する内容を構造体DMAClassListとして作成しておく
//…
pSession->Begin();
CdbrDocument Doc;
//文書の作成および登録
Doc.CreateObject(pSession,
1, DMAClassList, "file:///tmp/sample.txt",
"MIME::text/plain", &pOIID,
DBR_CREATE_INDEX);
Doc.ReleaseObject();
//処理の確定
pSession->Commit();
- レンディションタイプについての注意事項
- 文書として登録するファイルの種類を表すレンディションタイプは,登録したファイルの拡張子からは設定されません。レンディションタイプは,CdbrDocument::CreateObjectメソッドまたはCdbrVersionableDocument::CreateObjectメソッドの引数として明示的に指定してください。この引数に指定した値がレンディションごとのファイルの種類を表すプロパティとして設定されます。
- 特に,文書を作成する時に同時に全文検索に必要な全文検索インデクスを作成したい場合は,適切なレンディションタイプを設定するようにしてください。文書の登録と同時に全文検索インデクスを作成する場合,特定のレンディションタイプを持つ文書オブジェクト以外からは全文検索インデクスが作成できません。また,登録済みの文書から全文検索インデクスを作成する場合も,特定のレンディションタイプを持つ文書オブジェクト以外からは全文検索インデクスが作成できません。全文検索インデクスが作成できないレンディションタイプの文書オブジェクトに対しては,登録した文書とは別に全文検索用インデクスのデータを作成して,登録した文書と関連づける必要があります。
- 全文検索インデクスを作成できるレンディションタイプおよびその作成方法については,「4.4.3 全文検索インデクスの作成」を参照してください。
- なお,レンディションタイプを表すプロパティはPutPropertyValuesメソッドでは変更できません。登録済みの文書を更新する時に,文書の実体を表すファイルの種類を変更する場合には,必要に応じてUpdateContentAndRenditionTypeメソッドをコールして,レンディションタイプを変更するようにしてください。
(2) 文書の参照
すでにデータベースに登録されている文書を参照する場合に使用するメソッドと,そのメソッドの発行順序について説明します。
- 準備
- オブジェクトの構成要素であるDMAオブジェクトのOIIDを,検索などによってあらかじめ取得しておきます。検索については「4. オブジェクトの検索」を参照してください。
- CdbrDocumentオブジェクトに接続する場合は,構成要素であるDMAオブジェクトの,DocVersionオブジェクトのOIIDを取得しておきます。
- CdbrVersionableDocumentオブジェクトに接続する場合は,構成要素であるDMAオブジェクトの,ConfigurationHistoryオブジェクトのOIIDを取得しておきます。
- 参照する文書に接続します。
CdbrDocument::SetOIIDメソッドまたはCdbrDocument::ConnectObjectメソッドをコールします。
- 文書のコンテントデータを,指定したパス名のファイルに複写します。
クライアント環境のファイルのパス名をfile:プロトコルで指定して,CdbrDocument::GetContentAndLockメソッドまたはCdbrDocument::GetContentメソッドをコールします。
文書を参照する場合の,コールシーケンスの例を次に示します。
なお,このコールシーケンスは,UNIXの場合です。Windowsの場合は,GetContentAndLockメソッドの引数に指定するファイルパスを,「"file:///c:¥temp¥sample.txt"」のように指定してください。
- 文書を参照するコールシーケンス
pSession->Begin();
//…
//検索によって参照する文書のOIIDを取得する
//…
CdbrDocument Doc;
//検索で取得したOIIDをオブジェクトに設定する
Doc.SetOIID(pSession, pOIID);
//readロックを設定してファイルを取得する
Doc.GetContentAndLock("file:///tmp/sample.txt",
DMA_LOCK_READ);
Doc.ReleaseObject();
pSession->Commit();
(3) 文書の更新
すでにデータベースに登録されている文書を編集して更新する場合に使用するメソッドと,そのメソッドの発行順序について説明します。なお,(2)と同様に,あらかじめ接続する文書の構成要素であるDMAオブジェクトのOIIDを取得しておきます。
- 更新する文書に接続します。
CdbrDocument::SetOIIDメソッドまたはCdbrDocument::ConnectObjectメソッドをコールします。ConnectObjectメソッドのロックはwriteロックを設定します。
- 文書のコンテントデータを,指定したパス名のファイルに複写します。
クライアント環境のファイルのパス名をfile:プロトコルで指定して,CdbrDocument::GetContentAndLockメソッドまたはCdbrDocument::GetContentメソッドをコールします。
- ファイルを編集します。
- 編集したファイルで文書を更新します。
CdbrDocument::UpdateContentメソッドまたはCdbrDocument::UpdateContentAndRenditionTypeメソッドをコールします。
なお,UpdateContentメソッドで更新するファイルのパスは,2.のGetContentAndLockメソッドまたはGetContentメソッドで取得したファイルのパスと同じである必要はありません。例えば,UNIXの場合,2.で文書のコンテントデータをfile:///tmp/sample.txtというパス名のファイルに複写したときでも,更新するファイルとしてfile:///tmp/sample2.txtというパス名のファイルを指定してもかまいません。Windowsの場合,2.で文書のコンテントデータをfile:///c:¥temp¥sample.txtというパス名のファイルに複写したときでも,更新するファイルとしてfile:///c:¥temp¥sample2.txtというパス名のファイルを指定してもかまいません。
また,更新時に,GetContentメソッドで取得したファイルとは異なる種類のファイルを登録する場合は,必要に応じてレンディションタイプを変更してください。この場合は,UpdateContentAndRenditionTypeメソッドを使用します。例えば,テキスト形式のファイル(sample.txt)をコンテントデータとして登録していた文書に対して,HTML形式のファイル(sample.html)に置き換えて更新する場合,UpdateContentAndRenditionTypeメソッドの引数にHTML形式を表すMIME名(MIME::text/html)を指定します。これによって,レンディションタイプが変更されます。
なお,更新するファイルとして,取得したファイルと種類が異なるものを指定した場合でも,UpdateContentAndRenditionTypeメソッドでレンディションタイプの変更を指定しなかった場合は,レンディションタイプは変更されません。登録したファイルの拡張子によってレンディションタイプが自動的に変更されることはありません。
文書を更新する場合の,コールシーケンスの例を次に示します。
なお,このコールシーケンスは,UNIXの場合です。Windowsの場合は,GetContentAndLockメソッドおよびUpdateContentメソッドの引数に指定するファイルパスを,「"file:///c:¥temp¥sample.txt"」のように指定してください。
- 文書を更新するコールシーケンス
pSession->Begin();
//…
//検索によって更新する文書のOIIDを取得する
//…
CdbrDocument Doc;
//検索で取得したOIIDをオブジェクトに設定する
Doc.SetOIID(pSession, pOIID);
//writeロックを設定してファイルを取得する
Doc.GetContentAndLock("file:///tmp/sample.txt",
DMA_LOCK_WRITE);
//…
//クライアント環境で取得したファイルの内容の更新する
//…
//文書を更新する
Doc.UpdateContent("file:///tmp/sample.txt",
DBR_CREATE_INDEX);
Doc.ReleaseObject();
pSession->Commit();
(4) 文書の削除
CdbrDocumentオブジェクトおよびCdbrVersionableDocumentオブジェクトを削除する場合,RemoveObjectメソッドを使用します。これによって,CdbrDocumentオブジェクトおよびCdbrVersionableDocumentオブジェクトを構成していたすべてのDMAオブジェクトが削除されます。削除するCdbrDocumentオブジェクトがCdbrVersionableDocumentオブジェクトの1バージョンに当たる場合は,そのバージョンを表すDMAオブジェクトのVersionDescriptionオブジェクトも一緒に削除されます。
また,特定のバージョンに対応するバージョンなし文書であるCdbrDocumentオブジェクトを削除する場合は,バージョン付き文書であるCdbrVersionableDocumentオブジェクトに接続して,CdbrVersionableDocument::DeleteVersionメソッドをコールする方法もあります。この方法については,「3.3.3 バージョン管理機能の操作」を参照してください。.
ここでは,データベースに登録されている文書を削除する場合に使用するメソッドと,そのメソッドの発行順序について説明します。なお,(2)と同様に,あらかじめ接続する文書の構成要素であるDMAオブジェクトのOIIDを取得しておきます。
- 削除する文書に接続します。
CdbrDocument::SetOIIDメソッドまたはCdbrDocument::ConnectObjectメソッドをコールします。ConnectObjectメソッドのロックにはwriteロックを設定します。
- 文書を削除します。
CdbrDocument::RemoveObjectメソッドをコールします。
なお,SetOIIDメソッドによってオブジェクトに接続している場合,RemoveObjectメソッドをコールした時にDocumentBrokerによってwriteロックが設定されます。
文書を削除する場合のコールシーケンスの例を次に示します。
- 文書を削除するコールシーケンス
pSession->Begin();
//…
//検索によって削除する文書のOIIDを取得する
//…
CdbrDocument Doc;
//検索で取得したOIIDをオブジェクトに設定する
Doc.SetOIID(pSession, pOIID);
Doc.RemoveObject();
Doc.ReleaseObject();
pSession->Commit();