CdbrDocument::GetContentAndLockメソッド

機能

ファイルの取得と同時に指定したロックの設定

形式

// シングルファイル文書の場合
// (マスタレンディションのファイルの取得)
DmaBoolean GetContentAndLock(
 const pDmaString_T       pFilePath,
 DmaInteger32             lLockType = DMA_LOCK_WRITE)
 
// シングルファイル文書の場合
// (RenditionTypeを指定したファイルの取得)
DmaBoolean GetContentAndLock(
 const pDmaString_T       pFilePath,
 pDmaString_T             pRenditionType,
 DmaInteger32             lLockType = DMA_LOCK_WRITE)
 
// マルチファイル文書の場合
DmaBoolean GetContentAndLock(
 pDmaString_T          pDirPath,
 SDBR_CONTENTLIST&     ContentList,
 pDmaString_T          pRenditionType,
 DmaInteger32          lLockType = DMA_LOCK_WRITE)
 
// リファレンスファイル文書の場合
DmaBoolean GetContentAndLock(
 SDBR_REFERENCE_PATHINFO&  ReferencePath,
 pDmaString_T              pRenditionType,
 pDmaInteger32             plReferenceType,
 ppDmaString_T             ppContentLocation,
 DmaInteger32              lLockType=DMA_LOCK_WRITE)
 
// File Link文書の場合
DmaBoolean GetContentAndLock(
 SDBR_FILELINK_PATHINFO&  FileLinkPath,
 pDmaString_T             pRenditionType,
 DmaBinaryValue**         ppbvFileHandle,
 DmaInteger32             lLockType = DMA_LOCK_WRITE)
 
// コンテント情報構造体
struct SDBR_CONTENTINFO {
 pDmaString_T    pComponentType;   // ファイルを識別する文字列
 pDmaString_T    pRetrievalName;   // ファイル名
 DmaUInteger32   lContentSize;     // ファイルのサイズ
};
 
// コンテント情報リスト構造体
struct SDBR_CONTENTLIST {
 DmaInteger32       lCount;           // 取得ファイル数
 SDBR_CONTENTINFO*  pItem;            // コンテント情報構造体の
                                      // ポインタ
 DmaInteger32       lValidMode;       // 有効モード
 DmaBoolean         bIsMultiContents; // マルチファイル識別
};
 
// リファレンスパス情報構造体
struct SDBR_REFERENCE_PATHINFO {
 DmaInteger32  lContentOperateMode;    // 操作モード
 pDmaString_T  pEntry;                 // ファイルのパスおよびロケーション
 pDmaString_T  pTargetPath;            // コンテント格納先パス
 pDmaString_T  pDeleteRootPath;        // 削除ディレクトリのルートパス
};
 
// File Linkパス情報構造体
struct SDBR_FILELINK_PATHINFO {
 pDmaString_T pFilePath;   // 取得先のファイルまたはディレクトリのURL
 pDmaString_T  pFamName;
 pDmaString_T  pFamFilePath;
 DmaInteger32  lContentDeleteMode;
 DmaInteger32  lFileNamingMode;
};

詳細

ロックタイプを明示的に指定して,文書空間に登録されているファイルを,指定したパスに複写するメソッドです。マルチレンディション文書の場合,pRenditionTypeを指定すると,対応するRenditionTypeを持つレンディションのファイルが取得できます。

Windowsの場合,次のことに注意してください。

シングルファイル文書の場合
取得したコンテントが,引数pFilePathに指定したファイルに複写されます。マルチレンディション文書のサブレンディションのコンテントを取得する場合は,引数pRenditionTypeで対象のレンディションを指定します。
UNIXの場合に,登録されているファイルを/tmp/sample.docに複写して取得する例を次に示します。Windowsの場合は,c:¥temp¥sample.docに複写して取得する例として,例中の"file:///tmp/sample.doc"を"file:///c:¥temp¥sample.doc"と読み替えてください。なお,この例で取得できるのは,マスタレンディションのコンテントです。
ファイルを取得する例

pDbrVerDoc->GetContentAndLock("file:///tmp/sample.doc",
                              DMA_LOCK_READ);

マルチファイル文書の場合
引数ContentListで指定した複数のファイルをコンテントとして取得します。取得したコンテントは,引数pDirPathで指定したディレクトリに出力されます。ファイル名は,SDBR_CONTENTINFO構造体に設定しているpRetrievalNameの値になります。
マルチファイル文書の場合,次のことに注意してください。
  • GetContentInfoメソッドで取得したSDBR_CONTENTLIST構造体を使用して,このメソッドを実行する場合,lValidModeは変更しないでください。
  • この形式のGetContentメソッドを,マルチファイル文書ではないバージョンなし文書に対して実行すると,ERR_NOT_MULTI_CONTENTSのエラーになります。
