6.8.11 マルチレンディション文書のレンディションの操作

ここでは,マルチレンディション文書に対する次の操作について説明します。

なお,バージョン付き文書のレンディションを操作する場合,デフォルトの設定では,カレントバージョンのレンディションが対象になります。操作対象のバージョンを変更する場合は,DbjObj#setTargetVersionメソッドを実行して,ターゲットバージョンを変更してください。

マルチレンディション文書の管理の考え方については,「3.2 レンディション管理モデル」を参照してください。また,DocumentBroker Rendering Optionと連携している場合は,サブレンディションのコンテンツを自動的に作成できます。DocumentBroker Rendering Optionで実行できるレンディション変換については,マニュアル「DocumentBroker Rendering Option Version 3」または「DocumentBroker Rendering Option Version 3(活文 PDFstaff編)」を参照してください。

<この項の構成>
(1) マルチレンディション文書の作成
(2) レンディションの追加
(3) レンディションの削除
(4) マスタレンディションの変更
(5) レンディションを指定したコンテンツの更新
(6) レンディションタイプの変更
(7) レンディションのプロパティの参照
(8) レンディションのプロパティの更新

(1) マルチレンディション文書の作成

マルチレンディション文書は,次のどちらかの方法で,文書に複数のレンディションを登録して作成します。

ここでは,文書作成時に,複数のレンディションを登録することで,マルチレンディション文書を作成する方法について説明します。

文書の作成時に複数のレンディションを登録する場合,まず,複数の文書のアップロード情報(DbjUploadInfoインターフェース)を要素にしたリストを作成します。リストには,マスタレンディションにする文書のアップロード情報を,先頭の要素として指定してください。このリストを,DbjDocSpace#createDocumentメソッドまたはDbjDocSpace#createVrDocumentメソッドの引数に指定して,メソッドを実行します。

リストは,次の点に注意して作成してください。

また,DocumentBroker Rendering Optionと連携している場合,マスタレンディションのコンテンツから,サブレンディションのコンテンツを自動作成することができます。自動作成する場合は,サブレンディションの文書のアップロード情報で,登録するファイルパスとしてnullを指定してください。

マルチレンディション文書を作成する例を示します。この例では,サブレンディションのコンテンツはDocumentBroker Rendering Optionを使用して自動作成します。

// マルチレンディション文書を作成する例
 
 //factory:DbjFactoryインターフェース
 //docspc:DbjDocSpaceインターフェース
 
File uplFilePath_doc = new File( parentdir, "test.doc" );

//文書のアップロード情報のリストを作成する(要素は二つ)
DbjUploadInfo upinfo_doc = factory.createUploadInfo(
                    uplFilePath_doc.getCanonicalPath(),
                    originalFileName_doc,
                    null,
                    null,
                    null );
DbjUploadInfo upinfo_pdf = factory.createUploadInfo(
                    null, // レンディション変換で作成
                    originalFileName_pdf,
                    null,
                    null,
                    null ); // 全文検索インデクス指定は無効
 
// リストを作成する
List uplist = new ArrayList();
 
// 文書のアップロード情報をリストに追加する
uplist.add( upinfo_doc ); // マスタレンディションになる
uplist.add( upinfo_pdf );

// 文書を作成する
// (test.docとtest.pdfが初期登録される)
DbjObj obj = docspc.createDocument(
            "mdmClass_Document",
            null,
            uplist,// 文書のアップロード情報のリスト
            null );

(2) レンディションの追加

既存の文書に対してレンディションを追加する場合,DbjObj#addRenditionメソッドを実行します。複数の文書のアップロード情報を要素にしたリストをメソッドの引数に指定すれば,複数のレンディションを同時に追加できます。

なお,レンディション追加時に,次の機能は使用できません。

サブレンディションを追加する例を示します。この例では,追加するレンディションのコンテンツ(pdf形式)はDocumentBroker Rendering Optionを使用して自動的に作成します。

// サブレンディションを追加する例

 // docspc:DbjDocSpaceインターフェース
 // obj:DbjObjインターフェース
 
// 文書のアップロード情報を作成する
DbjUploadInfo upinfo_pdf = factory.createUploadInfo(
                    null, // レンディション変換で作成する
                    originalFileName_pdf,
                    null,
                    null,
                    null ); // 全文検索インデクス指定は無効
 
// リストを作成する
List uplist = new ArrayList();
 
// 文書のアップロード情報をリストに追加する
uplist.add( upinfo_pdf );
 
