IBM FileNet P8, バージョン 5.2.1            

リカバリー bin の操作

以下のコード例は、リカバリー bin 操作を示しています。リカバリー bin の概要については、『リカバリー bin』を参照してください。

リカバリー bin の作成

以下の Java™ および C# の例では、CmRecoveryBin のインスタンスを作成します。 インスタンスの表示名は、リカバリー bin を作成するユーザーの短縮名に設定されます。

Java の例

static PropertyFilter pf = new PropertyFilter();
...
// Get name of user creating recovery bin.
pf.addIncludeProperty(new FilterElement(null, null, null, "ShortName", null));
User user = Factory.User.fetchCurrent(conn, pf);
                
// リカバリー bin のインスタンスを作成
CmRecoveryBin myBin = Factory.CmRecoveryBin.createInstance(os, "CmRecoveryBin");
myBin.set_DisplayName(user.get_ShortName());
myBin.save(RefreshMode.REFRESH);

C# の例

static PropertyFilter pf = new PropertyFilter();
...
// Get name of user creating recovery bin
pf.AddIncludeProperty(new FilterElement(null, null, null, "ShortName", null) );
IUser user = Factory.User.FetchCurrent(conn, pf);
                
// リカバリー bin のインスタンスを作成
ICmRecoveryBin myBin = Factory.CmRecoveryBin.CreateInstance(os, "CmRecoveryBin");
myBin.DisplayName = user.ShortName;
myBin.Save(RefreshMode.REFRESH);

削除のマーキング

以下の Java および C# の例では、オブジェクトに削除のマークを付けます。この例では、削除のマークを付けられるオブジェクトと、マークを付けられたオブジェクトを収容するリカバリー bin がメソッドに渡されることを想定しています。 markForDeletion メソッドが呼び出されると、CmRecoveryItem が返されます。

Java の例

CmRecoveryItem markedItem;

// 渡されたオブジェクトが Document または CustomObject であることを判別
if (passedObject.get_ClassDescription().describedIsOfClass("Document"))
{
   // ドキュメントから VersionSeries を取得
   VersionSeries vs = passedObject.get_VersionSeries();
   markedItem = vs.markForDeletion(myBin, "CmRecoveryItem");
   markedItem.save(RefreshMode.REFRESH);
}
else // 削除マークを付ける対象のカスタム・オブジェクトであることが必要
{
   markedItem = passedObject.markForDeletion(myBin, "CmRecoveryItem");
   markedItem.save(RefreshMode.REFRESH);
}
       
System.out.println("Object " +  markedItem.get_OriginalName() + "¥n" +
   "was deleted to recovery bin " + myBin.get_DisplayName() + ".¥n" +
   "Number of objects marked for deletion (includes cascading): " + markedItem.get_RecoverableObjectsCount());

C# の例

ICmRecoveryItem markedItem;

// 渡されたオブジェクトが Document または CustomObject であることを判別
if ((bool) passedObject.ClassDescription.DescribedIsOfClass("Document"))
{
   // ドキュメントから VersionSeries を取得
   IVersionSeries vs = passedObject.VersionSeries;
   markedItem = vs.MarkForDeletion(myBin, "CmRecoveryItem");
   markedItem.Save(RefreshMode.REFRESH);
}
else // 削除マークを付ける対象のカスタム・オブジェクトであることが必要
{
   markedItem = passedObject.MarkForDeletion(myBin, "CmRecoveryItem");
   markedItem.Save(RefreshMode.REFRESH);
}
       
System.Console.WriteLine("Object " +  markedItem.OriginalName + "¥n" +
   "was deleted to recovery bin " + myBin.DisplayName + ".¥n" +
   "Number of objects marked for deletion (includes cascading): " + markedItem.RecoverableObjectsCount);

リカバリー bin 内のアイテムの反復

以下の Java および C# の例では、リカバリー bin 内のすべてのリカバリー・アイテムを反復処理して、アイテムごとに指定されたアクションを実行します。この例では、リカバリー bin の ID とアクション・フラグがメソッドに渡されることを想定しています。

Java の例

static PropertyFilter pf = new PropertyFilter();
...

// メソッドに渡される ID からリカバリー bin を取得
pf.addIncludeProperty(new FilterElement(null, null, null, "RecoveryItems", null));
CmRecoveryBin myBin = Factory.CmRecoveryBin.fetchInstance(os, new Id(idString), pf);

// リカバリー bin に含まれているリカバリー・アイテムを取得
CmRecoveryItemSet items = myBin.get_RecoveryItems();
Iterator iter = items.iterator();
while (iter.hasNext())
{
   CmRecoveryItem item = (CmRecoveryItem) iter.next();

   // メソッドに渡されたフラグで指定されている操作を実行
   if (actionFlag==ACTION_RECOVER) item.recover();
   else if (actionFlag==ACTION_PURGE) item.delete();

   item.save(RefreshMode.REFRESH);
}

C# の例

static PropertyFilter pf = new PropertyFilter();
...

// メソッドに渡される ID からリカバリー bin を取得
pf.AddIncludeProperty(new FilterElement(null, null, null, "RecoveryItems", null) );
ICmRecoveryBin myBin = Factory.CmRecoveryBin.FetchInstance(os, new Id(idString), pf);

