ここでは,文書空間オブジェクトのプロパティの操作について説明します。
文書空間オブジェクトのプロパティとは,文書空間オブジェクトが持っているプロパティです。DMAオブジェクト上に値が存在するものと,DMAオブジェクトの状態を基に演算などによって求められるものがあります。文書空間オブジェクトのプロパティの詳細については,「2.11 文書空間オブジェクトのプロパティ」を参照してください。
文書空間オブジェクトのプロパティの操作は,次の2種類の操作に分けられます。
なお,プロパティ管理のモデルついては,「3.9 属性管理モデル」を参照してください。
文書空間オブジェクトのプロパティの値は,次の手順で参照します。
なお,文書空間オブジェクトのプロパティの値を,Proxyオブジェクトのターゲットプロパティ値集合プロパティにロードする方法として,次の2種類の方法があります。
プロパティの値の参照の流れを,次の図に示します。
図6-12 プロパティの値の参照の流れ
ここでは,まず,集合に指定したプロパティのプロパティ値集合を,Proxyオブジェクトにロードする例を示します。
// プロパティを参照する例1(取得するプロパティ名の集合を指定する方法)
// docspc:DbjDocSpaceインターフェース
// 参照するプロパティ名を要素とする集合
// (TitleプロパティとAuthorプロパティ)を作成する
Set propdef = new HashSet();
propdef.add( "Title" );
propdef.add( "Author" );
// DbjObjインターフェースを取得する
DbjObj obj = docspc.createObjConnection( oiid );
// プロパティ値集合をProxyオブジェクトにロードする
obj.readProperties( propdef );
// Proxyオブジェクトのターゲットプロパティ値集合プロパティから
// プロパティ値を取得する
String title = obj.propSet().getStringVal("Title");
String author = obj.propSet().getStringVal("Author");
次に,すでにProxyオブジェクトにロードされているプロパティ値集合を,再度ロードする例を示します。
// プロパティを参照する例2
// (すでにロードされているプロパティ値集合を再度ロードする方法)
// 「プロパティを参照する例1」の続き
// プロパティ値集合をProxyオブジェクトに再度ロードする
//(TitleプロパティとAuthorプロパティの値が更新される)
obj.readProperties();
// Proxyオブジェクトのターゲットプロパティ値集合プロパティから
// プロパティ値を取得する
String title = obj.propSet().getStringVal("Title");
String author = obj.propSet().getStringVal("Author");
文書空間オブジェクトのプロパティの値は,次の手順で更新します。
ここでは,まず,プロパティ値集合(DbjPropSet)の値を文書空間オブジェクトに設定する例を示します。
// プロパティを更新する例1(プロパティ値集合の値で更新する例)
// docspc:DbjDocSpaceインターフェース
// 更新するプロパティ値集合(TitleプロパティとAuthorプロパティ)を作成する
DbjPropSet props = factory.createPropSet();
props.setPropVal( "Title", "report" );
props.setPropVal( "Author", "suzuki" );
// DbjObjインターフェースを取得する
DbjObj obj = docspc.createObjConnection( oiid );
// 文書空間オブジェクトのプロパティ値を更新する
obj.writeProperties( props );
次に,Proxyオブジェクトのターゲットプロパティ値集合プロパティにロードしたプロパティの値を更新して,文書空間オブジェクトにフラッシュする例を示します。
// プロパティを更新する例2(Proxyオブジェクトの値をフラッシュする方法)
// docspc:DbjDocSpaceインターフェース
// 参照するプロパティ名を要素とする一覧
// (TitleプロパティとAuthorプロパティ)を作成する
Set propdef = new HashSet();
propdef.add( "Title" );
propdef.add( "Author" );
// DbjObjインターフェースを取得する
DbjObj obj = docspc.createObjConnection( oiid );
// プロパティ値集合をProxyオブジェクトにロードする
obj.readProperties( propdef );
// Titleプロパティの値に'#'を追加する
String title = obj.propSet().getStringVal("Title") + "#";
obj.propSet().setPropVal( "Title", title );
// 文書空間オブジェクトに
// TitleプロパティとAuthorプロパティの値をフラッシュする
obj.writeProperties();
Proxyオブジェクトのターゲットプロパティ値集合プロパティにロードしたプロパティの値を更新して,一部のプロパティの値だけを文書空間オブジェクトにフラッシュする例を示します。
// プロパティを更新する例3
// (Proxyオブジェクトの一部のプロパティの値をフラッシュする方法)
// docspc:DbjDocSpaceインターフェース
// 参照するプロパティ名を要素とするコレクション
// (TitleプロパティとAuthorプロパティ)を作成する
Set propdef = new HashSet();
propdef.add( "Title" );
propdef.add( "Author" );
// DbjObjインターフェース取得
DbjObj obj = docspc.createObjConnection( oiid );
// プロパティ値集合をProxyオブジェクトにロードする
obj.readProperties( propdef );
// Titleプロパティの値に'#'を追加する
String title = obj.propSet().getStringVal("Title") + "#";
obj.propSet().setPropVal("Title", title);
// 文書空間オブジェクトに
// Titleプロパティの値だけをフラッシュする
Set updateprop = new HashSet();
updateprop.add( "Title" );
obj.writeProperties( updateprop );
バージョン付きオブジェクトのプロパティを操作する場合,バージョニングオブジェクトのプロパティとバージョンオブジェクトのプロパティを同時に操作できます。
バージョニングオブジェクトのプロパティとバージョンオブジェクトのプロパティは,データベース上では,次に示すように異なるDMAオブジェクト上に定義されています。
バージョニングオブジェクトのプロパティとバージョンオブジェクトのプロパティは,バージョンオブジェクトのプロパティ名に@プレフィックスを付けて指定することで,明示的に区別して指定します。
例えば,バージョン付き文書のバージョニングオブジェクトに文書全体の著者名を表すAuthorプロパティが定義されていて,バージョンオブジェクトにもバージョンごとの著者名を表すAuthorプロパティが定義されている場合,バージョンオブジェクトのAuthorプロパティは,"@Author"として指定します。これは,Proxyオブジェクトのターゲットプロパティ値集合プロパティにロードしたプロパティ値集合を扱う場合でも同じです。バージョニングオブジェクトとバージョンオブジェクトのプロパティを同時に操作する場合は,バージョンオブジェクトのプロパティ名に「@」を付けて区別します。
ただし,バージョン付きオブジェクトのプロパティを扱う場合でも,バージョンオブジェクトのDbjObjインターフェースを取得して操作する場合には,「@」は付けません。例えば,バージョン付きオブジェクトから直接カレントバージョンのプロパティを取得する場合は「@」を付けますが,バージョン付きオブジェクトからカレントバージョンのDbjObjインターフェースを取得して,そのインターフェースを使用してバージョンオブジェクトのプロパティを取得する場合は「@」を付けません。
バージョン付きオブジェクトのプロパティの操作を次の図に示します。
図6-13 バージョン付きオブジェクトのプロパティの操作
ここでは,バージョニングオブジェクトのAuthorプロパティとバージョンオブジェクトのAuthorプロパティを同時に取得して参照する例を示します。
// バージョン付きオブジェクトのプロパティを参照する例
//docspc:DbjDocSpaceインターフェース
// 参照するプロパティ名を要素とするコレクションを作成する
Set propdef = new HashSet();
propdef.add( "Author" );
propdef.add( "@Author" );
// バージョニングオブジェクトのDbjObjインターフェースを取得する
DbjObj obj = docspc.createObjConnection( oiid );
// プロパティ値集合をProxyオブジェクトにロードする
obj.readProperties( propdef );
// バージョニングオブジェクトのAuthorプロパティを取得する
String authorOfVersioning = obj.propSet().getStringVal("Author");
// バージョンオブジェクトのAuthorプロパティを取得する
String authorOfVersion = obj.propSet().getStringVal("@Author");
VARRAY型のプロパティは,可変長配列を値とするプロパティです。可変長配列は,パラメタクラスのDbjVArrayインターフェースを使用して操作します。
VARRAY型のプロパティの値は,次のどちらかの方法で取得できます。
これらのインターフェースを使用して,VARRAY型のプロパティを参照する手順は,次のとおりです
ここでは,DbjPropSetインターフェースを使用してVARRAY型のプロパティを参照する例を示します。この例では,次の図に示す文書空間オブジェクトのVARRAY型のプロパティを対象にします。
図6-14 例で使用するVARRAY型のプロパティ
// VARRAY型のプロパティを参照する例
//docspc:DbjDocSpaceインターフェース
Set propdef = new HashSet();
propdef.add( "arr" );
// VARRAY型のプロパティの値をロードする
DbjObj obj = docspc.createObjConnection( oiid );
obj.readProperties( propdef );
// Proxyオブジェクトのターゲットプロパティ値集合プロパティから,
// DbjVArrayインターフェースの参照を取得する
DbjVArray varray = obj.propSet().getVArrayRef( "arr" );
// VARRAY型のプロパティの各要素の値を出力する
for (int i=0; i<varray.size();i++){
System.out.println("Title["+i+"]="
varray.propSet(i).getStringVal( "Title" ) );
System.out.println("Author["+i+"]="
varray.propSet(i).getStringVal( "Author" ) );
}
VARRAY型のプロパティは,次のような手順で更新します。
VARRAY型のプロパティを更新する例を示します。なお,対象とするVARRAY型のプロパティは,図6-14と同じです。
// VARRAY型のプロパティを更新する例
// factory:DbjFactoryインターフェース
// docspc:DbjDocSpaceインターフェース
// obj:DbjObjインターフェース
// 可変長配列の要素のプロパティ名のコレクションを作成する
Set propdef = new HashSet();
propdef.add( "Title" );
propdef.add( "Author" );
propdef.add( "Number" );
// 可変長配列を作成する
DbjVArray varray = factory.createVArray( propdef );
// 可変長配列の要素を作成する
DbjPropSet elm = factory.createPropSet();
// 一つ目の要素に値を設定する
elm.setPropVal( "Title" , "report1" );
elm.setPropVal( "Author" , "suzuki" );
// 可変長配列に一つ目の要素を追加する
varray.addPropSet( elm );
// 二つ目の要素に値を設定する
elm.setPropVal( "Title" , "report2" );
elm.setPropVal( "Author" , "hitachi" );
// 可変長配列に二つ目の要素を追加する
varray.addPropSet( elm );
// Numberプロパティの値を要素ごとに設定する
for(int i = 0; i < varray.size(); i ++ ) {
// 可変長配列の要素を参照してNumberプロパティの値を設定する
varray.propSet(i).setPropVal( "Number",i );
}
// プロパティ値集合を作成する
// (arrプロパティに可変長配列の値を設定する)
DbjPropSet props = factory.createPropSet();
props.setPropVal( "arr" , varray );
// 文書空間オブジェクトにプロパティ値集合をフラッシュする
obj.writeProperties( props );
レンディションのプロパティの操作,およびリンクオブジェクトのプロパティの操作は,この項で説明したプロパティの操作とは異なるインターフェースおよびメソッドを使用して実行します。
レンディションのプロパティの操作については,「6.8.11 マルチレンディション文書のレンディションの操作」を参照してください。
リンクオブジェクトのプロパティの操作については,「6.8.13 リンクの操作」を参照してください。