リファレンスファイル文書の場合
取得したコンテントが,引数ReferencePathのSDBR_REFERENCE_PATHINFO構造体のメンバpEntryに指定したファイルに出力されます。
リファレンスファイル文書の場合,次のことに注意してください。
  • このメソッドは,レンディションのコンテント種別がContentReferenceオブジェクトの場合(dbrProp_ContentTypeプロパティの値がDBR_CONTENTTYPE_REFERENCEの場合)にだけ有効となります。そのほかのコンテント種別を持つレンディションに対して実行すると,ERR_CONTENTTYPE_MISMATCHのエラーになります。
File Link文書の場合
取得したコンテントが,引数FileLinkPathのSDBR_FILELINK_PATHINFO構造体のメンバpFilePathに指定したファイルまたはディレクトリに出力されます。
コンテントとしてディレクトリが登録されている文書のレンディションに対してこのメソッドを実行すると,引数に指定したSDBR_FILELINK_PATHINFO構造体のメンバpFilePathに指定した名前のディレクトリが作成され,その下に登録されているディレクトリおよびサブディレクトリ下のすべてのファイルが取得されます。コンテントとしてディレクトリが登録されている文書のレンディションとは,AddRenditionメソッド,CreateObjectメソッド,UpdateContentメソッドまたはUpdateContentAndRenditionTypeメソッドの引数FileLinkPathに指定したSDBR_FILELINK_PATHINFO構造体のメンバpFilePathに,ディレクトリを指定して登録または更新した文書のレンディションのことです。
File Link文書の場合,次のことに注意してください。
  • このメソッドは,レンディションのコンテント種別がContentFileLinkオブジェクトの場合(dbrProp_ContentTypeプロパティの値がDBR_CONTENTTYPE_FILELINKの場合)にだけ有効となります。そのほかのコンテント種別を持つレンディションに対して実行すると,ERR_CONTENTTYPE_MISMATCHのエラーになります。
  • コンテントとして空のディレクトリが登録されているレンディションに対してこのメソッドを実行すると,ERR_CONTENT_NOT_REGISTEREDのエラーになります。コンテントとして空のディレクトリが登録されているレンディションとは,AddRenditionメソッド,CreateObjectメソッド,UpdateContentメソッドまたはUpdateContentAndRenditionTypeメソッドの引数FileLinkPathに指定したSDBR_FILELINK_PATHINFO構造体のメンバpFilePathに,空のディレクトリを指定して作成した文書のレンディションのことです。
  • 引数に指定するSDBR_FILELINK_PATHINFO構造体のメンバpFilePathで指定したファイル名のファイル,またはディレクトリパスのディレクトリ下に取得しようとするファイルがすでに存在する場合,ERR_FILELINK_FAILEDのエラーになります。
  • このメソッドで,ERR_FILELINK_FAILEDのエラーが発生した場合は,詳細メッセージにHiRDB File Linkが出力するエラー情報が出力されます。HiRDB File Linkが出力するエラーを参照して,対処してください。

引数

pFilePath(入力)

取得したファイルを複写する複写先のパス名を指定します。

ファイルのパス名はURL形式で設定します。ただし,プロトコル名は"file:"だけが指定できます。例えば,UNIXの場合,ファイル"/tmp/sample.doc"に複写するには,"file:///tmp/sample.doc"と指定します。Windowsの場合,ファイル"c:¥temp¥sample.doc"に複写するには,"file:///c:¥temp¥sample.doc"と指定します。

指定したパスのファイルが存在する場合は上書きします。ファイル名は,RenditionTypeプロパティまたはRetrievalNameプロパティを参考にして,メソッドをコールした側が任意に決定してください。

指定したパスのファイルが存在しない場合,ディレクトリが存在し,かつファイルの作成が可能ならば新規にファイルを作成します。それ以外の場合はエラーになります。

pRenditionType(入力)

RenditionTypeを指定してファイルを取得する場合,取得するレンディションのRenditionTypeを表す文字列を指定します。

この引数で指定したRenditionTypeが,対象文書のレンディションとして存在しない場合はエラーになります。

マスタレンディションの場合はNULLを指定するか,「マスタレンディションのファイルを取得する場合」の形式を使用することもできます。なお,空文字列("")は指定できません。

マルチファイル文書の場合,NULLまたは「シングルファイル文書の場合(マスタレンディションのファイルの取得)」の形式を指定してください。

