IBM FileNet P8, バージョン 5.2.1            

コンテナーの操作

以下の情報とコード例では、フォルダーと参照コンテナー関係オブジェクトの作成方法と操作方法を示します。

Folder オブジェクトの作成

フォルダーを作成するには、次のいずれかのタスクを実行します。

  • Factory.Folder クラスの、いずれかの createInstance メソッドを使用します。

    Java™ の例

    // トップ・フォルダーを作成。You must explicitly set the Parent and FolderName properties  
    // 明示的に Parent、FolderName プロパティーを設定しなければならない
    Folder myFolder = Factory.Folder.createInstance(os, null);
    // Specify the parent folder. トップ・フォルダーが作成される
    myFolder.set_Parent(os.get_RootFolder());
    myFolder.set_FolderName("Loans");
    myFolder.save(RefreshMode.NO_REFRESH);

    C# の例

    // トップ・フォルダーを作成。You must explicitly set the Parent and FolderName properties  
    // 明示的に Parent、FolderName プロパティーを設定しなければならない
    IFolder myFolder = Factory.Folder.CreateInstance(os, null);
    // Specify the parent folder. トップ・フォルダーが作成される
    myFolder.Parent = os.RootFolder;
    myFolder.FolderName = "Loans";
    myFolder.Save(RefreshMode.NO_REFRESH);
      
  • 親フォルダーの Folder.createSubFolder メソッドを使用して、直接包含される子フォルダーを作成します。
    注: Folder.createSubFolder を使用する場合、Parent プロパティーは自動的に設定されます。

    新規に作成したフォルダーのプロパティー値は、Folder クラスのデフォルト値になります。オプションで、新規オブジェクトに異なるアクセス権限を指定できます。コード例については、「アクセス権限の設定」を参照してください。

    Java の例

    // 親フォルダーを取得し、サブフォルダーを追加
    String parentFolderPath = "/Loans";
    
    Folder parentFolder = Factory.Folder.getInstance(os, null, parentFolderPath);
    Folder newFolder = parentFolder.createSubFolder("MyLoans");
    newFolder.save(RefreshMode.NO_REFRESH);
      

    C# の例

    // 親フォルダーを取得し、サブフォルダーを追加
    String parentFolderPath = "/Loans";
    IFolder parentFolder = Factory.Folder.GetInstance(os, null, parentFolderPath);
    IFolder newFolder = parentFolder.CreateSubFolder("MyLoans");
    newFolder.Save(RefreshMode.NO_REFRESH);

Folder オブジェクトの取得

永続的な Folder オブジェクトは、次の方法で取得できます。

  • Factory.Folder クラスの fetchInstance を呼び出して、オブジェクト・ストアから特定のフォルダーを取得します。オブジェクトのプロパティーにアクセスする必要がない場合、Folder オブジェクトを取得する代わりに、Factory.Folder.getInstance を呼び出してインスタンス化することもできます。getInstance の使用例については、createSubFolder の例を参照してください。fetchInstance の使用例については、次の get_ParentFolder の例を参照してください。
  • Folder オブジェクトの get_ParentFolder を呼び出して、フォルダーの親フォルダーを取得します。

    Java の例

    String childFolderPath = "/Loans/MyLoans";
    Folder currentFolder = Factory.Folder.fetchInstance(os, childFolderPath, null);
    Folder parent = currentFolder.get_Parent();

    C# の例

    String childFolderPath = "/Loans/MyLoans";
    IFolder currentFolder = Factory.Folder.FetchInstance(os, childFolderPath, null);
    IFolder parent = currentFolder.Parent;
  • ReferentialContainmentRelationship.Tail プロパティーまたは DynamicReferentialContainmentRelationship.Tail プロパティーを取得することにより、コンテナー関係の論理上の末尾であるフォルダーを取得します。

    Java の例

    ReferentialContainmentRelationship rcr = Factory.ReferentialContainmentRelationship.createInstance(os, null);
    ReferentialContainmentRelationship currentRCR = Factory.ReferentialContainmentRelationship.fetchInstance(os, (rcr.get_Id()), null);
    IndependentObject currentTail = currentRCR.get_Tail();

    C# の例

    IReferentialContainmentRelationship rcr = Factory.ReferentialContainmentRelationship.CreateInstance(os, null);
    IReferentialContainmentRelationship currentRCR = Factory.ReferentialContainmentRelationship.FetchInstance(os, rcr.Id, null);
    IIndependentObject currentTail = currentRCR.Tail; 
  • ObjectStore オブジェクトの get_RootFolder を呼び出す (またはオブジェクト・ストアの RootFolder プロパティーを取得する) ことにより、オブジェクト・ストアで自動作成された単一のルート・フォルダーを取得します。例については「Folder オブジェクトの作成」を参照してください。