// 既存の文書にレンディションを追加する
// (pdf形式のレンディションが追加される)
obj.addRendition( uplist );

(3) レンディションの削除

レンディションは,DbjObj#deleteRenditionメソッドで削除できます。

メソッドの引数には,レンディションタイプを表す文字列を要素とするリストを指定します。要素のレンディションタイプを複数にすると,複数のレンディションを一括して削除できます。

複数のレンディションを一括して削除する例を示します。

// 複数のレンディションを一括して削除する例
 
 // obj:DbjObjインターフェース
 
// 削除対象のレンディションタイプを指定したリストを作成する
List renlist = new ArrayList();
renlist.add( "text/plain" );
renlist.add( "text/html" );

// レンディションを一括して削除する
obj.deleteRendition( renlist );

(4) マスタレンディションの変更

マスタレンディションは,DbjObj#changeMasterRenditionメソッドで変更できます。

マスタレンディションを変更する例を示します。この例では,レンディションタイプが「text/html」のレンディションを,マスタレンディションに変更します。

// マスタレンディションの変更例
 
 // obj:DbjObjインターフェース
 
obj.changeMasterRendition( "text/html" );

(5) レンディションを指定したコンテンツの更新

DbjObj#uploadContentsメソッド実行時に,レンディションを指定してコンテンツを更新できます。

なお,レンディションタイプにnullを指定してマスタレンディションのコンテンツを更新する時以外は,全文検索インデクスは更新できません。また,コンテンツ更新時に,DbjXmlUploadInfoインターフェースによってXMLプロパティマッピング機能を実行することはできません。

レンディションを指定してコンテンツを更新する例を示します。

 

// レンディションを指定してコンテンツを更新する例

 // factory:DbjFactoryインターフェース
 // obj:DbjObjインターフェース

//アップロードするコンテンツのファイルパスを指定する
File uplFile_txt = new File( parentdir, "test.txt" );
File uplFile_doc = new File( parentdir, "test.doc" );

// マスタレンディションの文書のアップロード情報を作成する
DbjUploadInfo upinfo_txt = factory.createUploadInfo(
                  uplFile_txt.getCanonicalPath(),
                  "test.txt",    // retrievalNameプロパティを指定
                  "text/plain",  // レンディションタイプを指定
                  null,
                  DbjDef.INDEXPATH_SAME );
                                 // マスタレンディションを更新する
                                 // 場合だけ有効になる
 
// サブレンディションの文書のアップロード情報を作成する
DbjUploadInfo upinfo_doc = factory.createUploadInfo(
                  uplFile_doc.getCanonicalPath(),
                  "test.doc",    // retrievalNameプロパティを指定
                  "application/ms-word",
                                 // レンディションタイプを指定
                  null,
                  null );

// マスタレンディション(text/plain)にコンテンツをアップロードする
// (マスタレンディションはtext/plainであるとする)
obj.uploadContents(
           null,                  // マスタレンディションを指定
           upinfo_txt );          // 文書のアップロード情報を指定
 
// サブレンディション(application/ms-word)にコンテンツを
// アップロードする
obj.uploadContents(
           "application/ms-word", // レンディションタイプを指定
           upinfo_doc );          //文書のアップロード情報を指定

(6) レンディションタイプの変更

登録済みのレンディションタイプは,DbjObj#uploadContentsメソッドを実行してコンテンツをアップロードする時に変更できます。変更する場合は,コンテンツをアップロードする時に,メソッドの引数に指定するレンディションタイプと,文書のアップロード情報に指定するレンディションタイプに,異なるレンディションタイプを指定します。

それぞれに指定するレンディションタイプは,次のとおりです。

メソッドの引数に指定するレンディションタイプ
コンテンツをアップロードする対象になるレンディションのレンディションタイプを指定します。例えば,「application/ms-word」というレンディションタイプを指定した場合は,このレンディションタイプを持つマスタレンディションまたはサブレンディションのコンテンツが,更新する対象になります。ただし,マスタレンディションにコンテンツが登録されていない場合,またはレンディションタイプとしてnullを指定した場合は,マスタレンディションのコンテンツが対象になります。
文書のアップロード情報に指定するレンディションタイプ
登録するコンテンツに設定するレンディションタイプを指定します。nullを指定した場合は,登録するファイルの拡張子とレンディション定義ファイルの内容に従って,レンディションタイプが設定されます。

メソッドの引数に指定したレンディションタイプと文書のアップロード情報に指定したレンディションタイプが異なる場合,更新するレンディションのレンディションタイプを,文書のアップロード情報に指定したレンディションタイプで変更することになります。例えば,

