Server Access Programmer's Guide:
Overview

This topic introduces the eRoom Server Access API and explains conventions used throughout the documentation.

Who should read this guide?


eRoom Server Access API Programmer's Guide is for experienced application developers. It contains basic information about the API's objects and their interfaces. In order to successfully use this API, you should be able to write programs in either C++ or in a scripting language, such as Visual Basic, VBScript or JavaScript.

What is SAAPI?


The eRoom Server Access API (SAAPI) is composed of easily-programmed objects that appear in the eRoom client User interface: Sites, Facilities, Files, Folder Pages, Note Pages, Users, and so on. The Server Access API is an OLE Automation API. This means that clients can be written in any automation-compatible language, such as Visual Basic, VBScript, C++, Java, or JavaScript.

What kinds of things can you do with SAAPI?


With few exceptions, you can use SAAPI to write programs that do anything you can do through the eRoom user interface. SAAPI programs can even do a few things you can't accomplish with the eRoom user interface. While the possibilities are too numerous to list, here are a few ideas to get you thinking:

  • Create rooms and populate them with data from another source

  • Copy data from facilities and rooms to another source

  • Manage the member lists of facilities and rooms

  • Generate reports on users or rooms

  • Search for items within facilities or rooms

  • Automate administrative tasks

  • Extend eRoom's functionality by developing add-on utilities

COM and the Server Access API


The eRoom Server Access API is a Component Object Model (COM) API. The API is comprised of a set of objects, each made up of one or more interfaces. As with any COM API, there is not necessarily a one-to-one relationship between objects and interfaces:

  • Some interfaces are specific to the object type. For example, the Facility object implements the IERUFacility interface. This interface contains methods and properties that pertain only to Facilities. Some interfaces are more general-purpose. For example, several objects, such as Files, Folder Pages, and Note Pages, implement the IERUAccessControl interface. This interface contains methods and properties that pertain to the access control lists of all of these objects, not just one particular type. General-purpose interfaces are implemented by several object types.

  • Some objects implement several interfaces. For example, a File object implements IERUFile, IERUAccessControl, and IERUItem.

Accessing different COM interfaces for a single object


SAAPI is a language-neutral API, accessible from any language compatible with COM automation programming. The capabilities of these languages varies, however. For example, scripting languages such as VBScript do not support typed objects and lack the ability to directly access different interfaces on a single object, as can be done via QueryInterface in C++, or through assignment to a type-specific variable in Visual Basic. To address this limitation, for objects that implement more than one interface, SAAPI defines properties which serve the same purpose by returning as their value a different interface to the same object. These properties are referred to as "interface accessors" in this documentation.

For example, Group objects in SAAPI implement both the IERUMember interface and the IERUGroup interface. The Group property in IERUMember returns an IERUGroup interface pointer for the Group.

General SAAPI Programming Conventions


Array bounds and indexes

Array bounds and collection indexes in SAAPI are generally 1 based. ERoom will accept a safearray with any upper and lower bounds, but will only return 1 based arrays to coincide with 1 based collection indexes. Keep in mind that a when creating new arrays in VB/JS they are generally 0 based.

Use Typed IERU* interfaces rather than Idispatch

For performance and usability, readability, maintainability of your code, it is best to use strongly typed languages when possible. VBScript/JavaScript are untyped (they only have a Variant type; you can’t specify the type of a variable). In this case, you are calling into the object via its IDispatch interface, by name.

Note that the interface accessors that return specific item interfaces are no longer needed as of eRoom V.7. Now all properties from all implemented interfaces can be accessed directly on the object. For example, the Folder object’s Description property is implemented by IERUFolderPage::Description property. In script, you can simply access all properties implemented by the folderpage object directly on that object. See the following examples:

’r;## Accessing properties in UnTyped/Scriping languages (Idispatch)

Dim o

Set o = Room.GetItem(SomeItemID)   ’r;## Get item as Idispatch interface

Response.write ”r;Description=”r; + o.Description  ’r;## Call IERUFolderPage::Description if is folder or IERUNotePage is note, etc&ldots;

Response.write ”r;URL=”r; + o.URL  ’r;## Call IERUPrincipalItem::URL via IDispatch

’r;or&ldots;. Something member related