folder コレクション (直接包含されるフォルダー) は、次の方法で取得できます。

  • Folder オブジェクトの get_SubFolders メソッドを呼び出します。これにより、フォルダーにファイリングされているサブフォルダーが返されます。

    Java の例

    String folderPath = "/Loans";
    Folder currentFolder = Factory.Folder.fetchInstance(os, folderPath, null);
    FolderSet childFolders = currentFolder.get_SubFolders();

    C# の例

    String folderPath = "/Loans";
    IFolder currentFolder = Factory.Folder.FetchInstance(os, folderPath, null);
    IFolderSet childFolders = currentFolder.SubFolders;
  • 特定のドキュメントの Versionable.FoldersFiledIn プロパティーを取得することにより、そのドキュメントが格納されているフォルダーを取得します。

    Java の例

    String docPath = "/Loans/MyLoans/myDoc";
    Document currentDoc = Factory.Document.getInstance(os, null, docPath);
    currentDoc.refresh();
    FolderSet parentFolders = currentDoc.get_FoldersFiledIn(); 

    C# の例

    String docPath = "/Loans/myLoans/myDoc";
    IDocument currentDoc = Factory.Document.GetInstance(os, null, docPath);
    currentDoc.Refresh();
    IFolderSet parentFolders = currentDoc.FoldersFiledIn;
  • ObjectStore.TopFolders プロパティーを取得することにより、オブジェクト・ストアで自動作成された単一のルート・フォルダー直下のサブフォルダーであるフォルダーを取得します。

    Java の例

    ObjectStore os = Factory.ObjectStore.fetchInstance(myDomain, myOS, myOSFilter);
    FolderSet topFolders = os.get_TopFolders();

    C# の例

    IObjectStore os = Factory.ObjectStore.FetchInstance(myDomain, myOS, myOSFilter);
    IFolderSet topFolders = os.TopFolders;

任意の関係にあるコンテナーであるフォルダー、またはコンテナーに包含されるフォルダーを取得できます。これらのメソッドは ReferentialContainmentRelationshipSet コレクションを返します。

  • Containable.get_Containers メソッドを使用して、コンテナーを取得します。

    Java の例

    Folder currentFolder = Factory.Folder.getInstance(os, null, "Loans");
    ReferentialContainmentRelationshipSet containingFolders = currentFolder.get_Containers();

    C# の例

    IFolder currentFolder = Factory.Folder.GetInstance(os, null, "/Loans");
    IReferentialContainmentRelationshipSet containingFolders = currentFolder.Containers;
        
  • Folder.get_Containees メソッドを使用して、包含されるフォルダーを取得します。
    注: コレクションの ReferentialContainmentRelationship オブジェクトにより参照されるオブジェクトには、フォルダー、ドキュメント、カスタム・オブジェクト、または DynamicReferentialContainmentRelationship オブジェクト (ReferentialContainmentRelationship のサブクラス) があります。

    Java の例

    Folder currentFolder = Factory.Folder.getInstance(os, null, "Loans");
    ReferentialContainmentRelationshipSet containees = currentFolder.get_Containees(); 

    C# の例

    IFolder currentFolder = Factory.Folder.GetInstance(os, null, "/Loans");
    IReferentialContainmentRelationshipSet containees = currentFolder.Containees; 

フォルダーからのドキュメントまたはカスタム・オブジェクトの取得