lLockType(入力)

ロックの種別を指定します。次のどちらかの値を設定します。

pDirPath(入力)

出力されるファイルの格納先ディレクトリを,URL形式で指定します。

指定したパスのディレクトリが存在し,かつそのディレクトリへの実行権限,書き込み権限があれば,取得したファイルを格納します。それ以外の場合,エラーになります。

ContentList(入力)

取得するコンテントの情報を設定したコンテント情報リスト構造体を指定します。コンテント情報リスト構造体については,「付録C.1(2) SDBR_CONTENTLIST構造体(コンテント情報リスト構造体)」を参照してください。

ReferencePath(入力)

リファレンスファイル文書を取得するために必要な情報を格納した,SDBR_REFERENCE_PATHINFO構造体を指定します。ContentLocationプロパティとCdbrSession::SetReferencePathメソッドで指定したコンテント格納先ベースパスを合わせた文字列長(パスの区切り文字も含む)が,Windowsの場合は260バイト以上,AIXの場合は1023バイト以上であるとERR_FILE_REFERENCE_OPERATION_FAILEDのエラーになります。

リファレンスファイル文書を取得する場合,SDBR_REFERENCE_PATHINFO構造体のメンバpTargetPathおよびpDeleteRootPathへの値の指定は,無効になります。

SDBR_REFERENCE_PATHINFO構造体に設定する内容については,「付録C.1(15) SDBR_REFERENCE_PATHINFO構造体(リファレンスパス情報構造体)」を参照してください。

plReferenceType(出力)

コンテントのリファレンス種別(ReferenceType)を取得する場合,リファレンス種別を格納する領域のポインタを指定します。NULLを指定した場合,リファレンス種別は返却されません。

ppContentLocation(出力)

コンテントロケーション(ContentLocationプロパティ)を取得する場合,コンテントロケーションへのポインタを格納する領域を指定します。NULLを指定した場合,コンテントロケーションは返却されません。取得した領域は,dbrDelete関数で解放する必要があります。dbrDelete関数の詳細については,「20. 関数」の「dbrDelete関数」を参照してください。

FileLinkPath(出力)

SDBR_FILELINK_PATHINFO構造体のpFilePathメンバだけが有効となります。そのほかのメンバの設定値は無視されます。pFilePathに,コンテントの取得先となるクライアントのファイルパスまたはディレクトリパスを指定してください。

SDBR_FILELINK_PATHINFO構造体の指定内容については,「付録C.1(5) SDBR_FILELINK_PATHINFO構造体(File Linkパス情報構造体)」を参照してください。

ppbvFileHandle(出力)

ppbvFileHandleにファイルハンドル情報が返却されます。この引数にはNULLを指定してください。取得した領域は,dbrDelete関数で解放する必要があります。dbrDelete関数の詳細については,「20. 関数」の「dbrDelete関数」を参照してください。

戻り値

DMA_TRUE  正常終了

DMA_FALSE 異常終了

戻り値の詳細

