複数の文書空間オブジェクトの一括操作について説明します。これは,複数の文書空間オブジェクトに,1トランザクションでアクセスする機能です。
複数の文書空間オブジェクトを操作する場合には,DbjObjListインターフェースまたはDbjVerObjListインターフェースを使用します。複数のリンクオブジェクトを操作する場合には,DbjLinkObjListインターフェースを使用します。
これらのインターフェースは,java.util.Listインターフェースを継承しています。リストの要素は,それぞれ,DbjObjインターフェース,DbjVerObjインターフェース,DbjLinkObjインターフェースです。
ここでは,次の操作について説明します。
なお,操作する文書空間オブジェクトにバージョン付きオブジェクトが含まれる場合,デフォルトの設定では,カレントバージョンが操作の対象になります。操作対象のバージョンを変更する場合には,要素であるProxyオブジェクトのインターフェースを取得してDbjObj#setTargetVersionメソッドを実行し,それぞれの要素のターゲットバージョンを変更してください。
DbjObjListインターフェースを使用して,複数の文書空間オブジェクトのプロパティを一括して操作できます。
プロパティの参照には,DbjObjList#readPropertiesメソッドを使用します。このメソッドの使用方法は,DbjObj#readPropertiesメソッドと同じです。ただし,DbjObjListインターフェースの要素であるDbjObjインターフェースに対して,一括してメソッドが実行できます。引数を指定しない形式のDbjObjList#readPropertiesメソッドを実行した場合は,要素のDbjObjインターフェースで扱うProxyオブジェクトにすでにロードされているプロパティ値集合を更新します。文書空間ごとに異なる種類のプロパティがロードされている場合は,文書空間オブジェクトごとに異なる種類のプロパティをロードします。
プロパティの更新には,DbjObjList#writePropertiesメソッドを使用します。このメソッドの使用方法もDbjObj#writePropertiesメソッドと同じです。Proxyオブジェクトごとに設定したプロパティの値を,複数の文書空間オブジェクトに一括してフラッシュします。
プロパティの操作の詳細については,「6.8.7 文書空間オブジェクトのプロパティの操作」を参照してください。
複数の文書空間オブジェクトのプロパティを一括操作する例を示します。この例では, 検索でヒットした複数の文書空間オブジェクトのプロパティを一括して参照および更新します。
// 複数の文書空間オブジェクトのプロパティを一括操作する例
// docspc:DbjDocSpaceインターフェース
// 検索を実行する
DbjResultSet result = docspc.executeSearch(
"SELECT dmaProp_OIID FROM DV WHERE ...",
null,
null );
// 検索結果からDbjObjListインターフェースを取得する
DbjObjList objlist = docspc.createObjList( result, 0 , null );
// Countプロパティを一括してProxyオブジェクトにロードする
Set propdef = new HashSet();
propdef.add( "Count" );
objlist.readProperties( propdef );
// Proxyオブジェクトのプロパティの値を更新する
for ( int i = 0; i < objlist.size(); i ++ ) {
int count = objlist.getObj(i).propSet().getIntVal("Count");
count ++;
objlist.getObj(i).propSet().setPropVal( "Count", count );
}
// 文書空間オブジェクトのプロパティを一括してフラッシュする
objlist.writeProperties();
検索や一覧取得メソッドで取得した複数の文書空間オブジェクトに対して,同じ種別のロックを設定して操作するためのインターフェースを取得できます。この操作には,DbjObjList#lockメソッドを使用します。
複数の文書空間オブジェクトにwriteロックを設定して操作する例を示します。この例では,検索結果として取得した文書空間オブジェクトに,writeロックを設定して操作します。
// 複数の文書空間オブジェクトにwriteロックを設定して操作する例
// docspc:DbjDocSpaceインターフェース
// 検索を実行する
DbjResultSet result = docspc.executeSearch(
"SELECT dmaProp_OIID FROM DV WHERE ...”,
null,
null );
// DbjObjListインターフェースを取得する
DbjObjList objlist = docspc.createObjList( result, 0 , null );
// writeロックを設定するDbjObjListインターフェースを取得する
DbjObjList objlistWithWriteLock = objlist.lock(DbjDef.LOCK_WRITE);
// writeロックでCountプロパティを参照する
objlistWithWriteLock.readProperties( Collections.singleton("Count") );
DbjObjListインターフェースを使用して,複数文書空間オブジェクトを一括して削除できます。削除は,DbjObjList#removeObjectsメソッドで実行します。
複数の文書空間オブジェクトを一括して削除する例を示します。この例では,特定のフォルダの下位オブジェクトをすべて削除します。
// 複数文書空間オブジェクトを一括して削除する例
// parentObj:DbjObjインターフェース
// 特定フォルダから下位オブジェクトの一覧を取得する
DbjLinkObjList linklist = parentObj.getChildList(
null,
null,
DbjDef.LINK_DCR|DbjDef.LINK_RCR,
DbjDef.OBJTYPE_ANY,
null );
// リンクオブジェクトのリストからDbjObjListインターフェースを取得する
DbjObjList objlist = linklist.getTargetObjList();
// 一括削除する
objlist.removeObjects();
フォルダから直接型リンクで関連付けられている文書空間オブジェクト(文書またはフォルダ)を,一括して別のフォルダに直接型リンクで関連付けるように変更できます。これによって,あるフォルダで管理していた文書を,別のフォルダに一括して移動するような管理ができます。複数の文書空間オブジェクトの移動には,DbjObjList#moveメソッドを使用します。
フォルダに直接型リンクでリンク付けられている文書を一括して移動する例を示します。
// フォルダに直接型リンクでリンク付けられている文書を一括して移動する例
// docspc:DbjDocSpaceインターフェース
// parentObj:DbjObjインターフェース
// フォルダに直接型リンクで関連付けている文書一覧を取得する
DbjLinkObjList linklist = parentObj.getChildList(
null,
null,
DbjDef.LINK_DCR,
DbjDef.OBJTYPE_DOC,
null );
// 下位オブジェクトの一覧を取得する
DbjObjList childlist = linklist.getTargetObjList();
// 下位オブジェクトを別のフォルダに移動する
DbjObj parentObj2 = docspc.createObjConnection( parentoiid2 );
childlist.move( parentObj2 );