Programmer's Guide:
Containment in an eRoom

Many SAAPI objects act as containers of other objects. For example, Polls contain Ballots, Ballots contain Votes, and Topics contain Comments and Polls. This section focuses on those containers that can contain principal items. These Container objects implement the IERUContainer interface, and include Discussion Page, Folder Page, Inbox Page, List Page, Mail Page, Note Page, Poll Page, Table Page, Topic Page, and Version Page.

An easy way to remember which objects implement IERUContainer is that in the eRoom user interface, the page for that object contains an "item box", a list box that displays contained items either as large icons, small icons, or as a multi-column detailed list. (Some pages only show the large icon view.) The shape and location of the item box varies depending on the page, but the concept is the same.

These container objects share the following capabilities:

  • You can get a list of the principal items they contain.

  • You can create new principal items within them.

  • You can copy or move existing principal items to them.

Some containers limit what kinds of principal items can be created in them, and some principal items can only appear in certain types of containers:

  • Discussion Pages can only contain Topic Pages (and Topic Pages can only reside in Discussion Pages)

  • Version Pages can only contain Files

  • Inbox Pages can only contain Mail Pages (and Mail Pages can only reside in Inbox Pages)

Getting the list of child items in a container


Enumerating the children of a container is a straightforward process: Simply use the Items property of the IERUContainer interface.

Sub ProcessContainer(Container as IERUContainer)
Dim Item as IERUItem

For Each Item in Container.Items
  'Do something with the child item
  Debug.Print Item.Name
Next
End Sub

Creating child items


To create a principal item inside a container, use one of the type-specific Create methods defined in the IERUContainer interface. Many of these methods take an input parameter to initialize a rich text property, and an associated parameter that indicates whether the value for the rich text parameter has been supplied as HTML or plain text. In addition, many of these methods take a parameter called CreateOptions, which lets you provide flags or initialization. Different methods accept different flags, so consult the reference help topics for information on specific methods. To supply more than one flag, you should logically OR the values from the ERUCreateOption enum. To specify no flags, use the value erCreateOptNone.

For example, the following example creates a Folder Page within a container:

'Assume MyContainer is already initialized to refer
'to an object that implements IERUContainer
Dim NewFolder as IERUItem
Set NewFolder = MyContainer.CreateFolder("New Folder Page",
"This is a Folder Page",
erFormatPlainText,
erCreateOptShowDescription | erCreateOptShowComments)

Moving, copying, deleting, and restoring items


To move or copy a principal item from one container to another, you must call the MoveTo or CopyTo method on the object, supplying the destination container as an argument to the call. The logged-in user must have "can edit" privileges on an object in order to move it. To copy an object, the logged-in user only needs "can open" privileges on the object. After you move an object, it has the same access control state that it had before you moved it, except that its new container may restrict access to it. After you copy an object, the copy of the source object in the destination container has a "can edit" list set to the user who performed the copy, and a "can open" list set to any member who can get to it (erScopeInheritOpenAccess). Furthermore, if the source object is marked "read only" or "reserved for editing", these states are not preserved in the new copy.

You do not delete an item through its container. To delete an item, call the Delete method on the item that you want to delete. Note that the user interface has a concept of a "wastebasket" that holds the contents of the last item or group of items deleted, and lets a user restore the last item deleted from this wastebasket. SAAPI does not employ this technique; when you delete an item through SAAPI, it is permanently deleted. Furthermore, SAAPI does not provide a way to restore an item that was deleted (sent to the wastebasket) through the user interface.

Name Uniqueness Rules


All Principal Items at the same level of containment in an eRoom must have unique names. When calling any of the "Create" methods in IERUContainer, you must specify a unique name or include the value erCreateOptMakeNameUnique in the set of flags passed via the CreateOptions parameter; otherwise the error EROOM_E_DUPLICATENAME will be returned. The CopyTo, MoveTo, and RouteTo methods in IERUItem work similarly, except that the flags to use are erCopyFlagMakeNameUnique, erMoveFlagMakeNameUnique, and erRouteFlagMakeNameUnique, and the parameters are CopyFlags, MoveFlags, and RouteFlags, respectively.

When you perform one of these operations and request name uniqueness by supplying the appropriate flag, eRoom will check for name uniqueness within the destination container. If there is a name conflict, the object's name will be modified according to the following rules:

  • When creating, moving or routing objects, names are made unique by appending " (n)", where n is the first number greater than 1 that is not in use in that container. Files will have the " (n)" appended to the basename of the file, leaving the extension intact.

  • When copying objects, names are made unique first by prepending "Copy of" to the name, and if that is not sufficient to achieve uniqueness, by prepending "Copy (n) of" to the name instead.