major_codeminor_code説明対処
ERR_CORBACORBAの戻り値が設定されます。CORBAでエラーが発生しました。ユーザプログラムでは対処できません。エラー情報として文字列の値を取得して,ユーザプログラムを終了してください。
ERR_DBERR_DB_DEADLOCK_OCCURREDデータベースでデッドロックが発生しました。時間を置いて,再度実行してください。
ERR_DBERR_DB_FAILEDデータベースで障害が発生しました。syslogを参照して,障害の原因を取り除いてください。
ERR_DBERR_DB_LOCKEDオブジェクトがロックされています。時間を置いて,再度実行してください。
ERR_DBRERR_ACCESS_NOT_PERMITTEDアクセス権がありません。この操作は実行できません。
ERR_DBRERR_COMPONENTTYPE_DUPLICATEDComponentTypeが重複して指定されています。ComponentTypeが重複しないように指定してください。
ERR_DBRERR_CONTENT_NOT_REGISTEREDコンテントが登録されていません。コンテントを登録してください。
ERR_DBRERR_CONTENTTYPE_MISMATCH指定したレンディションタイプのコンテントに対して実行できません。正しい文書オブジェクトを指定してメソッドを実行してください。
ERR_DBRERR_FAL_NOT_LOADEDHiRDB File Linkのライブラリがロードできません。詳細メッセージを基に対処してください。
ERR_DBRERR_FILELINK_FAILEDHiRDB File Linkでエラーが発生しました。詳細メッセージを基に対処してください。
ERR_DBRERR_FILE_REFERENCE_OPERATION_FAILEDリファレンスファイル管理機能で扱うサーバマシンでのコンテントの操作でエラーが発生しました。詳細メッセージを基に対処してください。
ERR_DBRERR_INVALID_STATUSセッションの状態が不正です。一つのセッションに同時に複数のメソッド処理要求が出されています。一つのセッションに対しては,一度に一つの処理要求しか出さないように見直してください。
ERR_DBRERR_NONEXISTS_RENDITION指定されたレンディションは存在しません。正しいRenditionTypeを指定してください。
ERR_DBRERR_NOT_MULTI_CONTENTSマルチファイル文書ではありません。マルチファイル管理機能を使用しない場合の形式で実行してください。
ERR_DBRERR_OBJECT_NOT_CONNECTオブジェクトは接続されていません。オブジェクトを接続してください。
ERR_DBRERR_OBJECT_REMOVEDオブジェクトはすでに削除されています。正しいオブジェクトを指定してください。
ERR_DBRERR_OIID_NOT_SETOIIDが設定されていません。SetOIIDメソッドをコールしてから,このメソッドをコールしてください。
ERR_DBRERR_REFERENCETYPE_MISMATCHオブジェクト種別が一致していません。オブジェクト種別または指定した操作モード(lContentOperateMode)を見直してください。
ERR_DBRERR_RETRIEVALNAME_DUPLICATEDRetrievalNameが重複して指定されています。RetrievalNameが重複しないように指定してください。
ERR_DBRERR_SESSION_NOT_CONNECTセッションが接続されていません。セッションを接続してください。
ERR_DBRERR_TARGETCONTENTPATH_NOT_SETリファレンスファイル管理機能でコンテント格納先ベースパスが設定されていません。または,UNC形式のパスの場合(Windowsだけ),コンテント格納先ベースパスにコンピュータ名またはIPアドレスだけが使用されています。コンテント格納先ベースパスを設定してください。
ERR_DMADMARC_ACCESS_DENIED要求された操作に対してアクセス権がありません。正しいアクセス権を設定してください。
ERR_DMADMARC_BAD_LOCK_TYPE不正な種類のロックが指定されています。正しいロックタイプを指定してください。
ERR_DMADMARC_BAD_OIIDSetOIIDメソッドで設定されたOIIDが不正です。正しいOIIDを指定してください。
ERR_DMADMARC_BAD_PARAMETER不正な引数が入力されました。正しい引数を指定してください。
ERR_DMADMARC_BAD_URLリソースのURLが不正です。URLの内容を見直してください。
ERR_DMADMARC_FAILED操作が失敗しました。時間を置いて再度実行するか,処理を見直してください。
ERR_DMADMARC_NO_MEMORYメモリ不足で実行できません。メモリを増設してください。またはメモリを大量に消費しているアプリケーションを停止させて,処理を再実行してください。
ERR_DMADMARC_NOT_FOUND要求された要素が見つかりません。正しいオブジェクトを設定してください。
ERR_DMADMARC_NOT_SUPPORTEDこのセッションまたはオブジェクトまたはクラスではサポートされていないメソッドです。この操作は実行できません。
ERR_DMADMARC_RESOURCE_NOT_FOUND指示されたリソースが見つかりません。正しいリソースを指定してください。
ERR_DMADMARC_UNEXPECTED予期しないエラーが発生しました。処理を終了してください。
ERR_DMADMARC_URL_PROTOCOL_NOT_SUPPORTEDサポートしていないURLプロトコルです。file:///で始まっているか確認してください。
ERR_DMAEDMRC_FTPSERVICE_LOST_CONNECTIONファイル転送サービスへのセッションが切断されました。ネットワーク環境を確認してください。または,時間を置いて,再度実行してください。
ERR_DMAEDMRC_FTPSERVICE_MAX_SESSIONファイル転送サービスに同時に接続できるセッション数の上限に達しています。時間を置いて,Connectユーザ数が減ったあと,再度実行してください。または,ファイル転送サービス環境定義ファイルのFtpSessionMaxエントリを見直してください。
ERR_DMAEDMRC_FTPSERVICE_NOT_AVAILABLEファイル転送サービスが利用できません。サーバのバージョンに対応したクライアントを利用してください。
ERR_DMAEDMRC_NO_FTPSERVICE使用できるファイル転送サービスがありません。
  • ネットワーク環境を確認してください。
  • _HIEDMS_FTPMODE=STATICを指定してファイル転送サービスを起動しているかどうかを,確認してください。
  • 時間を置いて,再度実行してください。
  • ファイル転送サービスのセットアップコマンドを実行しているかどうかを,確認してください。