IBM FileNet P8, バージョン 5.2.1            

コレクションの操作

新しい 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);
注: DependentObjectList オブジェクトは再利用できないので、フェッチされた独立オブジェクトから取られた DependentObjectList オブジェクトを別の独立オブジェクトに再割り当てしないでください。詳細については、DependentObjects を参照してください。

コレクションの反復処理

ページングを使用して 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


最終更新日: 2015 年 10 月
collection_procedures.htm

© Copyright IBM Corp. 2015.