DbjUploadInfo upinfo = factory.createUploadInfo(
           uplfilePath,
           "test.html"
           "text/html",
           null,
           null );
obj.uploadContents(
           "text/plain
           upinfo );

という指定をした場合は,「text/plain」というレンディションタイプのレンディションのコンテンツにファイル「test.html」を登録して,同時にレンディションタイプを「text/html」に変更することになります。ただし,文書のアップロード情報のレンディションタイプに,すでにほかのレンディションのレンディションタイプとして登録されているレンディションタイプを指定した場合は,エラーになり,例外がスローされます。

なお,マスタレンディションのレンディションタイプ変更時以外は,全文検索インデクスを作成できません。また,レンディションタイプ変更時にXMLプロパティマッピング機能を使用することはできません。

レンディションタイプを変更する例を示します。ここでは,「text/plain」と登録していたレンディションタイプを,「text/html」に変更します。

 

// レンディションタイプを変更する例
 
 // factory:DbjFactoryインターフェース
 // obj:DbjObjインターフェース
 
// アップロードするコンテンツのパスを設定する
File uplFilePath = new File( parentdir, "test.html" );
 
// 文書のアップロード情報を作成する
DbjUploadInfo upinfo = factory.createUploadInfo(
              uplFilePath,
              "test.html",  // retrievalNameプロパティを指定
              "text/html",  // 変更後のレンディションタイプ
              null,
              null );
 
// マスタレンディションのレンディションタイプを変更する
// (text/plain -> text/htmlに変更する)
obj.uploadContents(
              null,         // マスタレンディションが対象
              upinfo );     // 文書のアップロード情報

(7) レンディションのプロパティの参照

レンディションのプロパティは,DbjObj#getRenditionListメソッドを使用して参照します。レンディションのプロパティとして参照できるのは,dbrProp_RetrievalNameプロパティおよびdbrProp_RenditionStatusプロパティです。

なお,DbjObj#getRenditionListメソッドを実行すると,文書中のすべてのレンディションのプロパティが,リストで取得できます。特定のレンディションのプロパティだけを取得することはできません。

レンディションのプロパティを参照する例を示します。

// レンディションのプロパティを参照する例
 
 // obj:DbjObjインターフェース
 
// 取得するプロパティ名のコレクションを作成する
Set propdef = new HashSet();
propdef.add("dbrProp_RetrievalName");

// dbrProp_RetrievalNameプロパティのリストを取得する
DbjRenditionList renlist = obj.getRenditionList( propdef );

// 取得したレンディションのプロパティを一覧表示する
for ( int i = 0; i < renlist.size(); i ++ ) {
 System.out.println( renlist.getRenditionInfo(i)
      .propSet().getStringVal("dbrProp_RetrievalName") );
}

なお,マスタレンディションのプロパティは,DbjRenditionListインターフェースおよびDbjRenditionInfoインターフェースを使わないで,ほかのプロパティと同様の方法でも参照できます。

マスタレンディションのdbrProp_RetrievalNameプロパティを参照する例を示します。

// マスタレンディションのdbrProp_RetrievalNameプロパティを参照する例
 
 // docspc:DbjDocSpaceインターフェース
 
// 取得するプロパティ名のコレクションを作成する
Set propdef = new HashSet();
propdef.add("dbrProp_RetrievalName");
 
DbjObj obj = docspc.createObjConnection( oiid );
// プロパティ値集合をProxyオブジェクトにロードする
obj.readProperties( propdef );
 
// プロパティの値を参照する
String retrievalName
 = obj.propSet().getStringVal("dbrProp_RetrievalName");

(8) レンディションのプロパティの更新

レンディションのプロパティは,DbjObj#writeRenditionPropertiesメソッドで更新します。レンディションのプロパティとして参照できるのは,dbrProp_RetrievalNameプロパティおよびdbrProp_RenditionStatusプロパティです。

レンディションのプロパティを更新する例を示します。

// レンディションのプロパティを更新する例
 
 // factory:DbjFactoryインターフェース
 // obj:DbjObjインターフェース
 
// レンディションのプロパティを更新するための
// プロパティ値集合を作成する
DbjPropSet props = factory.createPropSet();
props.setPropVal("dbrProp_RetrievalName", "a.txt");

// レンディションのプロパティを更新する
obj.writeRenditionProperties(
               "text/plain",// 対象にするレンディションタイプ
               props );