// リカバリー bin に含まれているリカバリー・アイテムを取得
ICmRecoveryItemSet items = myBin.RecoveryItems;
foreach (ICmRecoveryItem item in items)
{
   if (actionFlag==ACTION_RECOVER) item.Recover();
   else if (actionFlag==ACTION_PURGE) item.Delete();

   item.Save(RefreshMode.REFRESH);
}

リカバリー bin の反復

以下の Java および C# の例では、オブジェクト・ストアのすべてのリカバリー bin を報告します。 コードは、オブジェクト・ストア内のリカバリー bin のセットを取得して、そのセットを反復処理し、各リカバリー bin 内のリカバリー・アイテムを取得して反復処理します。 コードは、オブジェクト・ストア内のリカバリー bin と削除のマークを付けられたオブジェクトの数をカウントします。 このコードはリカバリー・アイテムの OriginalObject プロパティーを取得するため、コードを実行するユーザーには、オブジェクト・ストアに対する VIEW_RECOVERABLE_OBJECTS アクセス権が必要です。

Java の例

// オブジェクト・ストア内のすべてのリカバリー bin の照会を実行
SearchSQL sqlObject = new SearchSQL("select * from CmRecoveryBin");
SearchScope searchScope = new SearchScope(os);
Integer myPageSize = new Integer(1000);
Boolean continuable = Boolean.valueOf(true);
IndependentObjectSet binSet = searchScope.fetchObjects(sqlObject, myPageSize, null, continuable);

// カウンターを初期化
int counterRecoveryBins = 0;
int counterMarkedForDeletion = 0;

// リカバリー bin のセットを反復処理
Iterator iterOuter = binSet.iterator();
while (iterOuter.hasNext()) 
{
   counterRecoveryBins++;
   CmRecoveryBin bin = (CmRecoveryBin) iterOuter.next();
   System.out.println("¥nRecovery bin: " + bin.get_DisplayName() + "   Owned by: " + bin.get_Owner());

   // bin 内のすべてのリカバリー・アイテムを取得
   CmRecoveryItemSet items = bin.get_RecoveryItems();
   if (items.isEmpty()){
      System.out.println("No recovery items in bin");
      continue;
   }
   System.out.println("Recovery items " + "¥n---------------");

   // bin ごとにリカバリー・アイテムのセットを反復処理
   Iterator iterInner = items.iterator();
   while (iterInner.hasNext())
   {
      CmRecoveryItem item = (CmRecoveryItem) iterInner.next();
      
      // OriginalObject プロパティーを取得するために、ログインしたユーザーにはオブジェクト・ストアに対する VIEW_RECOVERABLE_OBJECTS 権限が必要
      System.out.println("Class type: " + item.get_OriginalObject().getClass().getSimpleName() + "¥n" +
         "Original Name: " + item.get_OriginalName() +"¥n" +
         "Number of objects marked for deletion (includes cascading): "+ item.get_RecoverableObjectsCount() + "¥n");
         
         counterMarkedForDeletion = counterMarkedForDeletion + item.get_RecoverableObjectsCount();
   } 
}

// カウンター情報を出力
System.out.println("Total number of recovery bins in object store: " + counterRecoveryBins);
System.out.println("Total number of objects marked for deletion in object store: " + counterMarkedForDeletion);

C# の例

// オブジェクト・ストア内のすべてのリカバリー bin の照会を実行
SearchSQL sqlObject = new SearchSQL("select * from CmRecoveryBin");
SearchScope searchScope = new SearchScope(os);
int myPageSize = 1000;
Boolean continuable = true;
IIndependentObjectSet binSet = searchScope.FetchObjects(sqlObject, myPageSize, null, continuable);

// カウンターを初期化
int counterRecoveryBins = 0;
int counterMarkedForDeletion = 0;

// リカバリー bin のセットを反復処理
foreach(ICmRecoveryBin bin in binSet)
{
   counterRecoveryBins++;
   System.Console.WriteLine("¥nRecovery bin: " + bin.DisplayName + "   Owned by: " + bin.Owner);

   // bin 内のすべてのリカバリー・アイテムを取得
   ICmRecoveryItemSet items = bin.RecoveryItems;
   if (items.IsEmpty()){
      System.Console.WriteLine("No recovery items in bin");
      continue;
   }
   System.Console.WriteLine("Recovery items " + "¥n---------------");

   // bin ごとにリカバリー・アイテムのセットを反復処理
   foreach(ICmRecoveryItem item in items)
   {
      // OriginalObject プロパティーを取得するために、ログインしたユーザーにはオブジェクト・ストアに対する VIEW_RECOVERABLE_OBJECTS が必要
      System.Console.WriteLine("Class type: " + item.OriginalObject.GetType().Name + "¥n" +
         "Original Name: " + item.OriginalName + "¥n" +
         "Number of objects marked for deletion (includes cascading): "+ item.RecoverableObjectsCount + "¥n");

      counterMarkedForDeletion = counterMarkedForDeletion + (int) item.RecoverableObjectsCount;
   } 
}

// カウンター情報を出力
System.Console.WriteLine("Total number of recovery bins in object store: " + counterRecoveryBins);
System.Console.WriteLine("Total number of objects marked for deletion in object store: " + counterMarkedForDeletion);


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

© Copyright IBM Corp. 2015.