コレクションの操作
新しい List 型コレクションを作成する方法と、ページングを使用して、返された Set 型コレクションを反復処理する方法を表すコード例を以下に示します。
コレクションの作成
多くの Content Engine の API メソッドは、引数として空のコレクションまたはデータ設定済みのコレクションを使用します。Factory クラスには、空の List 型コレクションを作成するメソッドが用意されています。作成されたコレクションに、必要に応じて、適切な型のエレメントを追加できます。継承したメソッドを使用して Content Engine の API コレクション・オブジェクト内のエレメントを操作することもできます。
次のコード例は、新しい空の AccessPermissionList コレクションを作成し、そのコレクションにエレメントを追加します。
Java™ の例
// 新しいコレクションを作成
AccessPermissionList apl = Factory.AccessPermission.createList();
// 新しい AccessPermission オブジェクトを作成し、コレクションに追加
AccessPermission ap = Factory.AccessPermission.createInstance();
// いくつかのアクセス権限を設定 (省略)
// ...
// リストにアイテムを追加
apl.add(ap);
C# の例
// 新しいコレクションを作成
IAccessPermissionList apl = Factory.AccessPermission.CreateList();
// 新しい AccessPermission オブジェクトを作成し、コレクションに追加
IAccessPermission ap = Factory.AccessPermission.CreateInstance();
// いくつかのアクセス権限を設定 (省略)
// ...
// リストにアイテムを追加
apl.Add(ap);
コレクションの反復処理
ページングを使用して Set 型コレクションを反復処理する方法を示し、ページ・サイズの調整およびページのマーク付けを使用する方法を表すコード例を以下に示します。
ページ・サイズの調整
サブフォルダーのコレクションを反復処理するコード例を次に示します。プリフェッチ (反復処理されるオブジェクトを含むオブジェクト・セットを作成する際に発生する最初のフェッチ) のページ・サイズには、後続のすべてのフェッチのページ・サイズとは別に、異なる値を設定できます。コード例の後に示した出力例では、ページ・サイズを変更した場合の効果を確認できます。
Java の例
// 反復処理するフォルダーを取得
private static void iterateFolders(
Folder mainFolder, // 反復処理するフォルダー
int pageSizePrefetch, // ページ・サイズのプリフェッチ。例: 1
int pageSizeFetch) // ページ・サイズのフェッチ。例: 1
{
// 属性の表示
System.out.println("Parameter pageSizePrefetch: " + pageSizePrefetch);
System.out.println("Parameter pageSizeFetch: " + pageSizeFetch);
System.out.println("");
// サブフォルダーのコレクションを取得 (およびプリフェッチ・ページ・サイズを設定)
Property prop = mainFolder.fetchProperty(
"SubFolders", null, new Integer(pageSizePrefetch));
IndependentObjectSet objectSet = prop.getIndependentObjectSetValue();
// ページ・イテレーターを初期化し、フェッチ・ページ・サイズを設定
PageIterator pageIter = objectSet.pageIterator();
pageIter.setPageSize(pageSizeFetch);
// サブフォルダーを反復処理
iteratePageElements(pageIter);
}
// ページ・エレメントを反復処理
public static void iteratePageElements(
PageIterator pageIter)
{
// ページで繰り返す
int pageCount = 0;
while (pageIter.nextPage() == true)
{
// カウンター値の取得
pageCount++;
int elementCount = pageIter.getElementCount();
// ページのオブジェクト数を表示
System.out.println("Page: "
+ pageCount + " Element count: " + elementCount);
// ページのエレメントを取得
Object[] pageObjects = pageIter.getCurrentPage();
for (int index = 0; index < pageObjects.length; index++)
{
// サブオブジェクトを取得
Object elementObject = pageObjects[index];
// ドキュメントかどうかを確認
if (elementObject instanceof Document)
{
Document elementDoc = (Document) elementObject;
elementDoc.refresh();
com.filenet.api.property.Properties props = elementDoc.getProperties();
System.out.println(" -" + props.getStringValue("DocumentTitle"));
}
// その他のタイプであるかどうかを確認
else
{
Containable conObject = (Containable) elementObject;
System.out.println(" -" + conObject.get_Name());
}
}
}
}
C# の例
// 反復処理するフォルダーを取得
private static void IterateFolders(
IFolder mainFolder, // 反復処理するフォルダー
int pageSizePrefetch, // ページ・サイズのプリフェッチ。例: 1
int pageSizeFetch) // ページ・サイズのフェッチ。例: 1
{
// 属性の表示
Debug.WriteLine("Parameter pageSizePrefetch: " + pageSizePrefetch);
Debug.WriteLine("Parameter pageSizeFetch: " + pageSizeFetch);
Debug.WriteLine("");
// サブフォルダーのコレクションを取得 (およびプリフェッチ・ページ・サイズを設定)
IProperty prop = mainFolder.FetchProperty(
"SubFolders", null, pageSizePrefetch);
IIndependentObjectSet objectSet = prop.GetIndependentObjectSetValue();
// ページ・イテレーターを初期化し、フェッチ・ページ・サイズを設定
IPageEnumerator pageIter = objectSet.GetPageEnumerator();
pageIter.PageSize = pageSizeFetch;
// サブフォルダーを反復処理
IteratePageElements(pageIter);
}
// ページ・エレメントを反復処理
public static void IteratePageElements(
IPageEnumerator pageIter)
{
// ページで繰り返す
int pageCount = 0;
while (pageIter.NextPage() == true)
{
// カウンター値の取得
pageCount++;
int elementCount = pageIter.ElementCount;
// ページのオブジェクト数を表示
Debug.WriteLine("Page: "
+ pageCount + " Element count: " + elementCount);
// ページのエレメントを取得
Object[] pageObjects = pageIter.CurrentPage;
for (int index = 0; index < pageObjects.Length; index++)
{
// サブオブジェクトを取得
Object elementObject = pageObjects[index];
// ドキュメントかどうかを確認
if (elementObject is IDocument)
{
IDocument elementDoc = (IDocument) elementObject;
elementDoc.Refresh();
IProperties props = elementDoc.Properties;
Debug.WriteLine(" -" + props.GetStringValue("DocumentTitle"));
}
// その他のタイプであるかどうかを確認
else
{
IContainable conObject = (IContainable) elementObject;
Debug.WriteLine(" -" + conObject.Name);
}
}
}
}
出力例
パラメーター pageSizePrefetch = 1、pageSizeFetch = 3
Parameter pageSizePrefetch: 1
Parameter pageSizeFetch: 3
Page: 1 Element count: 1
-Subfolder5
Page: 2 Element count: 3
-Subfolder7
-Subfolder2
-Subfolder6
Page: 3 Element count: 3
-Subfolder3
-Subfolder4
-Subfolder1
出力例
パラメーター pageSizePrefetch = 3、pageSizeFetch = 1
Parameter pageSizePrefetch: 3
Parameter pageSizeFetch: 1
Page: 1 Element count: 3
-Subfolder5
-Subfolder7
-Subfolder2
Page: 2 Element count: 1
-Subfolder6
Page: 3 Element count: 1
-Subfolder3
Page: 4 Element count: 1
-Subfolder4
Page: 5 Element count: 1
-Subfolder1
出力例
パラメーター pageSizePrefetch = 3、pageSizeFetch = 3
Parameter pageSizePrefetch: 3
Parameter pageSizeFetch: 3
Page: 1 Element count: 3
-Subfolder5
-Subfolder7
-Subfolder2
Page: 2 Element count: 3
-Subfolder6
-Subfolder3
-Subfolder4
Page: 3 Element count: 1
-Subfolder1
ページのマーク付け
ドキュメントのコレクションを反復処理するコード例を次に示します。出力例 (コード例の後) に示すように、ページのマーク付け機能を使用して、後でその位置に戻れるようにイテレーターの位置を保存できます。この例は、前のページ・サイズの調整の例に示された iteratePageElements メソッドを呼び出します。
Java の例
public static void iterateDocuments(
ObjectStore os,
int pageStart, // イテレーターをリセットするページ
int maxDocCount, // 取得する最大ドキュメント数
String folderPath) // ドキュメントのあるフォルダー。例: /Sub1/Sub1a
{
// Show parameters.
System.out.println("Parameter pageStart: " + pageStart);
System.out.println("Parameter maxDocCount: " + maxDocCount);
System.out.println("");
// 必要なページ・サイズを設定
int pageSize = 5;
// ドキュメントを取得する SQL を作成
SearchSQL searchSQL = new SearchSQL();
searchSQL.setMaxRecords(maxDocCount);
searchSQL.setSelectList("d.this");
searchSQL.setFromClauseInitialValue("Document", "d", false);
searchSQL.setWhereClause("d.this INFOLDER " + "'" + folderPath + "'");
// オブジェクト・ストアの検索スコープを作成
SearchScope searchScope = new SearchScope(os);
// ドキュメントを取得し、プリフェッチ・ページ・サイズを設定
IndependentObjectSet objectSet =
searchScope.fetchObjects(searchSQL, new Integer(pageSize), null, new Boolean(true));
// ページ反復処理を初期化し、フェッチ・ページ・サイズを設定
PageIterator pageIter = objectSet.pageIterator();
pageIter.setPageSize(pageSize);
// ドキュメントの取得に必要な最大ページ数を計算
int maxPageCount = (maxDocCount / pageSize) + 1;
// 各ページのページ・マークを取得
PageMark pageMarks[] = new PageMark[maxPageCount];
int pageCount = 0;
while (pageIter.nextPage() == true)
{
pageMarks[pageCount++] = pageIter.getPageMark();
}
// 対象のページにイテレーターをリセット
pageIter.reset(pageMarks[pageStart - 1]);
// ページ・エレメントを表示
ChapterCollections.iteratePageElements(pageIter);
}
C# の例
public static void IterateDocuments(
IObjectStore os,
int pageStart, // イテレーターをリセットするページ。
int maxDocCount, // 取得する最大ドキュメント数。
String folderPath) // ドキュメントのあるフォルダー。例: /Sub1/Sub1a
{
// Show parameters.
Debug.WriteLine("Parameter pageStart: " + pageStart);
Debug.WriteLine("Parameter maxDocCount: " + maxDocCount);
Debug.WriteLine("");
// 必要なページ・サイズを設定
int pageSize = 5;
// ドキュメントを取得する SQL を作成
SearchSQL searchSQL = new SearchSQL();
searchSQL.SetMaxRecords(maxDocCount);
searchSQL.SetSelectList("d.this");
searchSQL.SetFromClauseInitialValue("Document", "d", false);
searchSQL.SetWhereClause("d.this INFOLDER " + "'" + folderPath + "'");
// オブジェクト・ストアの検索スコープを作成
SearchScope searchScope = new SearchScope(os);
// ドキュメントを取得し、プリフェッチ・ページ・サイズを設定
IIndependentObjectSet objectSet =
searchScope.FetchObjects(searchSQL, pageSize, null, true);
// ページ反復処理を初期化し、フェッチ・ページ・サイズを設定
IPageEnumerator pageIter = objectSet.GetPageEnumerator();
pageIter.PageSize = pageSize;
// ドキュメントの取得に必要な最大ページ数を計算
int maxPageCount = (maxDocCount / pageSize) + 1;
// 各ページのページ・マークを取得
IPageMark[] pageMarks = new IPageMark[maxPageCount];
int pageCount = 0;
while (pageIter.NextPage() == true)
{
pageMarks[pageCount++] = pageIter.PageMark;
}
// 対象のページにイテレーターをリセット
pageIter.Reset(pageMarks[pageStart - 1]);
// ページ・エレメントを表示
ChapterCollections.IteratePageElements(pageIter);
}
出力例
パラメーター pageStart = 1、maxDocCount = 12
Parameter pageStart: 1
Parameter maxDocCount: 12
Page: 1 Element count: 5
-Document9
-Document7
-Document4
-Document3
-Document1
Page: 2 Element count: 5
-Document2
-Document8
-Document10
-Document12
-Document11
Page: 3 Element count: 2
-Document5
-Document6
出力例
パラメーター pageStart = 2、maxDocCount = 12
Parameter pageStart: 2
Parameter maxDocCount: 12
Page: 1 Element count: 5
-Document2
-Document8
-Document10
-Document12
-Document11
Page: 2 Element count: 2
-Document5
-Document6
出力例
パラメーター pageStart = 3、maxDocCount = 12
Parameter pageStart: 3
Parameter maxDocCount: 12
Page: 1 Element count: 2
-Document5
-Document6