リカバリー 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);