ドキュメントおよびカスタム・オブジェクトは、常に参照としてフォルダーに包含されます。以下のメソッドを使用して、ドキュメントまたはカスタム・オブジェクトを取得 (fetchInstance を使用)、またはインスタンス化 (getInstance を使用) できます。

  • Folder.get_ContainedDocuments メソッドを使用して、フォルダーに包含されているすべてのドキュメントを取得します。

    Java の例

    String folderPath = "/NewLoans/MyNewLoans";
    Folder myFolder = Factory.Folder.fetchInstance(os, folderPath, null);
    DocumentSet myLoanDocs = myFolder.get_ContainedDocuments();
     

    C# の例

    String folderPath = "/NewLoans/MyNewLoans";
    IFolder myFolder = Factory.Folder.FetchInstance(os, folderPath, null);
    IDocumentSet myLoanDocs = myFolder.ContainedDocuments;
  • Folder.get_Containees メソッドを使用して、参照としてフォルダーに包含されているすべてのオブジェクト (ドキュメント、カスタム・オブジェクト、および可能性としてフォルダー) を取得します。例については「Folder オブジェクトの取得」を参照してください。
  • DynamicReferentialContainmentRelationship.Head プロパティー、または (可能性としては) ReferentialContainmentRelationship.Head プロパティーを取得することにより、コンテナー関係の論理上の先頭であるドキュメントまたはカスタム・オブジェクトを取得します。

    Java の例

    DynamicReferentialContainmentRelationship currentDRCR = Factory.DynamicReferentialContainmentRelationship.fetchInstance(os, (drcr.get_Id()), null);
    IndependentObject currentHead = currentDRCR.get_Head(); 

    C# の例

    IDynamicReferentialContainmentRelationship drcr = Factory.DynamicReferentialContainmentRelationship.CreateInstance(os, null);
    IDynamicReferentialContainmentRelationship currentDRCR = Factory.DynamicReferentialContainmentRelationship.FetchInstance(os, drcr.Id, null);
    IIndependentObject currentHead = currentDRCR.Head;

フォルダーへのオブジェクトのファイリング

Containable オブジェクトをフォルダーにファイリングするには、そのオブジェクトの Folder.file メソッドを呼び出します。オブジェクトがファイリングされると、参照用に、オブジェクトとそれを包含するフォルダーとの間の関係が、次のように自動的に作成されます。Folder インスタンスと CustomObject インスタンスとについては ReferentialContainmentRelationshipDocument インスタンスについては DynamicReferentialContainmentRelationship です。関係オブジェクトは、Folder.file メソッドから返されます。

注: 参照として包含されるフォルダーを作成することもできますが、実際に必要になることはまれであり、アプリケーションは、一般に、フォルダーが直接包含されていると想定しています。

Document (または Document のサブクラス) をファイリングする場合、包含されるドキュメントは現在のドキュメント・バージョンです。この場合、現在のドキュメント・バージョンは使用される順に、リリース済みバージョン (ある場合)、それがなければ現在のバージョン (ある場合)、それもなければ予約バージョンになります。Folder.file メソッドを使用して、特定のドキュメント・バージョンをフォルダーにファイリングすることはできません。

Folder.file メソッドは、ファイリングするオブジェクトのコンテナー名 (null も可) および DefineSecurityParentage プロパティーの設定値を必要とします。詳細については、ReferentialContainmentRelationship.ContainmentName プロパティーを参照してください。defineSecurityParentage パラメーターは、包含する側のフォルダーを、ファイリングされるオブジェクトのセキュリティーの親にするかどうかを決定します。詳しくは、セキュリティーの継承を参照してください。

Folder.file メソッドには autoUniqueName パラメーターも含まれています。このパラメーターを設定し、フォルダー内で名前が競合した場合に Content Engine が自動的に固有のコンテナー名を付けるようにすることができます。コンテナー名で説明するように、このパラメーターを設定して Content Engine による重複名の解決を施行すると、パフォーマンスの低下が発生する可能性があります。

次のコード例は、フォルダーからドキュメントを取得し、それを別のフォルダーにファイリングします。この呼び出しが正常に終了すると、ドキュメントのコンテナー名が返されます。Folder.file メソッドで autoUniqueName パラメーターが NOT_AUTO_UNIQUE が設定されている点に注意してください。したがって、受信するドキュメントと同じコンテナー名のオブジェクトがターゲット・フォルダーに含まれている場合、コンテナー名の重複を示すメッセージとともに例外がスローされます。

Java の例

String folderPath = "/ExistingLoans/MyLoans";
String newFolderPath = "/NewLoans/MyNewLoans";
String newContainmentName = "Loan1";

Document myDoc = Factory.Document.fetchInstance(os, folderPath + "/MyLoan_1", null);
Folder newFolder = Factory.Folder.fetchInstance(os, newFolderPath, null);

