Server Extension Programmer's Guide:
Common Extension Information

This topic covers the following items that are common to one or more extension types:

Custom Context Object

ASP Functions

ASP Error Handling and Reporting

Extension Language Localization and Code Pages

Returning Control from ASP Extensions

Debugging ASP Extensions

Custom Context Object

The IERUCustomContext object is passed to Custom Commands, Custom Viewers, and UI Events via Sub Main(Context). This object can also be retrieved for use in Custom User Interfaces (Custom Page Frames) using ERGetCustomContext().

The ::IsPersistent property controls the context object and is stored on the user’s session state, making it available across server requests. If true, the context object is stored on the user's session, and the extension is responsible for performing cleanup prior to final redirect. (Not that you must include querystrings on you URLs to allow eRoom to retrieve the correct context object.)  This session state is uniquely identified using the ERWindowName querystring.

ASP Functions

The files SAAPIUtils.ASP and SAAPILogin.ASP contain numerous functions for use by server extensions. For information on these functions, refer to the eRoom Constants and Helper Functions topic.

ASP Error Handling and Reporting

ASP-based extensions all share a common structure. Each is made up of a Sub Main() that is called with a context object. If Sub Main() returns with an error set in Err.Number, a default error handler will report the error message. An extension can raise an error by using Err.Raise method. For Example:

Err.Raise MyERRNumber, MyERRSource, ”r;My specific error message for this failure.”

As appropriate, an extension may also choose to handle errors within the page itself or to ignore errors.

Extension Language Localization and Code Pages

eRoom extensions are common between languages. Language localization can be achieved in a number of ways: via Windows resource dll(s)/loadstring, server transfer to localized ASP pages, or other techniques.

ERoom establishes the client locale for the running thread before reaching any server extension. You can determine the client’s locale by using ASP Session.LCID or via GetThreadLocale() in the Windows API. A LANGID can be derived from LCID to determine the primary language.

A simple COM object could be built to expose a LoadString() method to your extension. The method would simply call Windows LoadString using the current thread’s locale.

In the case of Custom User Interfaces (page frame customization), you are more limited. You should try to keep changes language-neutral when possible.

eRoom can run in a variety of international configurations. We recommend that you specify the CODEPAGE of your ASP-based extensions by using the <%@ CODEPAGE = nnnn %> directive. You can specify the codepage of your ASP page by simply adding the following before any other statements:

<%@ CODEPAGE = 1252 %>

Returning Control from ASP Extensions

Returning control to eRoom from an ASP extension varies with the type of extension. In most cases, you can simply call ERCustomEnd() with the URL that you wish to redirect to. For example, ERCustomEnd Context.ReturnURL.

Returning or Redirecting from UIEvents

The function FinishHandleEvent(Status) &endash; This function will clean up any persistent session state associated with a running UIEvent. This is similar to ERCustomEnd(), which can also be used to clean up a UIEvent and redirect. Calling FinishHandleEvent() will clean up and/or redirect as defined by status. Status is defined as:

  • eruiStatusDone -- Clean up, without any redirect.

  • eruiStatusRedirectToPage -- Clean up and redirect to the ”r;current page”. This is only appropriate when there is a known current page to return to. Context.ReturnURL will be ”r;” (empty) if you the return location is unknown.

  • eruiStatusRedirectToDialog &endash;- Don’t clean up; redirect to the non-overriden eRoom core dialog.

  • eruiStatusRedirectReturn --  Redirect to Context.ReturnURL; If returning to a dialog, session state will not be released. This can be used for the erEventCreateUser and erEventCreateGroup to return to the calling add members page.

Returning from Custom Commands, Custom Viewers, and UI Events

Redirect to Context.ReturnURL after freeing the custom context by calling "ERCustomEnd() or settings Context.IsPersistent=FALSE.

There is no need to release session state unless Context::IsPersistent is true."  Custom viewer's context are not persistent by default.

For standalone viewers, redirect to ReturnURL. For popup mode, close the browser window. Embedded mode viewers cannot return in that they are embedded in the eRoom page.

Debugging ASP Extensions

Note that you can find errors that are being thrown from deep within ASP code by simply disabling or removing your error handlers and allowing the error to stop execution of the script.

If you are having trouble finding an error during page generation of you extension, try temporarily editing /eRoomASP/EN/eRoomCustomUtils.ASP and changing the following constant to true.

CONST erDebugCustomErrors = false

Warning: Modifying ANY eRoom core file will result in a checksum warning being emailed to the site administrator. You must replace the original file with original date/time to satisfy the checksum.