Dim member

Set member=MemberManager.GetMember(SomeMemberID)

Response.write ”r;DisplayName=” + member.DisplayName  ’r;## Call IERUUser::DisplayName via IDispatch

Response.write ”r;IsSiteAdministator=” + member.IsSiteAdministrator ’r;## IERUUser::IsSiteAdminstrator via IDispatch

’r;## Accessing properties using typed interface in a typed language (IERU* interfaces)

dim item as IERUItem

dim principalItem as IERUPrincipalItem

set item = Room.GetItem(SomeItemID)   ’r;## Get item as IERUItem interface

set principalItem = item    ’r;## QueryInterface for IERUPrincipalItem interface

dim folder as IERUFolderPage

set folder=item  ’r;## QueryInterface for IERUFolderPage

Response.write ”r;Description=”r; + folder.Description  ’r;## Call IERUFolderPage::Description directly

Response.write ”r;URL=”r; + principalItem.URL  ’r;## Call IERUPrincipalItem::URL directly

’r;NOTE: Idispatch can be used in strongly typed languages to generalize access to properties that are common to many types of items but are defined in different interfaces. For example, ::Description is defined in IERUFolderPage, IERUNotePage, IERUInboxPage, IERUProjectTaskPage, etc, therefore you would have to write object type specific code to get the ::Description property from these varied types of objects. You can write more generic code that will access the named property via Idispatch by simply using a variable of type VARIANT or Object to make access the property.

dim o as object

set o = item   ’r;## QueryInterface for Idispatch

Response.write ”r;Description=”r; + o.Description  ’r;## Get description via Idispatch (object type independent)

’r;or&ldots;. Something member related

Dim member as IERUMember

Dim user as IERUUser

Set member=MemberManager.GetMember(SomeMemberID)

Set user = member   ’r;## QueryInterface for IERUUser interface

Response.write ”r;DisplayName=” + user.DisplayName  ’r;## Defined in IERUUser

Response.write ”r;IsSiteAdministator=” + user.IsSiteAdministrator ’r;## Defined in IERUUser

Licensing and Login/Impersonation

Note that employing a user via the API (ie. ::LoginUser(), ::ImpersonateUser(), ::CreateAuthenticationSession() methods will consume a license the first time, just as would happen if the user had logged in via a web browser.

Database Performance Tips

The fastest way to get data from a data object is via a DBQuery and the use of the ::GetRowCells() method. Accessing data through the cells collection is much slower and should be avoided unless updates are required or you must access attachments, comments, or Richtext data types.

Simple Encryption Support

The eRoom Authenticator object provides a simple two-way encryption for use in saving cookies. See the IERUAuthenticator::SimpleEncrypt/SimpleDecrypt methods for details. Note that this is not a strong encryption.

Getting Help


When you have a question about SAAPI, you can refer to this Programmer's Guide, or any of these sources:

  • Reference pages: For detailed descriptions of every object, interface, method and property defined by SAAPI, see the language reference.

  • Samples: The SAAPI toolkit ships with several programming samples which are intended to help you learn the API. In many cases, you may find that one of the samples tackles a problem similar to the one you are trying to solve, and you can use the sample as a starting point for your work.

Conventions used in the documentation


Convention

Description

variable

In syntax statements, italics indicate placeholders for information you supply.

GetItem

In syntax statements, bold indicates a word you must enter exactly as it appears.

Clt.GetFacility

Courier font indicates syntax

and examples.

Item, Facility

Object names appear with their first letter in uppercase. You will notice that some terms used in this documentation are capitalized in some contexts and not capitalized in others. Generally, when a term is capitalized (such as User), it is referring to a specific object in the SAAPI programming model. When not capitalized, it is being used in a more general sense, referring to the underlying concept rather than specifically to the programmable object which exposes its functionality.

edit list

In text, a word appears in boldface when it is first introduced.

The term eRoom refers to the product called eRoom. The term room (all lowercase) refers to the concept of an membership-controlled container of items, and the term Room (capitalized) refers to the programmable object that exposes its functionality.

Sample code

The Programmer's Guide contains many code examples that illustrate the concepts discussed in the guide. Unless otherwise specified, all sample code is written in Visual Basic 5.0.