// Files the document into the folder with the autoUniqueName parameter disabled and the 
// defineSecurityParentage パラメーターにフォルダーから継承した権限を設定する。
// 返された ReferentialContainmentRelationship オブジェクトを DynamicReferentialContainmentRelationship オブジェクトにキャストし、
// ファイリングされたドキュメントの正しい関係オブジェクトを取得
try {
   DynamicReferentialContainmentRelationship drcr = 
      (DynamicReferentialContainmentRelationship) newFolder.file(
         myDoc, AutoUniqueName.NOT_AUTO_UNIQUE, newContainmentName, DefineSecurityParentage.DEFINE_SECURITY_PARENTAGE);
   drcr.save(RefreshMode.NO_REFRESH);
}
catch (Exception ex) 
{   
   if (ex instanceof EngineRuntimeException) {
  EngineRuntimeException fnEx = (EngineRuntimeException) ex;
      if (fnEx.getExceptionCode().equals(ExceptionCode.E_NOT_UNIQUE) ) {
         System.out.println("Exception: " + ex.getMessage() + "¥n" +
            "The name " + "¥"" + newContainmentName + "¥"" + " is already used.¥n" + 
            "Please file the document with a unique name.");
      }
      else
         System.out.println("Exception: " + ex.getMessage());
   }
   else
      // 標準の Java 例外
      System.out.println("Exception: " + ex.getMessage());
}
        

C# の例

String folderPath = "/ExistingLoans/MyLoans";
String newFolderPath = "/NewLoans/MyNewLoans";
String newContainmentName = "Loan1";
IDocument myDoc = Factory.Document.FetchInstance(os, folderPath + "/MyLoan_1", null);
IFolder newFolder = Factory.Folder.FetchInstance(os, newFolderPath, null);

// フォルダーにドキュメントをファイルする。このとき autoUniqueName パラメーターを有効に、
// defineSecurityParentage パラメーターにフォルダーから継承した権限を設定する。
// 返された ReferentialContainmentRelationship オブジェクトを DynamicReferentialContainmentRelationship オブジェクトにキャストし、
// ファイリングされたドキュメントの正しい関係オブジェクトを取得
try {
   IDynamicReferentialContainmentRelationship drcr = 
     (IDynamicReferentialContainmentRelationship) newFolder.File(
        myDoc, AutoUniqueName.NOT_AUTO_UNIQUE, newContainmentName, DefineSecurityParentage.DEFINE_SECURITY_PARENTAGE);
   drcr.Save(RefreshMode.NO_REFRESH);
}
catch (Exception ex) 
{   
   if (ex is EngineRuntimeException) {
      EngineRuntimeException fnEx = (EngineRuntimeException) ex;
         if (fnEx.GetExceptionCode().Equals(ExceptionCode.E_NOT_UNIQUE) ) {
            System.Console.WriteLine("Exception: " + ex.Message + "¥n" +
               "The name " + "¥"" + NewContainmentName + "¥"" + " is already used.¥n" + 
               "Please file the document with a unique name.");
         }
         else
            System.Console.WriteLine("Exception: " + ex.Message);
    }
    else
       // 標準の Java 例外
       System.Console.WriteLine("Exception: " + ex.Message);
}
 

ReferentialContainmentRelationship オブジェクトの作成

ReferentialContainmentRelationship オブジェクトの生成、および Content Engine のオブジェクト・ストアへの永続化は、Factory.ReferentialContainmentRelationship クラスの createInstance を呼び出すことにより行います。ReferentialContainmentRelationship オブジェクトを作成する主な使用状況は、フォルダーと、ドキュメントまたはカスタム・オブジェクトの特定のバージョンとの間に参照コンテナー関係を作成する場合です。

注: 参照として包含されるフォルダーを作成することもできますが、実際に必要になることはまれであり、アプリケーションは、一般に、フォルダーが直接包含されていると想定しています。

ReferentialContainmentRelationship オブジェクトを作成するときは、オブジェクトの Head プロパティーと Tail プロパティーを設定する必要があります。Head プロパティーをフォルダーに包含するオブジェクトに、Tail プロパティーを包含する側のフォルダーに設定します。

次の例では、ReferentialContainmentRelationship オブジェクトを作成し、ドキュメントを包含されるオブジェクトとして設定します。

Java の例

String parentFolderPath = "/Loans";

// フォルダーに含まれるドキュメントを作成し、チェックインする
Document myDoc = Factory.Document.createInstance(os, null);
myDoc.checkin(null, null);
myDoc.save(RefreshMode.REFRESH);

// 含むフォルダーを取得
Folder container = Factory.Folder.getInstance(os, null, parentFolderPath); 

// フォルダーに含むドキュメントの現行バージョンを取得The
// 関係はこの特定のドキュメント・バージョンとのみ
Document docVer = Factory.Document.getInstance(os, null,(myDoc.get_Id())); 

// ReferentialContainmentRelationship インスタンスを作成
ReferentialContainmentRelationship rcr =     
    Factory.ReferentialContainmentRelationship.createInstance(os, null); 

