The following code examples demonstrate recovery bin operations. For an overview of recovery bins, see Recovery Bins.
The following Java™ and C# examples create an instance of CmRecoveryBin. The display name of the instance is set to the short name of the user that creates the recovery bin.
Java Example
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);
// Create instance of recovery bin.
CmRecoveryBin myBin = Factory.CmRecoveryBin.createInstance(os, "CmRecoveryBin");
myBin.set_DisplayName(user.get_ShortName());
myBin.save(RefreshMode.REFRESH);
C# Example
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);
// Create instance of recovery bin.
ICmRecoveryBin myBin = Factory.CmRecoveryBin.CreateInstance(os, "CmRecoveryBin");
myBin.DisplayName = user.ShortName;
myBin.Save(RefreshMode.REFRESH);
The following Java and C# examples mark an object for deletion. The examples assume that the object to be marked for deletion and the recovery bin that contains the marked object are passed to the method. When the markForDeletion method is called, a CmRecoveryItem is returned.
Java Example
CmRecoveryItem markedItem;
// Determine if the passed object is a Document or CustomObject.
if (passedObject.get_ClassDescription().describedIsOfClass("Document"))
{
// Get the VersionSeries from the document.
VersionSeries vs = passedObject.get_VersionSeries();
markedItem = vs.markForDeletion(myBin, "CmRecoveryItem");
markedItem.save(RefreshMode.REFRESH);
}
else // Must be custom object to be marked for deletion.
{
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# Example
ICmRecoveryItem markedItem;
// Determine if the passed object is a Document or CustomObject.
if ((bool) passedObject.ClassDescription.DescribedIsOfClass("Document"))
{
// Get the VersionSeries from the document.
IVersionSeries vs = passedObject.VersionSeries;
markedItem = vs.MarkForDeletion(myBin, "CmRecoveryItem");
markedItem.Save(RefreshMode.REFRESH);
}
else // Must be custom object to be marked for deletion.
{
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);
The following Java and C# examples iterate all recovery items in a recovery bin and run a specified action on every item. The examples assume that the ID of the recovery bin and an action flag are passed to the method.
Java Example
static PropertyFilter pf = new PropertyFilter();
...
// Get the recovery bin from the Id passed to the method.
pf.addIncludeProperty(new FilterElement(null, null, null, "RecoveryItems", null));
CmRecoveryBin myBin = Factory.CmRecoveryBin.fetchInstance(os, new Id(idString), pf);
// Get the recovery items contained by the recovery bin.
CmRecoveryItemSet items = myBin.get_RecoveryItems();
Iterator iter = items.iterator();
while (iter.hasNext())
{
CmRecoveryItem item = (CmRecoveryItem) iter.next();
// Perform operation as specified by flag passed to the method.
if (actionFlag==ACTION_RECOVER) item.recover();
else if (actionFlag==ACTION_PURGE) item.delete();
item.save(RefreshMode.REFRESH);
}
C# Example
static PropertyFilter pf = new PropertyFilter();
...
// Get the recovery bin from the Id passed to the method.
pf.AddIncludeProperty(new FilterElement(null, null, null, "RecoveryItems", null) );
ICmRecoveryBin myBin = Factory.CmRecoveryBin.FetchInstance(os, new Id(idString), pf);
// Get the recovery items contained by the recovery 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);
}
The following Java and C# examples report on all of the recovery bins in an object store. The code retrieves the set of recovery bins in an object store, iterates the set, and retrieves and iterates the recovery items in each recovery bin. The code counts the number of recovery bins and objects that are marked for deletion in the object store. Because this code gets the OriginalObject property on the recovery items, the user that runs the code must have the VIEW_RECOVERABLE_OBJECTS access right on the object store.
Java Example
// Execute query for all recovery bins in an object store.
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);
// Initialize counters.
int counterRecoveryBins = 0;
int counterMarkedForDeletion = 0;
// Iterate the set of recovery bins.
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());
// Get all of the recovery items in the bin.
CmRecoveryItemSet items = bin.get_RecoveryItems();
if (items.isEmpty()){
System.out.println("No recovery items in bin");
continue;
}
System.out.println("Recovery items " + "\n---------------");
// For each bin, iterate the set of recovery items.
Iterator iterInner = items.iterator();
while (iterInner.hasNext())
{
CmRecoveryItem item = (CmRecoveryItem) iterInner.next();
// To get OriginalObject property, logged in user requires the VIEW_RECOVERABLE_OBJECTS right on the object store.
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();
}
}
// Print counter information.
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# Example
// Execute query for all recovery bins in an object store.
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);
// Initialize counters.
int counterRecoveryBins = 0;
int counterMarkedForDeletion = 0;
// Iterate the set of recovery bins.
foreach(ICmRecoveryBin bin in binSet)
{
counterRecoveryBins++;
System.Console.WriteLine("\nRecovery bin: " + bin.DisplayName + " Owned by: " + bin.Owner);
// Get all of the recovery items in the bin.
ICmRecoveryItemSet items = bin.RecoveryItems;
if (items.IsEmpty()){
System.Console.WriteLine("No recovery items in bin");
continue;
}
System.Console.WriteLine("Recovery items " + "\n---------------");
// For each bin, iterate the set of recovery items.
foreach(ICmRecoveryItem item in items)
{
// To get OriginalObject property, logged in user must have VIEW_RECOVERABLE_OBJECTS on the object store.
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;
}
}
// Print counter information.
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);