// ReferentialContainmentRelationship オブジェクトの必要な、
// Head オブジェクト (含まれる)、Tail オブジェクト (含む) を設定し、保存する
rcr.set_Head(docVer); 
rcr.set_Tail(container); 
rcr.save(RefreshMode.NO_REFRESH);

C# の例

String parentFolderPath = "/Loans";

// フォルダーに含まれるドキュメントを作成し、チェックインする
IDocument myDoc = Factory.Document.CreateInstance(os, null);
myDoc.Checkin(AutoClassify.DO_NOT_AUTO_CLASSIFY, CheckinType.MAJOR_VERSION);
myDoc.Save(RefreshMode.REFRESH);

// 含むフォルダーを取得
IFolder container = Factory.Folder.GetInstance(os, null, parentFolderPath);

// フォルダーに含むドキュメントの現行バージョンを取得The
// 関係はこの特定のドキュメント・バージョンとのみ
IDocument docVer = Factory.Document.GetInstance(os, null, myDoc.Id);

// ReferentialContainmentRelationship インスタンスを作成
IReferentialContainmentRelationship rcr = 
    Factory.ReferentialContainmentRelationship.CreateInstance(os, null);

// ReferentialContainmentRelationship オブジェクトの必要な、
// Head オブジェクト (含まれる)、Tail オブジェクト (含む) を設定し、保存する
rcr.Head = (docVer);
rcr.Tail= (container);
rcr.Save(RefreshMode.NO_REFRESH);
        

DynamicReferentialContainmentRelationship オブジェクトの作成

DynamicReferentialContainmentRelationship オブジェクトの生成、および Content Engine のオブジェクト・ストアへの永続化は、Factory.DynamicReferentialContainmentRelationship クラスの createInstance を呼び出すことにより行います。

DynamicReferentialContainmentRelationship オブジェクトの Head プロパティーを包含するドキュメントの現在のバージョンに、Tail プロパティーを包含する側のフォルダーに設定する必要があります。

Java の例

String parentFolderPath = "/Loans";

// フォルダーに含まれるドキュメントを作成
Document doc = Factory.Document.createInstance(os, null);
doc.save(RefreshMode.NO_REFRESH); 

// 含むフォルダーを取得
Folder container = Factory.Folder.getInstance(os, null, parentFolderPath); 

// DynamicReferentialContainmentRelationship インスタンスを作成
DynamicReferentialContainmentRelationship drcr = 
    Factory.DynamicReferentialContainmentRelationship.createInstance(os, null); 

// DynamicReferentialContainmentRelationship オブジェクトの必要な
// Head オブジェクト (ドキュメントの現行バージョン)、Tail オブジェクト (コンテナー) を設定し、保存する
drcr.set_Head(doc); 
drcr.set_Tail(container); 
drcr.save(RefreshMode.NO_REFRESH);

C# の例

String parentFolderPath = "/Loans";

// フォルダーに含まれるドキュメントを作成
IDocument doc = Factory.Document.CreateInstance(os, null);
doc.Save(RefreshMode.NO_REFRESH);

// 含むフォルダーを取得
IFolder container = Factory.Folder.GetInstance(os, null, parentFolderPath);

// DynamicReferentialContainmentRelationship インスタンスを作成
IDynamicReferentialContainmentRelationship drcr =  
        Factory.DynamicReferentialContainmentRelationship.CreateInstance(os, null);

// DynamicReferentialContainmentRelationship オブジェクトの必要な
// Head オブジェクト (ドキュメントの現行バージョン)、Tail オブジェクト (コンテナー) を設定し、保存する
drcr.Head=(doc);
drcr.Tail=(container);
drcr.Save(RefreshMode.NO_REFRESH);

フォルダーへの特定のドキュメント・バージョンの関連付け

Folder.file メソッドを使用して、特定のドキュメント・バージョンをファイリングすることはできません。アプリケーションで、ドキュメントの特定のバージョンをフォルダーと関連付けることが必要な場合は、ReferentialContainmentRelationship オブジェクトを作成してこのコンテナー関係を作成する必要があります。DynamicReferentialContainmentRelationship オブジェクトは、ドキュメントの現在のバージョンにのみ適用されます。詳細については、DynamicReferentialContainmentRelationship オブジェクトの作成を参照してください。

これにより、Folder.get_Containees メソッドを使用するか、その関係の ReferentialContainmentRelationship.Tail プロパティーを取得して、ドキュメントを取得できるようになります。詳細については、Folder オブジェクトの取得を参照してください。



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

© Copyright IBM Corp. 2015.